diff --git a/anchors.css b/anchors.css index 569b2286..99cd0429 100644 --- a/anchors.css +++ b/anchors.css @@ -31,4 +31,4 @@ left: -1em; } -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLzxpbnB1dCBjc3MgMT4iLCJhbmNob3JzLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbURBQW1EO0FDRW5EO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsaUJBQUE7Q0RBRDtBQ0VDO0VBQ0UsY0FBQTtDREFIO0FDRUc7OztFQUdFLFlBQUE7RUFDQSxzQkFBQTtDREFMO0FDR0c7RUFDRSxlQUFBO0NEREw7QUNLQztFQUVJLHNCQUFBO0NESkw7QUNTRztFQUNFLGtCQUFBO0NEUEw7QUNLQztFQU1JLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLFNBQUE7RUFDQSxvQ0FBQTtVQUFBLDRCQUFBO0VBQ0EsV0FBQTtDRFJMIiwiZmlsZSI6ImFuY2hvcnMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogPT09PT09PT09PSBjb2xvcnMudGhlbWUgLSDln7rnoYDpopzoibLlj5jph4/pm4blkIggPT09PT09PT09PSAqL1xuLm91dGxpbmUtaGVhZGluZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xufVxuLm91dGxpbmUtaGVhZGluZzpob3ZlciAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0OmhvdmVyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0IC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgbGVmdDogLTFlbTtcbn1cbiIsIkBpbXBvcnQgJy4vY29sb3JzJztcclxuXHJcbi5vdXRsaW5lLWhlYWRpbmcge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAxO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICZfX2FuY2hvciB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG5cclxuICAgICY6bGluayxcclxuICAgICY6dmlzaXRlZCxcclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xyXG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiBAcHJpbWFyeV9jb2xvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICY6aG92ZXIge1xyXG4gICAgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcclxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9zdGFydCB7XHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XHJcbiAgICB9XHJcblxyXG4gICAgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICB6LWluZGV4OiAyO1xyXG4gICAgICB0b3A6IDUwJTtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgICBsZWZ0OiAtMWVtO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLzxpbnB1dCBjc3MgMT4iLCJhbmNob3JzLmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbURBQW1EO0FDRW5EO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsaUJBQUE7Q0RBRDtBQ0VDO0VBQ0UsY0FBQTtDREFIO0FDRUc7OztFQUdFLFlBQUE7RUFDQSxzQkFBQTtDREFMO0FDR0c7RUFDRSxlQUFBO0NEREw7QUNLQztFQUVJLHNCQUFBO0NESkw7QUNTRztFQUNFLGtCQUFBO0NEUEw7QUNLQztFQU1JLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLFNBQUE7RUFDQSxvQ0FBQTtVQUFBLDRCQUFBO0VBQ0EsV0FBQTtDRFJMIiwiZmlsZSI6ImFuY2hvcnMuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogPT09PT09PT09PSBjb2xvcnMudGhlbWUgLSDln7rnoYDpopzoibLlj5jph4/pm4blkIggPT09PT09PT09PSAqL1xuLm91dGxpbmUtaGVhZGluZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xufVxuLm91dGxpbmUtaGVhZGluZzpob3ZlciAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0OmhvdmVyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0IC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgbGVmdDogLTFlbTtcbn1cbiIsIkBpbXBvcnQgJy4vY29sb3JzJztcblxuLm91dGxpbmUtaGVhZGluZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmX19hbmNob3Ige1xuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAmOmxpbmssXG4gICAgJjp2aXNpdGVkLFxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAcHJpbWFyeV9jb2xvcjtcbiAgICB9XG4gIH1cblxuICAmOmhvdmVyIHtcbiAgICAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgfVxuXG4gICZfc3RhcnQge1xuICAgICY6aG92ZXIge1xuICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgfVxuXG4gICAgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHotaW5kZXg6IDI7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgIGxlZnQ6IC0xZW07XG4gICAgfVxuICB9XG59XG4iXX0= */ diff --git a/anchors.min.css b/anchors.min.css index 9b072ff7..9837c2c1 100644 --- a/anchors.min.css +++ b/anchors.min.css @@ -1,2 +1,2 @@ .outline-heading{position:relative;z-index:1;overflow:hidden}.outline-heading__anchor{display:none}.outline-heading__anchor:hover,.outline-heading__anchor:link,.outline-heading__anchor:visited{color:#999;text-decoration:none}.outline-heading__anchor:hover{color:#1f8dd6}.outline-heading:hover .outline-heading__anchor{display:inline-block}.outline-heading_start:hover{overflow:visible}.outline-heading_start .outline-heading__anchor{position:absolute;z-index:2;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:-1em} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJhbmNob3JzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiA9PT09PT09PT09IGNvbG9ycy50aGVtZSAtIOWfuuehgOminOiJsuWPmOmHj+mbhuWQiCA9PT09PT09PT09ICovXG4ub3V0bGluZS1oZWFkaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMxZjhkZDY7XG59XG4ub3V0bGluZS1oZWFkaW5nOmhvdmVyIC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5vdXRsaW5lLWhlYWRpbmdfc3RhcnQ6aG92ZXIge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfc3RhcnQgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBsZWZ0OiAtMWVtO1xufVxuXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGY4O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THp4cGJuQjFkQ0JqYzNNZ01UNGlMQ0poYm1Ob2IzSnpMbXhsYzNNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNiVVJCUVcxRU8wRkRSVzVFTzBWQlEwVXNiVUpCUVVFN1JVRkRRU3hYUVVGQk8wVkJRMEVzYVVKQlFVRTdRMFJCUkR0QlEwVkRPMFZCUTBVc1kwRkJRVHREUkVGSU8wRkRSVWM3T3p0RlFVZEZMRmxCUVVFN1JVRkRRU3h6UWtGQlFUdERSRUZNTzBGRFIwYzdSVUZEUlN4bFFVRkJPME5FUkV3N1FVTkxRenRGUVVWSkxITkNRVUZCTzBORVNrdzdRVU5UUnp0RlFVTkZMR3RDUVVGQk8wTkVVRXc3UVVOTFF6dEZRVTFKTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxGTkJRVUU3UlVGRFFTeHZRMEZCUVR0VlFVRkJMRFJDUVVGQk8wVkJRMEVzVjBGQlFUdERSRkpNSWl3aVptbHNaU0k2SW1GdVkyaHZjbk11WTNOeklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9nUFQwOVBUMDlQVDA5UFNCamIyeHZjbk11ZEdobGJXVWdMU0Rsbjdybm9ZRHBvcHpvaWJMbGo1anBoNC9wbTRibGtJZ2dQVDA5UFQwOVBUMDlQU0FxTDF4dUxtOTFkR3hwYm1VdGFHVmhaR2x1WnlCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2VpMXBibVJsZURvZ01UdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2lCN1hHNGdJR1JwYzNCc1lYazZJRzV2Ym1VN1hHNTlYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSTZiR2x1YXl4Y2JpNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrTEZ4dUxtOTFkR3hwYm1VdGFHVmhaR2x1WjE5ZllXNWphRzl5T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNNU9UazdYRzRnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUdGNibjFjYmk1dmRYUnNhVzVsTFdobFlXUnBibWRmWDJGdVkyaHZjanBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqTVdZNFpHUTJPMXh1ZlZ4dUxtOTFkR3hwYm1VdGFHVmhaR2x1Wnpwb2IzWmxjaUF1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSWdlMXh1SUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzU5WEc0dWIzVjBiR2x1WlMxb1pXRmthVzVuWDNOMFlYSjBPbWh2ZG1WeUlIdGNiaUFnYjNabGNtWnNiM2M2SUhacGMybGliR1U3WEc1OVhHNHViM1YwYkdsdVpTMW9aV0ZrYVc1blgzTjBZWEowSUM1dmRYUnNhVzVsTFdobFlXUnBibWRmWDJGdVkyaHZjaUI3WEc0Z0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnZWkxcGJtUmxlRG9nTWp0Y2JpQWdkRzl3T2lBMU1DVTdYRzRnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2JpQWdiR1ZtZERvZ0xURmxiVHRjYm4xY2JpSXNJa0JwYlhCdmNuUWdKeTR2WTI5c2IzSnpKenRjY2x4dVhISmNiaTV2ZFhSc2FXNWxMV2hsWVdScGJtY2dlMXh5WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNjbHh1SUNCNkxXbHVaR1Y0T2lBeE8xeHlYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JseHlYRzRnSUNaZlgyRnVZMmh2Y2lCN1hISmNiaUFnSUNCa2FYTndiR0Y1T2lCdWIyNWxPMXh5WEc1Y2NseHVJQ0FnSUNZNmJHbHVheXhjY2x4dUlDQWdJQ1k2ZG1semFYUmxaQ3hjY2x4dUlDQWdJQ1k2YUc5MlpYSWdlMXh5WEc0Z0lDQWdJQ0JqYjJ4dmNqb2dRR1p2ZFhKMGFGOTBaWGgwWDJOdmJHOXlPMXh5WEc0Z0lDQWdJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdKanBvYjNabGNpQjdYSEpjYmlBZ0lDQWdJR052Ykc5eU9pQkFjSEpwYldGeWVWOWpiMnh2Y2p0Y2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JseHlYRzRnSUNZNmFHOTJaWElnZTF4eVhHNGdJQ0FnTG05MWRHeHBibVV0YUdWaFpHbHVaMTlmWVc1amFHOXlJSHRjY2x4dUlDQWdJQ0FnWkdsemNHeGhlVG9nYVc1c2FXNWxMV0pzYjJOck8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOXpkR0Z5ZENCN1hISmNiaUFnSUNBbU9taHZkbVZ5SUh0Y2NseHVJQ0FnSUNBZ2IzWmxjbVpzYjNjNklIWnBjMmxpYkdVN1hISmNiaUFnSUNCOVhISmNibHh5WEc0Z0lDQWdMbTkxZEd4cGJtVXRhR1ZoWkdsdVoxOWZZVzVqYUc5eUlIdGNjbHh1SUNBZ0lDQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh5WEc0Z0lDQWdJQ0I2TFdsdVpHVjRPaUF5TzF4eVhHNGdJQ0FnSUNCMGIzQTZJRFV3SlR0Y2NseHVJQ0FnSUNBZ2RISmhibk5tYjNKdE9pQjBjbUZ1YzJ4aGRHVlpLQzAxTUNVcE8xeHlYRzRnSUNBZ0lDQnNaV1owT2lBdE1XVnRPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1ZlZ4eVhHNGlYWDA9ICovXG4iXSwiZmlsZSI6ImFuY2hvcnMubWluLmNzcyJ9 */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJhbmNob3JzLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiA9PT09PT09PT09IGNvbG9ycy50aGVtZSAtIOWfuuehgOminOiJsuWPmOmHj+mbhuWQiCA9PT09PT09PT09ICovXG4ub3V0bGluZS1oZWFkaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMxZjhkZDY7XG59XG4ub3V0bGluZS1oZWFkaW5nOmhvdmVyIC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5vdXRsaW5lLWhlYWRpbmdfc3RhcnQ6aG92ZXIge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfc3RhcnQgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBsZWZ0OiAtMWVtO1xufVxuXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGY4O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THp4cGJuQjFkQ0JqYzNNZ01UNGlMQ0poYm1Ob2IzSnpMbXhsYzNNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNiVVJCUVcxRU8wRkRSVzVFTzBWQlEwVXNiVUpCUVVFN1JVRkRRU3hYUVVGQk8wVkJRMEVzYVVKQlFVRTdRMFJCUkR0QlEwVkRPMFZCUTBVc1kwRkJRVHREUkVGSU8wRkRSVWM3T3p0RlFVZEZMRmxCUVVFN1JVRkRRU3h6UWtGQlFUdERSRUZNTzBGRFIwYzdSVUZEUlN4bFFVRkJPME5FUkV3N1FVTkxRenRGUVVWSkxITkNRVUZCTzBORVNrdzdRVU5UUnp0RlFVTkZMR3RDUVVGQk8wTkVVRXc3UVVOTFF6dEZRVTFKTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxGTkJRVUU3UlVGRFFTeHZRMEZCUVR0VlFVRkJMRFJDUVVGQk8wVkJRMEVzVjBGQlFUdERSRkpNSWl3aVptbHNaU0k2SW1GdVkyaHZjbk11WTNOeklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9nUFQwOVBUMDlQVDA5UFNCamIyeHZjbk11ZEdobGJXVWdMU0Rsbjdybm9ZRHBvcHpvaWJMbGo1anBoNC9wbTRibGtJZ2dQVDA5UFQwOVBUMDlQU0FxTDF4dUxtOTFkR3hwYm1VdGFHVmhaR2x1WnlCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2VpMXBibVJsZURvZ01UdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2lCN1hHNGdJR1JwYzNCc1lYazZJRzV2Ym1VN1hHNTlYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSTZiR2x1YXl4Y2JpNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrTEZ4dUxtOTFkR3hwYm1VdGFHVmhaR2x1WjE5ZllXNWphRzl5T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNNU9UazdYRzRnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUdGNibjFjYmk1dmRYUnNhVzVsTFdobFlXUnBibWRmWDJGdVkyaHZjanBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqTVdZNFpHUTJPMXh1ZlZ4dUxtOTFkR3hwYm1VdGFHVmhaR2x1Wnpwb2IzWmxjaUF1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSWdlMXh1SUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzU5WEc0dWIzVjBiR2x1WlMxb1pXRmthVzVuWDNOMFlYSjBPbWh2ZG1WeUlIdGNiaUFnYjNabGNtWnNiM2M2SUhacGMybGliR1U3WEc1OVhHNHViM1YwYkdsdVpTMW9aV0ZrYVc1blgzTjBZWEowSUM1dmRYUnNhVzVsTFdobFlXUnBibWRmWDJGdVkyaHZjaUI3WEc0Z0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnZWkxcGJtUmxlRG9nTWp0Y2JpQWdkRzl3T2lBMU1DVTdYRzRnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2JpQWdiR1ZtZERvZ0xURmxiVHRjYm4xY2JpSXNJa0JwYlhCdmNuUWdKeTR2WTI5c2IzSnpKenRjYmx4dUxtOTFkR3hwYm1VdGFHVmhaR2x1WnlCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2VpMXBibVJsZURvZ01UdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYmx4dUlDQW1YMTloYm1Ob2IzSWdlMXh1SUNBZ0lHUnBjM0JzWVhrNklHNXZibVU3WEc1Y2JpQWdJQ0FtT214cGJtc3NYRzRnSUNBZ0pqcDJhWE5wZEdWa0xGeHVJQ0FnSUNZNmFHOTJaWElnZTF4dUlDQWdJQ0FnWTI5c2IzSTZJRUJtYjNWeWRHaGZkR1Y0ZEY5amIyeHZjanRjYmlBZ0lDQWdJSFJsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0FtT21odmRtVnlJSHRjYmlBZ0lDQWdJR052Ykc5eU9pQkFjSEpwYldGeWVWOWpiMnh2Y2p0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbU9taHZkbVZ5SUh0Y2JpQWdJQ0F1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSWdlMXh1SUNBZ0lDQWdaR2x6Y0d4aGVUb2dhVzVzYVc1bExXSnNiMk5yTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZmMzUmhjblFnZTF4dUlDQWdJQ1k2YUc5MlpYSWdlMXh1SUNBZ0lDQWdiM1psY21ac2IzYzZJSFpwYzJsaWJHVTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0xtOTFkR3hwYm1VdGFHVmhaR2x1WjE5ZllXNWphRzl5SUh0Y2JpQWdJQ0FnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2JpQWdJQ0FnSUhvdGFXNWtaWGc2SURJN1hHNGdJQ0FnSUNCMGIzQTZJRFV3SlR0Y2JpQWdJQ0FnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2JpQWdJQ0FnSUd4bFpuUTZJQzB4WlcwN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5WEc0aVhYMD0gKi9cbiJdLCJmaWxlIjoiYW5jaG9ycy5taW4uY3NzIn0= */ diff --git a/anchors.min.js.map b/anchors.min.js.map index 84cc3f4f..644b10fa 100644 --- a/anchors.min.js.map +++ b/anchors.min.js.map @@ -1 +1 @@ -{"version":3,"file":"anchors.min.js","sources":["src/utils/types/isString.js","src/utils/lang/hasOwn.js","src/utils/lang/toString.js","src/utils/types/isFunction.js","src/utils/types/isObject.js","src/base.js","src/utils/lang/extend.js","src/utils/types/isElement.js","src/utils/lang/easeInQuad.js","src/utils/dom/_getScrollElement.js","src/utils/dom/offsetTop.js","src/utils/dom/matches.js","src/utils/dom/getParentOrHost.js","src/utils/event/enum.js","src/utils/event/_off.js","src/utils/event/_delete.js","src/utils/event/purgeElement.js","src/utils/event/getListeners.js","src/utils/event/off.js","src/utils/event/on.js","src/utils/event/getTarget.js","src/utils/dom/resolveTextNode.js","src/utils/dom/closest.js","src/utils/observer/_subscribers.js","src/utils/observer/_hasDirectSubscribersFor.js","src/utils/observer/has.js","src/utils/observer/_hasSubscribers.js","src/utils/observer/emit.js","src/utils/types/isTypedArray.js","src/utils/types/isArray.js","src/utils/icons/symbols.js","src/utils/icons/defaults.js","src/utils/icons/getSymbols.js","src/utils/icons/getSymbol.js","src/utils/icons/paint.js","src/utils/icons/add.js","src/utils/lang/trim.js","src/utils/types/isDOM.js","src/utils/types/isHTMLCollection.js","src/utils/types/isFragment.js","src/utils/types/isTextNode.js","src/utils/dom/setAttribute.js","src/utils/types/isSVG.js","src/utils/icons/icon.js","src/utils/icons/createElement.js","src/_updateHeading.js","src/utils/dom/createElement.js","src/utils/dom/removeClass.js","src/utils/dom/hasClass.js","src/_resetHeading.js","src/utils/types/isEmpty.js","src/getChapters.js","src/utils/lang/stripTags.js","src/_getChapterParentIdByDiffer.js","src/_getChaptersWithCode.js","src/anchors.js","src/utils/lang/toTree.js","src/utils/dom/scrollTo.js","src/utils/lang/later.js","src/utils/event/stop.js"],"sourcesContent":["/**\r\n * 检测数据是否为 String 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} str\r\n * @returns {boolean}\r\n */\r\nconst isString = (str) => {\r\n return typeof str === 'string'\r\n}\r\n\r\nexport default isString\r\n","/**\r\n * 检测对象自身属性中是否具有指定的属性。\r\n * ========================================================================\r\n * @method hasOwn\r\n * @param {Object} obj - (必须)检测的目标对象\r\n * @param {String} prop - (必须)属性名\r\n * @returns {Boolean}\r\n */\r\nconst hasOwn = (obj, prop) => {\r\n const hasOwnProperty = Object.prototype.hasOwnProperty\r\n return obj && hasOwnProperty.call(obj, prop)\r\n}\r\n\r\nexport default hasOwn\r\n","/**\r\n * Object 对象原型上的 toString 方法\r\n * ========================================================================\r\n * @method toString\r\n * @param {*} val\r\n * @returns {string}\r\n */\r\nconst toString = (val) => {\r\n return Object.prototype.toString.apply(val)\r\n}\r\n\r\nexport default toString\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测测试数据是否为 Function 类型\r\n * ========================================================================\r\n * @method isFunction\r\n * @param {*} val - (必须)待检测的数据\r\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\r\n */\r\nconst isFunction = (val) => {\r\n return typeof val === 'function' || toString(val) === '[object Function]'\r\n}\r\n\r\nexport default isFunction\r\n","import toString from '../lang/toString'\r\nimport isFunction from '../types/isFunction'\r\n\r\n/**\r\n * 检测数据是否为 Object 类型\r\n * ========================================================================\r\n * @method isObject\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isObject = (o) => {\r\n return (\r\n (toString(o) === '[object Object]' ||\r\n typeof o === 'object' ||\r\n isFunction(o)) &&\r\n o !== null\r\n )\r\n}\r\n\r\nexport default isObject\r\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\r\n\r\n/**\r\n * 扩展对象\r\n * ========================================================================\r\n * @method extend\r\n * @param {Object} origin\r\n * @param {Object} source\r\n */\r\nconst extend = (origin, source) => {\r\n const keys = Object.keys(source)\r\n\r\n keys.forEach((prop) => {\r\n if (hasOwn(source, prop)) {\r\n origin[prop] = source[prop]\r\n }\r\n })\r\n}\r\n\r\nexport default extend\r\n","import isObject from './isObject'\r\n\r\n/**\r\n * 检测数据是否为 HTMLElement DOM 节点\r\n * ========================================================================\r\n * @method isElement\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isElement = (o) => {\r\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\r\n}\r\n\r\nexport default isElement\r\n","/**\r\n * 返回给定值的平方值\r\n * ========================================================================\r\n * @method easeInQuad\r\n * @param {Number} x\r\n * @returns {number}\r\n */\r\nconst easeInQuad = (x) => {\r\n return x * x\r\n}\r\n\r\nexport default easeInQuad\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\n\r\n/**\r\n * 通过给的 scrollElement 参数,获取滚动 DOM 元素\r\n * ========================================================================\r\n * @method _getScrollElement\r\n * @param {String|HTMLElement} scrollElement\r\n * @returns {Element}\r\n * @private\r\n */\r\nconst _getScrollElement = (scrollElement = null) => {\r\n let $rootElements\r\n let $scrollElement\r\n\r\n if (!scrollElement) {\r\n $rootElements = document.querySelectorAll('html,body')\r\n $scrollElement =\r\n $rootElements[0].scrollTop - $rootElements[1].scrollTop >= 0\r\n ? $rootElements[0]\r\n : $rootElements[1]\r\n } else {\r\n if (isString(scrollElement)) {\r\n $scrollElement = document.querySelector(scrollElement)\r\n } else if (isElement(scrollElement)) {\r\n $scrollElement = scrollElement\r\n }\r\n }\r\n\r\n return $scrollElement\r\n}\r\n\r\nexport default _getScrollElement\r\n","/**\r\n * 获取 DOM 节点相对于窗口的 left (纵坐标)值\r\n * ========================================================================\r\n * @method offsetTop\r\n * @param {HTMLElement} el - DOM 节点\r\n * @returns {Number}\r\n */\r\nconst offsetTop = (el) => {\r\n let top = el.offsetTop\r\n\r\n if (el.offsetParent !== null) {\r\n top += offsetTop(el.offsetParent)\r\n }\r\n\r\n return top\r\n}\r\n\r\nexport default offsetTop\r\n","/**\r\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\r\n * ========================================================================\r\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\r\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\r\n * 标 DOM 元素是否为事件代理所期望触发的目标。\r\n * ========================================================================\r\n * @method matches\r\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\r\n * @returns {Boolean}\r\n */\r\nconst matches = (el, selector = '') => {\r\n const sel = selector.replace(/^>/i, '')\r\n\r\n if (!selector || !sel || !el) {\r\n return false\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el.matches) {\r\n return el.matches(sel)\r\n } else if (el.msMatchesSelector) {\r\n return el.msMatchesSelector(sel)\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nexport default matches\r\n","/**\r\n * 获取 DOM 元素的父节点\r\n * ========================================================================\r\n * @method getParentOrHost\r\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\r\n * @returns {*|HTMLElement}\r\n */\r\nconst getParentOrHost = (el) => {\r\n return el.host && el !== document && el.host.nodeType\r\n ? el.host\r\n : el.parentNode\r\n}\r\n\r\nexport default getParentOrHost\r\n","export const CAPTURE_EVENTS = [\r\n 'focusout',\r\n 'blur',\r\n 'focusin',\r\n 'focus',\r\n 'load',\r\n 'unload',\r\n 'mouseenter',\r\n 'mouseleave'\r\n]\r\n","import { CAPTURE_EVENTS } from './enum'\r\nimport _delete from './_delete'\r\n\r\n/**\r\n * (私有方法)取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method _off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} fn - (必须)事件处理器回调函数\r\n * @private\r\n */\r\nconst _off = (el, type, fn) => {\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n /* istanbul ignore else */\r\n if (fn._delegateListener) {\r\n fn = fn._delegateListener\r\n delete fn._delegateListener\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n _delete(el, type, fn)\r\n\r\n el.removeEventListener(type, fn, capture)\r\n}\r\n\r\nexport default _off\r\n","/**\r\n * 删除 DOM 元素缓存的 _listeners 数据\r\n * ========================================================================\r\n * @method _delete\r\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\r\n * @param {String} type - 事件类型(名称)\r\n * @param {Function} [fn] - 事件处理器回调函数\r\n */\r\nconst _delete = function (el, type, fn) {\r\n const listeners = el._listeners\r\n let index = -1\r\n\r\n if (listeners.length < 1) {\r\n return false\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n listeners.forEach((listener, i) => {\r\n const handler = listener.fn\r\n\r\n if (type === listener.type) {\r\n index = i\r\n\r\n if (handler === fn) {\r\n index = i\r\n }\r\n }\r\n })\r\n\r\n /* istanbul ignore else */\r\n if (index > -1) {\r\n listeners.splice(index, 1)\r\n }\r\n}\r\n\r\nexport default _delete\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\nimport getListeners from './getListeners'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 销毁(type 类型的)代理事件绑定\r\n * ========================================================================\r\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\r\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\r\n * ========================================================================\r\n * @method purgeElement\r\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\r\n * @param {String|Boolean} type - (必须)事件类型\r\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\r\n */\r\nconst purgeElement = function (el, type, recurse = false) {\r\n const $element = isString(el) ? document.querySelector(el) : el\r\n const $children = $element.childNodes\r\n const listeners = getListeners($element, type)\r\n\r\n listeners.forEach((listener) => {\r\n _off($element, listener.type, listener.fn)\r\n })\r\n\r\n if (\r\n (recurse || type === true || arguments.length === 1) &&\r\n $element &&\r\n $children\r\n ) {\r\n $children.forEach(($child) => {\r\n if (isElement($child)) {\r\n purgeElement($child, type, recurse)\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default purgeElement\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 获取 DOM 元素(type 事件类型)事件绑定信息\r\n * ========================================================================\r\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\r\n * ========================================================================\r\n * @methods getListeners\r\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\r\n * @param {String} [type] - (可选)事件类型\r\n * @returns {Array} - 已绑定的事件信息\r\n */\r\nconst getListeners = (el, type) => {\r\n let listeners = el._listeners || []\r\n\r\n if (isString(type) && type) {\r\n listeners = listeners.filter((listener) => {\r\n return listener.type === type\r\n })\r\n }\r\n\r\n return listeners\r\n}\r\n\r\nexport default getListeners\r\n","import purgeElement from './purgeElement'\r\nimport isFunction from '../types/isFunction'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} [fn] - (可选)事件处理器回调函数\r\n */\r\nconst off = (el, type, fn) => {\r\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\r\n if (!isFunction(fn)) {\r\n return purgeElement(el, type)\r\n }\r\n\r\n _off(el, type, fn)\r\n}\r\n\r\nexport default off\r\n","import closest from '../dom/closest'\r\nimport off from './off'\r\nimport getTarget from './getTarget'\r\n\r\nimport { CAPTURE_EVENTS } from './enum'\r\n\r\n/**\r\n * 绑定代理事件\r\n * ========================================================================\r\n * @method on\r\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\r\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\r\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\r\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\r\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\r\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\r\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\r\n * @param {Boolean} once - (可选)是否仅触发一次\r\n */\r\nconst on = (el, selector, type, fn, data, context, once = false) => {\r\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n const listener = function (evt) {\r\n const target = getTarget(evt)\r\n // 通过 Element.matches 方法获得点击的目标元素\r\n const delegateTarget = closest(target, selector, el)\r\n let overrideContext = context || el\r\n\r\n evt.delegateTarget = delegateTarget\r\n\r\n // 当设置为 true 时,则事件处理器回调函数的\r\n // this 上下文指向为 data 对象\r\n if (context === true) {\r\n overrideContext = data\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (delegateTarget) {\r\n // 仅触发一次\r\n /* istanbul ignore else */\r\n if (once === true) {\r\n off(el, type, listener)\r\n }\r\n\r\n fn.call(overrideContext, evt, data)\r\n }\r\n }\r\n\r\n if (!el._listeners) {\r\n el._listeners = []\r\n }\r\n\r\n // 缓存 options 元素绑定的事件处理器\r\n el._listeners.push({\r\n el,\r\n selector,\r\n type,\r\n fn: listener,\r\n data,\r\n context,\r\n capture\r\n })\r\n\r\n // 缓存包装后的事件处理器\r\n fn._delegateListener = listener\r\n\r\n el.addEventListener(type, listener, capture)\r\n}\r\n\r\nexport default on\r\n","import resolveTextNode from '../dom/resolveTextNode'\r\n\r\n/**\r\n * 返回触发事件的 target DOM 元素\r\n * ========================================================================\r\n * @method getTarget\r\n * @param {Event} evt - Event 对象\r\n * @return {HTMLElement} - Event 对象的 target DOM 元素\r\n */\r\nconst getTarget = function (evt) {\r\n const target = evt.target\r\n\r\n return resolveTextNode(target)\r\n}\r\n\r\nexport default getTarget\r\n","/**\r\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\r\n * resolveTextNode() 方法则会返回实际的目标节点。\r\n * ========================================================================\r\n * @method resolveTextNode\r\n * @param {HTMLElement|Text} el - 要解析的节点\r\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\r\n */\r\nconst resolveTextNode = function (el) {\r\n if (el && el.nodeType === 3) {\r\n return el.parentNode\r\n }\r\n\r\n return el\r\n}\r\n\r\nexport default resolveTextNode\r\n","import matches from './matches'\r\nimport getParentOrHost from './getParentOrHost'\r\n\r\n/**\r\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\r\n * ========================================================================\r\n * @method closest\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)DOM 元素的选择其\r\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\r\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\r\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\r\n */\r\nconst closest = (el, selector, ctx, includeCTX) => {\r\n const context = ctx || document\r\n\r\n if (!el) {\r\n return null\r\n }\r\n\r\n do {\r\n /* istanbul ignore else */\r\n if (\r\n (selector != null &&\r\n (selector.startsWith('>')\r\n ? el.parentNode === context && matches(el, selector)\r\n : matches(el, selector))) ||\r\n (includeCTX && el === context)\r\n ) {\r\n return el\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el === context) {\r\n break\r\n }\r\n\r\n /* jshint boss:true */\r\n } while ((el = getParentOrHost(el)))\r\n}\r\n\r\nexport default closest\r\n","/**\r\n * 存储订阅者(主题和处理器的)私有对象\r\n * ========================================================================\r\n * @type {{}}\r\n * @private\r\n */\r\nconst _subscribers = {}\r\n\r\nexport default _subscribers\r\n","import _subscribers from './_subscribers'\r\nimport hasOwn from '../lang/hasOwn'\r\n\r\n/**\r\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\r\n * ========================================================================\r\n * @method _hasDirectSubscribersFor\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasDirectSubscribersFor = (topic) => {\r\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\r\n}\r\n\r\nexport default _hasDirectSubscribersFor\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\nimport _hasSubscribers from './_hasSubscribers'\r\n\r\n/**\r\n * 判断是否存在包含 topic 指定的订阅者信息\r\n * ========================================================================\r\n * @method has\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\r\n * @returns {Boolean}\r\n */\r\nconst has = (topic, isDirect = true) => {\r\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\r\n}\r\n\r\nexport default has\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * 判断是否存在包含给定 topic 相关的订阅者信息\r\n * ========================================================================\r\n * @method _hasSubscribers\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasSubscribers = (topic) => {\r\n let found = _hasDirectSubscribersFor(topic)\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (!found && position !== -1) {\r\n topic = topic.substring(0, position)\r\n position = topic.lastIndexOf('.')\r\n found = _hasDirectSubscribersFor(topic)\r\n }\r\n\r\n return found\r\n}\r\n\r\nexport default _hasSubscribers\r\n","import isTypedArray from '../types/isTypedArray'\r\nimport _subscribers from './_subscribers'\r\nimport has from './has'\r\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * (异步)发布订阅主题信息\r\n * ========================================================================\r\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\r\n * ========================================================================\r\n * @method emit\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Object} data - (必须)数据对象\r\n * @param {Boolean} async - (可选) 是否异步发布\r\n */\r\nconst emit = (topic, data, async = true) => {\r\n const execute = (topic) => {\r\n if (!_hasDirectSubscribersFor(topic)) {\r\n return false\r\n }\r\n\r\n _subscribers[topic].forEach((subscriber) => {\r\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\r\n // 采用 toString() 方法转化为普通(JSON)字符串\r\n const message = isTypedArray(data) ? data.toString() : data\r\n\r\n subscriber.callback.call(subscriber.context || subscriber, message)\r\n })\r\n }\r\n const deliver = () => {\r\n let subscriber = topic\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (position !== -1) {\r\n subscriber = subscriber.substring(0, position)\r\n position = subscriber.lastIndexOf('.')\r\n\r\n execute(subscriber)\r\n }\r\n\r\n // 执行 topic 对应的处理器\r\n execute(topic)\r\n // 执行特殊 topic:'*'(监听全部消息的发布)\r\n execute('*')\r\n }\r\n\r\n if (!has(topic)) {\r\n return false\r\n }\r\n\r\n if (async) {\r\n setTimeout(deliver, 10)\r\n } else {\r\n deliver()\r\n }\r\n}\r\n\r\nexport default emit\r\n","import toString from '../lang/toString'\r\n/**\r\n * 判断检测数据是否为 Typed Arrays 类型的数据\r\n * ========================================================================\r\n * @param {*} val\r\n * @returns {boolean}\r\n */\r\nconst isTypedArray = (val) => {\r\n const TYPES = [\r\n '[object Int8Array]',\r\n '[object Uint8Array]',\r\n '[object Uint8ClampedArray]',\r\n '[object Int16Array]',\r\n '[object Uint16Array]',\r\n '[object Int32Array]',\r\n '[object Uint32Array]',\r\n '[object Float32Array]',\r\n '[object Float64Array]',\r\n '[object BigInt64Array]',\r\n '[object BigUint64Array]'\r\n ]\r\n\r\n return TYPES.indexOf(toString(val)) > -1\r\n}\r\n\r\nexport default isTypedArray\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测数据是否为 Array 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isArray = (o) => {\r\n if (Array.isArray) {\r\n return Array.isArray(o)\r\n } else {\r\n return toString(o) === '[object Array]'\r\n }\r\n}\r\n\r\nexport default isArray\r\n","import DEFAULTS from './defaults'\r\n\r\nconst SYMBOLS = [...DEFAULTS]\r\n\r\nexport default SYMBOLS\r\n","const DEFAULTS = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n]\r\n\r\nexport default DEFAULTS\r\n","import isString from '../types/isString'\r\nimport getSymbol from './getSymbol'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n *\r\n * @method getSymbols\r\n * @param {String} [name]\r\n * @param {String} [iconSet]\r\n * @returns {string[]|*}\r\n */\r\nconst getSymbols = (name, iconSet = 'icon') => {\r\n if (isString(name)) {\r\n return getSymbol(name, iconSet)\r\n }\r\n\r\n return [...SYMBOLS]\r\n}\r\n\r\nexport default getSymbols\r\n","import SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method getSymbol\r\n * @param {String} name\r\n * @param {String} [iconSet]\r\n * @returns {String}\r\n */\r\nconst getSymbol = (name, iconSet = 'icon') => {\r\n const patternName = /id=\"(.*?)\"/\r\n const patternSet = /^(\\w+)-/\r\n const symbols = SYMBOLS\r\n\r\n return symbols.find((symbol) => {\r\n const names = patternName.exec(symbol)\r\n const fullName = names[1]\r\n const sets = patternSet.exec(fullName)\r\n const setName = sets[1]\r\n const iconName =\r\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\r\n\r\n return setName === iconSet && fullName === iconName\r\n })\r\n}\r\n\r\nexport default getSymbol\r\n","import add from './add'\r\nimport getSymbols from './getSymbols'\r\n\r\n/**\r\n * 绘制 SVG 图标集\r\n * ========================================================================\r\n * @method paint\r\n * @param {String|Array} symbol\r\n */\r\nconst paint = (symbol = '') => {\r\n const $body = document.body\r\n let $icons = document.querySelector('#outline-icons')\r\n let symbols = []\r\n\r\n add(symbol)\r\n symbols = getSymbols()\r\n\r\n if ($icons) {\r\n $icons.innerHTML = symbols.join('')\r\n } else {\r\n $icons = document.createElement('div')\r\n $icons.innerHTML =\r\n ``\r\n $body.insertBefore($icons.firstChild, $body.firstChild)\r\n }\r\n}\r\n\r\nexport default paint\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method add\r\n * @param {Array|String} symbols\r\n * @return {Boolean}\r\n */\r\nconst add = (symbols) => {\r\n if (!symbols) {\r\n return false\r\n }\r\n\r\n if (isArray(symbols) && symbols.length > 0) {\r\n symbols.forEach((symbol) => {\r\n /* istanbul ignore else */\r\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\r\n SYMBOLS.push(symbol)\r\n }\r\n })\r\n } else {\r\n /* istanbul ignore else */\r\n if (isString(symbols)) {\r\n SYMBOLS.push(symbols)\r\n }\r\n }\r\n}\r\n\r\nexport default add\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 清楚字符串起始位置所有的空格\r\n * ========================================================================\r\n * @method trim\r\n * @param {string} str\r\n * @returns {string|Boolean}\r\n */\r\nconst trim = (str) => {\r\n if (!isString(str)) {\r\n return false\r\n }\r\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\r\n}\r\n\r\nexport default trim\r\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isFragment = (fragment) => {\r\n return !!(\r\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\r\n )\r\n}\r\n\r\nexport default isFragment\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","/**\r\n * 给 DOM 节点设置属性/值\r\n * ========================================================================\r\n * @method setAttribute\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} attr - 属性名称\r\n * @param {String|Number|Boolean} value - 属性值\r\n */\r\nconst setAttribute = (el, attr, value) => {\r\n let tagName = el.tagName.toLowerCase()\r\n\r\n switch (attr) {\r\n case 'style':\r\n el.style.cssText = value\r\n break\r\n case 'value':\r\n if (tagName === 'input' || tagName === 'textarea') {\r\n el.value = value\r\n } else {\r\n el.setAttribute(attr, value)\r\n }\r\n break\r\n case 'className':\r\n el.className = value\r\n break\r\n default:\r\n el.setAttribute(attr, value)\r\n break\r\n }\r\n}\r\n\r\nexport default setAttribute\r\n","import isString from './isString'\r\n\r\nconst isSVG = (str) => {\r\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\r\n const doctype =\r\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\r\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\r\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\r\n const pattern = new RegExp(svg, 'i')\r\n\r\n return isString(str) && pattern.test(str)\r\n}\r\n\r\nexport default isSVG\r\n","import createElement from './createElement'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method icon\r\n * @alias createElement\r\n * @see createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst icon = (name, options = {}) => {\r\n return createElement(name, options)\r\n}\r\n\r\nexport default icon\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport isSVG from '../types/isSVG'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (name, options = {}) => {\r\n const size = options.size || 0\r\n const color = options.color || ''\r\n const iconSet = options.iconSet || ''\r\n const width = isArray(size) ? size[0] : size\r\n const height = isArray(size) ? size[1] : size\r\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\r\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\r\n const $icon = document.createElement('i')\r\n let binds = ''\r\n let svg = ''\r\n let $svg\r\n\r\n if (!isString(name)) {\r\n return null\r\n }\r\n\r\n if (isSVG(name)) {\r\n svg = name\r\n } else {\r\n binds =\r\n iconSet && iconSet !== 'icon'\r\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\r\n : `xlink:href=\"#icon-${name}\"`\r\n svg =\r\n `` +\r\n `` +\r\n ``\r\n }\r\n\r\n $icon.className = 'outline-icon'\r\n $icon.innerHTML = svg\r\n\r\n if (isSVG(name)) {\r\n $svg = $icon.querySelector('svg')\r\n $svg.setAttribute('aria-hidden', 'true')\r\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\r\n $svg.setAttribute('class', 'outline-icon__svg')\r\n $svg.setAttribute('width', '200')\r\n $svg.setAttribute('height', '200')\r\n $svg.style = cssRules\r\n }\r\n\r\n return $icon\r\n}\r\n\r\nexport default createElement\r\n","import trim from './utils/lang/trim'\r\nimport createElement from './utils/dom/createElement'\r\nimport setAttribute from './utils/dom/setAttribute'\r\n\r\nimport icon from './utils/icons/icon'\r\n\r\nconst _updateHeading = ($heading, i, options) => {\r\n const $fragment = document.createDocumentFragment()\r\n const CLS_HEADING = 'outline-heading'\r\n const hasAnchor = options.hasAnchor || true\r\n const isAtStart = options.isAtStart || true\r\n const showCode = options.showCode || false\r\n const chapterCode = options.chapterCode || ''\r\n const anchorURL = options.anchorURL || ''\r\n const headingId = `heading-${i}`\r\n const attrs = {\r\n id: headingId,\r\n className: isAtStart ? `${CLS_HEADING} ${CLS_HEADING}_start` : CLS_HEADING,\r\n 'data-id': i\r\n }\r\n const keys = Object.keys(attrs)\r\n const text = trim($heading.innerHTML)\r\n let $anchor\r\n let $icon\r\n\r\n keys.forEach((prop) => {\r\n setAttribute($heading, prop, attrs[prop])\r\n })\r\n\r\n if (showCode) {\r\n $heading.innerHTML = chapterCode + ' ' + text\r\n }\r\n\r\n if (!hasAnchor) {\r\n return false\r\n }\r\n\r\n $icon = icon('hash', { iconSet: 'outline' })\r\n $anchor = createElement(\r\n 'a',\r\n {\r\n id: `anchor-${i}`,\r\n className: `${CLS_HEADING}__anchor anchor-${i}`,\r\n href: anchorURL || `#${headingId}`,\r\n target: anchorURL ? '_blank' : 'self',\r\n 'data-id': i\r\n },\r\n [$icon]\r\n )\r\n $fragment.appendChild($anchor)\r\n $heading.appendChild($fragment)\r\n}\r\n\r\nexport default _updateHeading\r\n","import hasOwn from '../lang/hasOwn'\r\nimport isObject from '../types/isObject'\r\nimport isString from '../types/isString'\r\nimport isArray from '../types/isArray'\r\nimport isDOM from '../types/isDOM'\r\nimport setAttribute from './setAttribute'\r\n\r\n/**\r\n * 创建 DOM 节点,并添加属性和子节点\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} tagName - 标签名称\r\n * @param {Object|Array} attrs - 属性对象或者子节点\r\n * @param {Array} [children] - 子节点数组\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (tagName, attrs, children) => {\r\n const $fragment = document.createDocumentFragment()\r\n const $el = document.createElement(tagName)\r\n const isValidChild = (child) => {\r\n return isDOM(child) || isString(child)\r\n }\r\n const append = (child) => {\r\n let $child\r\n\r\n if (!isValidChild(child)) {\r\n return false\r\n }\r\n\r\n if (isDOM(child)) {\r\n $child = child\r\n } else if (isString(child)) {\r\n $child = document.createTextNode(child)\r\n }\r\n\r\n $fragment.appendChild($child)\r\n }\r\n\r\n if (isObject(attrs)) {\r\n Object.keys(attrs).forEach((attr) => {\r\n if (hasOwn(attrs, attr)) {\r\n setAttribute($el, attr, attrs[attr])\r\n }\r\n })\r\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\r\n attrs.forEach((child) => {\r\n append(child)\r\n })\r\n }\r\n\r\n if (isArray(children)) {\r\n children.forEach((child) => {\r\n append(child)\r\n })\r\n } else {\r\n append(children)\r\n }\r\n\r\n $el.appendChild($fragment)\r\n\r\n return $el\r\n}\r\n\r\nexport default createElement\r\n","import trim from '../lang/trim'\r\nimport hasClass from './hasClass'\r\n\r\n/**\r\n * 移除 DOM 节点的 className 样式\r\n * ========================================================================\r\n * @method removeClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst removeClass = (el, className) => {\r\n let allClass = el.className\r\n let classList\r\n\r\n if (!allClass || !hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.remove) {\r\n classList.remove(className)\r\n } else {\r\n allClass = trim(allClass.replace(className, ''))\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default removeClass\r\n","import isElement from '../types/isElement'\r\n/**\r\n * 检测 DOM 节点是否包含名为 className 的样式\r\n * ========================================================================\r\n * @method hasClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst hasClass = (el, className) => {\r\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\r\n let allClass\r\n let classList\r\n\r\n if (!isElement(el)) {\r\n return false\r\n }\r\n\r\n allClass = el.className\r\n\r\n if (!allClass) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.contains) {\r\n return el.classList.contains(className)\r\n }\r\n\r\n return !!pattern.exec(allClass)\r\n}\r\n\r\nexport default hasClass\r\n","import removeClass from './utils/dom/removeClass'\r\nimport isEmpty from './utils/types/isEmpty'\r\nimport trim from './utils/lang/trim'\r\n\r\nconst _resetHeading = ($heading, hasAnchor = true, isAtStart = true) => {\r\n const CLS_HEADING = 'outline-heading'\r\n const text = $heading.innerHTML\r\n const pattern = /^\\d+(\\.?\\d+)*\\s?/gi\r\n let $anchor\r\n\r\n $heading.innerHTML = text.replace(pattern, '')\r\n $heading.removeAttribute('id')\r\n $heading.removeAttribute('data-id')\r\n\r\n removeClass($heading, CLS_HEADING)\r\n\r\n if (!hasAnchor) {\r\n return false\r\n }\r\n\r\n $anchor = $heading.querySelector(`.${CLS_HEADING}__anchor`)\r\n\r\n if (isAtStart) {\r\n removeClass($heading, `${CLS_HEADING}_start`)\r\n }\r\n\r\n if (isEmpty(trim($heading.className))) {\r\n $heading.removeAttribute('class')\r\n }\r\n\r\n $heading.removeChild($anchor)\r\n}\r\n\r\nexport default _resetHeading\r\n","import isString from './isString'\r\n/**\r\n * 检测数据是否为空字符串\r\n * ========================================================================\r\n * @method isEmpty\r\n * @param {String} str\r\n * @returns {boolean}\r\n */\r\nconst isEmpty = (str) => {\r\n return isString(str) && str === ''\r\n}\r\n\r\nexport default isEmpty\r\n","import trim from './utils/lang/trim'\r\nimport stripTags from './utils/lang/stripTags'\r\n\r\nimport _getChapterParentIdByDiffer from './_getChapterParentIdByDiffer'\r\nimport _getChaptersWithCode from './_getChaptersWithCode'\r\n\r\nconst getChapters = (headings, showCode = true) => {\r\n let previous = 1\r\n let level = 0\r\n const chapters = []\r\n\r\n headings.forEach((heading, i) => {\r\n const headingLevel = heading.tagName.replace(/h/i, '')\r\n let current = parseInt(headingLevel, 10)\r\n let pid = -1\r\n\r\n // 场景1:当前标题是前一个标题的子标题\r\n // 当前标题的(标题标签)序号 > 前一个标题的序号:两个相连的标题是父标题 -> 子标题关系;\r\n // h2 (前一个标题)\r\n // h3 (当前标题)\r\n if (current > previous) {\r\n level += 1\r\n\r\n // 第一层级的 pid 是 -1\r\n if (level === 1) {\r\n pid = -1\r\n } else {\r\n pid = i - 1\r\n }\r\n }\r\n // 场景2:当前标题和前一个标题层级相同\r\n // 当前标题的(标题标签)序号 = 前一个标题的序号\r\n // h2 (前一个标题)\r\n // h2 (当前标题)\r\n // 当前标题的(标题标签)序号 < 前一个标题的序号,并且当前标题序号 > 当前的级别\r\n // h2\r\n // h4 (前一个标题)\r\n // h3 (当前标题:这种情况我们还是任务 h3 是 h2 的下一级章节)\r\n else if (current === previous || (current < previous && current > level)) {\r\n // H1 的层级肯定是 1\r\n if (current === 1) {\r\n level = 1\r\n pid = -1\r\n } else {\r\n pid = chapters[i - 1].pid\r\n }\r\n }\r\n // 场景3:当前标题比前一个标题层级高\r\n else if (current <= level) {\r\n // H1 的层级肯定是 1\r\n if (current === 1) {\r\n level = 1\r\n } else {\r\n level = level - (previous - current)\r\n\r\n if (level <= 1) {\r\n level = 1\r\n }\r\n }\r\n\r\n // 第一级的标题\r\n if (level === 1) {\r\n pid = -1\r\n } else {\r\n // 通过当前标题和前一个标题之间的等级差,获得当前标题的父标题ID\r\n pid = _getChapterParentIdByDiffer(chapters, previous - current, i)\r\n }\r\n }\r\n\r\n previous = current\r\n\r\n chapters.push({\r\n id: i,\r\n pid: pid,\r\n level: level,\r\n rel: `heading-${i}`,\r\n text: stripTags(trim(heading.innerHTML))\r\n })\r\n })\r\n\r\n return showCode ? _getChaptersWithCode(chapters) : chapters\r\n}\r\n\r\nexport default getChapters\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 过滤所有 HTML 标签\r\n * ========================================================================\r\n * @method stripTags\r\n * @param {string} str\r\n * @returns {string}\r\n */\r\nconst stripTags = (str) => {\r\n if (!isString(str)) {\r\n return ''\r\n }\r\n return str.replace(/<\\/?[^>]+(>|$)/g, '')\r\n}\r\n\r\nexport default stripTags\r\n","const _getChapterParentIdByDiffer = (chapters, differ, index) => {\r\n let previous = chapters[index - 1]\r\n let pid\r\n let i\r\n\r\n for (i = 0; i < differ; i += 1) {\r\n pid = previous.pid\r\n previous = chapters[pid]\r\n }\r\n\r\n pid = previous.pid\r\n\r\n return pid\r\n}\r\n\r\nexport default _getChapterParentIdByDiffer\r\n","const _getChaptersWithCode = (chapters) => {\r\n const groups = {}\r\n const cb = (o) => {\r\n return [o.pid]\r\n }\r\n\r\n chapters.forEach((o) => {\r\n const group = JSON.stringify(cb(o))\r\n\r\n groups[group] = groups[group] || []\r\n groups[group].push(o)\r\n\r\n o.index = groups[group].length\r\n if (o.pid === -1) {\r\n o.code = String(o.index)\r\n }\r\n })\r\n\r\n Object.keys(groups).forEach((group) => {\r\n groups[group].forEach((c) => {\r\n const subjects = chapters.filter((b) => b.pid === c.id)\r\n subjects.forEach((o) => {\r\n o.code = c.code + '.' + o.index\r\n })\r\n })\r\n })\r\n\r\n return chapters\r\n}\r\n\r\nexport default _getChaptersWithCode\r\n","import Base from './base'\r\n\r\n// 在文章的标题生成 anchor 链接\r\nimport isString from './utils/types/isString'\r\nimport isFunction from './utils/types/isFunction'\r\nimport isElement from './utils/types/isElement'\r\nimport toTree from './utils/lang/toTree'\r\nimport later from './utils/lang/later'\r\nimport scrollTo from './utils/dom/scrollTo'\r\nimport _getScrollElement from './utils/dom/_getScrollElement'\r\nimport offsetTop from './utils/dom/offsetTop'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\nimport stop from './utils/event/stop'\r\nimport publish from './utils/observer/emit'\r\nimport paint from './utils/icons/paint'\r\n\r\nimport _updateHeading from './_updateHeading'\r\nimport _resetHeading from './_resetHeading'\r\nimport getChapters from './getChapters'\r\n\r\nclass Anchors extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Anchors.DEFAULTS\r\n this.$articleElement = null\r\n this.$scrollElement = null\r\n this.$headings = []\r\n\r\n this.chapters = []\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n let scrollElement\r\n let selector\r\n let $articleElement\r\n let articleElement\r\n\r\n this.attr(options)\r\n articleElement = this.attr('articleElement')\r\n scrollElement = this.attr('scrollElement')\r\n selector = this.attr('selector')\r\n created = this.attr('created')\r\n\r\n if (isString(articleElement)) {\r\n $articleElement = document.querySelector(articleElement)\r\n } else if (isElement(articleElement)) {\r\n $articleElement = articleElement\r\n }\r\n\r\n if (!$articleElement) {\r\n return this\r\n }\r\n\r\n this.$articleElement = $articleElement\r\n this.$scrollElement = _getScrollElement(scrollElement)\r\n this.$headings = [...$articleElement.querySelectorAll(selector)]\r\n\r\n if (this.$headings.length < 1) {\r\n return this\r\n }\r\n\r\n this.chapters = getChapters(this.$headings)\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n this.render().addListeners()\r\n\r\n return this\r\n }\r\n\r\n getChapters(isTreeStructured = false) {\r\n const chapters = this.chapters\r\n return isTreeStructured ? toTree(chapters, 'id', 'pid') : chapters\r\n }\r\n\r\n count() {\r\n return this.chapters.length\r\n }\r\n\r\n render() {\r\n const mounted = this.attr('mounted')\r\n const hasAnchor = this.attr('hasAnchor')\r\n const isAtStart = this.attr('isAtStart')\r\n const showCode = this.attr('showCode')\r\n const anchorURL = this.attr('anchorURL')\r\n const $headings = this.$headings\r\n const chapters = this.getChapters()\r\n\r\n paint()\r\n\r\n $headings.forEach(($heading, i) => {\r\n const chapterCode = chapters[i].code\r\n _updateHeading($heading, i, {\r\n hasAnchor,\r\n isAtStart,\r\n showCode,\r\n chapterCode,\r\n anchorURL\r\n })\r\n })\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n scrollTo(top, after) {\r\n const el = this.$scrollElement\r\n\r\n scrollTo(el, top, after)\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const hasAnchor = this.attr('hasAnchor')\r\n const isAtStart = this.attr('isAtStart')\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n const afterDestroy = this.attr('afterDestroy')\r\n const $headings = this.$headings\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n $headings.forEach(($heading) => {\r\n _resetHeading($heading, hasAnchor, isAtStart)\r\n })\r\n\r\n this.attr(Anchors.DEFAULTS)\r\n this.$articleElement = null\r\n this.$scrollElement = null\r\n this.$headings = []\r\n this.chapters = []\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n onAnchorTrigger(evt) {\r\n const anchorURL = this.attr('anchorURL')\r\n const afterScroll = this.attr('afterScroll')\r\n const stickyHeight = this.attr('stickyHeight')\r\n const $anchor = evt.delegateTarget\r\n const $heading = $anchor.parentNode\r\n const top = offsetTop($heading) - (stickyHeight + 10)\r\n const $scrollElement = this.$scrollElement\r\n const min = 0\r\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\r\n const after = () => {\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(this, 'anchor')\r\n }\r\n\r\n later(() => {\r\n publish('toolbar:update', {\r\n top,\r\n min,\r\n max\r\n })\r\n })\r\n }\r\n\r\n this.scrollTo(top, after)\r\n\r\n if (!anchorURL) {\r\n stop(evt)\r\n }\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const $articleElement = this.$articleElement\r\n\r\n on(\r\n $articleElement,\r\n '.outline-heading__anchor',\r\n 'click',\r\n this.onAnchorTrigger,\r\n this,\r\n true\r\n )\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const $articleElement = this.$articleElement\r\n\r\n off($articleElement, 'click', this.onAnchorTrigger)\r\n\r\n return this\r\n }\r\n}\r\n\r\nAnchors.DEFAULTS = {\r\n scrollElement: 'html,body',\r\n articleElement: '#article',\r\n selector: 'h1,h2,h3,h4,h5,h6',\r\n stickyHeight: 0,\r\n anchorURL: '',\r\n hasAnchor: true,\r\n isAtStart: true,\r\n showCode: false,\r\n created: null,\r\n mounted: null,\r\n afterScroll: null,\r\n beforeDestroy: null,\r\n afterDestroy: null\r\n}\r\n\r\nexport default Anchors\r\n","const toTree = (list, nodeKey, parentKey) => {\r\n const map = {}\r\n const roots = []\r\n\r\n list.forEach((item, i) => {\r\n // initialize the map\r\n map[item[nodeKey]] = i\r\n // initialize the children\r\n item.children = []\r\n })\r\n\r\n list.forEach((item) => {\r\n const node = list[map[item[parentKey]]]\r\n\r\n if (item[parentKey] !== -1) {\r\n // if you have dangling branches check that map[node.parentId] exists\r\n node.children.push(item)\r\n } else {\r\n roots.push(item)\r\n }\r\n })\r\n\r\n return roots\r\n}\r\n\r\nexport default toTree\r\n","import easeInQuad from '../lang/easeInQuad'\r\nimport isFunction from '../types/isFunction'\r\nimport _getScrollElement from './_getScrollElement'\r\n\r\n/**\r\n * 指定 rootElement DOM 节点滚动到指定 top 位置\r\n * ========================================================================\r\n * @method scrollTo\r\n * @param {HTMLElement|Object} [scrollElement] - (必须)要滚动的 DOM 节点\r\n * @param {Number} top - (必须)滚动的 scrollTop 数值\r\n * @param {Function} [afterStop] - (可选)滚动完成的回调函数\r\n */\r\nconst scrollTo = (scrollElement, top, afterStop) => {\r\n const $scrollElement = _getScrollElement(scrollElement)\r\n let scrollTop = $scrollElement.scrollTop\r\n let step = 0\r\n const distance = top - scrollTop\r\n const MAX_HEIGHT = $scrollElement.scrollHeight\r\n const MAX_TOP = top - MAX_HEIGHT <= 0 ? top : MAX_HEIGHT\r\n const stop = (top) => {\r\n if (isFunction(afterStop)) {\r\n afterStop(top)\r\n }\r\n\r\n return false\r\n }\r\n const play = () => {\r\n step += 1\r\n\r\n // 向上滚动\r\n if (distance < 0) {\r\n scrollTop -= easeInQuad(step)\r\n $scrollElement.scrollTop = scrollTop\r\n\r\n if (scrollTop <= top) {\r\n $scrollElement.scrollTop = top\r\n return stop(top)\r\n }\r\n } else {\r\n scrollTop += easeInQuad(step)\r\n $scrollElement.scrollTop = scrollTop\r\n\r\n if (scrollTop >= MAX_TOP) {\r\n $scrollElement.scrollTop = MAX_TOP\r\n return stop(MAX_TOP)\r\n }\r\n }\r\n\r\n requestAnimationFrame(play)\r\n }\r\n\r\n requestAnimationFrame(play)\r\n}\r\n\r\nexport default scrollTo\r\n","import isFunction from '../types/isFunction'\r\n\r\n/**\r\n * later - 延迟执行方法\r\n * ========================================================================\r\n * @method later\r\n * @param {Function} fn\r\n * @param {Number} [delay]\r\n * @returns {number|boolean}\r\n */\r\nconst later = (fn, delay = 300) => {\r\n if (!isFunction(fn)) {\r\n return false\r\n }\r\n\r\n return setTimeout(() => {\r\n fn()\r\n }, delay)\r\n}\r\n\r\nexport default later\r\n","/**\r\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\r\n * ========================================================================\r\n * @method stop\r\n * @param {Event} evt - 事件对象\r\n *\r\n * @example\r\n *
\r\n * Service\r\n * Help\r\n *
\r\n *\r\n * const $nav = document.querySelector('#nav')\r\n * const $service = document.querySelector('.anchor')\r\n *\r\n * on($nav, 'click', function(evt) {\r\n * console.log('你点击了导航栏')\r\n * })\r\n *\r\n * on($anchor, 'click', function(evt) {\r\n * console.log('tagName', this.tagName)\r\n *\r\n * // 工作台输出:'a'\r\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\r\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\r\n * stopEvent(evt)\r\n * })\r\n */\r\nconst stop = function (evt) {\r\n evt.stopPropagation()\r\n evt.preventDefault()\r\n}\r\n\r\nexport default stop\r\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isElement","nodeName","tagName","nodeType","easeInQuad","x","_getScrollElement","scrollElement","$rootElements","$scrollElement","document","querySelector","querySelectorAll","scrollTop","offsetTop","el","top","offsetParent","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","fn","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","$children","childNodes","filter","getListeners","$child","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","setTimeout","isArray","Array","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","exec","iconName","getSymbol","paint","$body","body","$icons","symbols","add","innerHTML","join","createElement","insertBefore","firstChild","trim","isDOM","isHTMLCollection","fragment","isTextNode","setAttribute","toLowerCase","style","cssText","className","isSVG","pattern","RegExp","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","_updateHeading","$heading","$fragment","createDocumentFragment","CLS_HEADING","hasAnchor","isAtStart","showCode","chapterCode","anchorURL","headingId","id","text","$anchor","children","$el","isValidChild","child","append","createTextNode","appendChild","every","href","removeClass","classList","allClass","contains","hasClass","remove","_resetHeading","removeAttribute","removeChild","getChapters","headings","previous","level","chapters","heading","headingLevel","current","parseInt","pid","differ","_getChapterParentIdByDiffer","rel","groups","group","JSON","stringify","cb","code","String","c","b","_getChaptersWithCode","Anchors","super","DEFAULTS","$articleElement","$headings","created","articleElement","isTreeStructured","list","nodeKey","parentKey","map","roots","item","node","toTree","count","mounted","scrollTo","after","afterStop","step","distance","MAX_HEIGHT","scrollHeight","MAX_TOP","stop","play","requestAnimationFrame","beforeDestroy","afterDestroy","onAnchorTrigger","afterScroll","stickyHeight","max","clientHeight","delay","later","publish","min","stopPropagation","preventDefault"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"anchors.min.js","sources":["src/utils/types/isString.js","src/utils/lang/hasOwn.js","src/utils/lang/toString.js","src/utils/types/isFunction.js","src/utils/types/isObject.js","src/base.js","src/utils/lang/extend.js","src/utils/types/isElement.js","src/utils/lang/easeInQuad.js","src/utils/dom/_getScrollElement.js","src/utils/dom/offsetTop.js","src/utils/dom/matches.js","src/utils/dom/getParentOrHost.js","src/utils/event/enum.js","src/utils/event/_off.js","src/utils/event/_delete.js","src/utils/event/purgeElement.js","src/utils/event/getListeners.js","src/utils/event/off.js","src/utils/event/on.js","src/utils/event/getTarget.js","src/utils/dom/resolveTextNode.js","src/utils/dom/closest.js","src/utils/observer/_subscribers.js","src/utils/observer/_hasDirectSubscribersFor.js","src/utils/observer/has.js","src/utils/observer/_hasSubscribers.js","src/utils/observer/emit.js","src/utils/types/isTypedArray.js","src/utils/types/isArray.js","src/utils/icons/symbols.js","src/utils/icons/defaults.js","src/utils/icons/getSymbols.js","src/utils/icons/getSymbol.js","src/utils/icons/paint.js","src/utils/icons/add.js","src/utils/lang/trim.js","src/utils/types/isDOM.js","src/utils/types/isHTMLCollection.js","src/utils/types/isFragment.js","src/utils/types/isTextNode.js","src/utils/dom/setAttribute.js","src/utils/types/isSVG.js","src/utils/icons/icon.js","src/utils/icons/createElement.js","src/_updateHeading.js","src/utils/dom/createElement.js","src/utils/dom/removeClass.js","src/utils/dom/hasClass.js","src/_resetHeading.js","src/utils/types/isEmpty.js","src/getChapters.js","src/utils/lang/stripTags.js","src/_getChapterParentIdByDiffer.js","src/_getChaptersWithCode.js","src/anchors.js","src/utils/lang/toTree.js","src/utils/dom/scrollTo.js","src/utils/lang/later.js","src/utils/event/stop.js"],"sourcesContent":["/**\n * 检测数据是否为 String 类型\n * ========================================================================\n * @method isArray\n * @param {*} str\n * @returns {boolean}\n */\nconst isString = (str) => {\n return typeof str === 'string'\n}\n\nexport default isString\n","/**\n * 检测对象自身属性中是否具有指定的属性。\n * ========================================================================\n * @method hasOwn\n * @param {Object} obj - (必须)检测的目标对象\n * @param {String} prop - (必须)属性名\n * @returns {Boolean}\n */\nconst hasOwn = (obj, prop) => {\n const hasOwnProperty = Object.prototype.hasOwnProperty\n return obj && hasOwnProperty.call(obj, prop)\n}\n\nexport default hasOwn\n","/**\n * Object 对象原型上的 toString 方法\n * ========================================================================\n * @method toString\n * @param {*} val\n * @returns {string}\n */\nconst toString = (val) => {\n return Object.prototype.toString.apply(val)\n}\n\nexport default toString\n","import toString from '../lang/toString'\n\n/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return typeof val === 'function' || toString(val) === '[object Function]'\n}\n\nexport default isFunction\n","import toString from '../lang/toString'\nimport isFunction from '../types/isFunction'\n\n/**\n * 检测数据是否为 Object 类型\n * ========================================================================\n * @method isObject\n * @param {*} o\n * @returns {boolean}\n */\nconst isObject = (o) => {\n return (\n (toString(o) === '[object Object]' ||\n typeof o === 'object' ||\n isFunction(o)) &&\n o !== null\n )\n}\n\nexport default isObject\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\n\n/**\n * 扩展对象\n * ========================================================================\n * @method extend\n * @param {Object} origin\n * @param {Object} source\n */\nconst extend = (origin, source) => {\n const keys = Object.keys(source)\n\n keys.forEach((prop) => {\n if (hasOwn(source, prop)) {\n origin[prop] = source[prop]\n }\n })\n}\n\nexport default extend\n","import isObject from './isObject'\n\n/**\n * 检测数据是否为 HTMLElement DOM 节点\n * ========================================================================\n * @method isElement\n * @param {*} o\n * @returns {boolean}\n */\nconst isElement = (o) => {\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\n}\n\nexport default isElement\n","/**\n * 返回给定值的平方值\n * ========================================================================\n * @method easeInQuad\n * @param {Number} x\n * @returns {number}\n */\nconst easeInQuad = (x) => {\n return x * x\n}\n\nexport default easeInQuad\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\n\n/**\n * 通过给的 scrollElement 参数,获取滚动 DOM 元素\n * ========================================================================\n * @method _getScrollElement\n * @param {String|HTMLElement} scrollElement\n * @returns {Element}\n * @private\n */\nconst _getScrollElement = (scrollElement = null) => {\n let $rootElements\n let $scrollElement\n\n if (!scrollElement) {\n $rootElements = document.querySelectorAll('html,body')\n $scrollElement =\n $rootElements[0].scrollTop - $rootElements[1].scrollTop >= 0\n ? $rootElements[0]\n : $rootElements[1]\n } else {\n if (isString(scrollElement)) {\n $scrollElement = document.querySelector(scrollElement)\n } else if (isElement(scrollElement)) {\n $scrollElement = scrollElement\n }\n }\n\n return $scrollElement\n}\n\nexport default _getScrollElement\n","/**\n * 获取 DOM 节点相对于窗口的 left (纵坐标)值\n * ========================================================================\n * @method offsetTop\n * @param {HTMLElement} el - DOM 节点\n * @returns {Number}\n */\nconst offsetTop = (el) => {\n let top = el.offsetTop\n\n if (el.offsetParent !== null) {\n top += offsetTop(el.offsetParent)\n }\n\n return top\n}\n\nexport default offsetTop\n","/**\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\n * ========================================================================\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\n * 标 DOM 元素是否为事件代理所期望触发的目标。\n * ========================================================================\n * @method matches\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\n * @returns {Boolean}\n */\nconst matches = (el, selector = '') => {\n const sel = selector.replace(/^>/i, '')\n\n if (!selector || !sel || !el) {\n return false\n }\n\n /* istanbul ignore else */\n if (el.matches) {\n return el.matches(sel)\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(sel)\n } else {\n return false\n }\n}\n\nexport default matches\n","/**\n * 获取 DOM 元素的父节点\n * ========================================================================\n * @method getParentOrHost\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\n * @returns {*|HTMLElement}\n */\nconst getParentOrHost = (el) => {\n return el.host && el !== document && el.host.nodeType\n ? el.host\n : el.parentNode\n}\n\nexport default getParentOrHost\n","export const CAPTURE_EVENTS = [\n 'focusout',\n 'blur',\n 'focusin',\n 'focus',\n 'load',\n 'unload',\n 'mouseenter',\n 'mouseleave'\n]\n","import { CAPTURE_EVENTS } from './enum'\nimport _delete from './_delete'\n\n/**\n * (私有方法)取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method _off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须)事件处理器回调函数\n * @private\n */\nconst _off = (el, type, fn) => {\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n /* istanbul ignore else */\n if (fn._delegateListener) {\n fn = fn._delegateListener\n delete fn._delegateListener\n }\n\n // 移除缓存的 _listeners 数据\n _delete(el, type, fn)\n\n el.removeEventListener(type, fn, capture)\n}\n\nexport default _off\n","/**\n * 删除 DOM 元素缓存的 _listeners 数据\n * ========================================================================\n * @method _delete\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\n * @param {String} type - 事件类型(名称)\n * @param {Function} [fn] - 事件处理器回调函数\n */\nconst _delete = function (el, type, fn) {\n const listeners = el._listeners\n let index = -1\n\n if (listeners.length < 1) {\n return false\n }\n\n // 移除缓存的 _listeners 数据\n listeners.forEach((listener, i) => {\n const handler = listener.fn\n\n if (type === listener.type) {\n index = i\n\n if (handler === fn) {\n index = i\n }\n }\n })\n\n /* istanbul ignore else */\n if (index > -1) {\n listeners.splice(index, 1)\n }\n}\n\nexport default _delete\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\nimport getListeners from './getListeners'\nimport _off from './_off'\n\n/**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purgeElement\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\n * @param {String|Boolean} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n */\nconst purgeElement = function (el, type, recurse = false) {\n const $element = isString(el) ? document.querySelector(el) : el\n const $children = $element.childNodes\n const listeners = getListeners($element, type)\n\n listeners.forEach((listener) => {\n _off($element, listener.type, listener.fn)\n })\n\n if (\n (recurse || type === true || arguments.length === 1) &&\n $element &&\n $children\n ) {\n $children.forEach(($child) => {\n if (isElement($child)) {\n purgeElement($child, type, recurse)\n }\n })\n }\n}\n\nexport default purgeElement\n","import isString from '../types/isString'\n\n/**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @methods getListeners\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\nconst getListeners = (el, type) => {\n let listeners = el._listeners || []\n\n if (isString(type) && type) {\n listeners = listeners.filter((listener) => {\n return listener.type === type\n })\n }\n\n return listeners\n}\n\nexport default getListeners\n","import purgeElement from './purgeElement'\nimport isFunction from '../types/isFunction'\nimport _off from './_off'\n\n/**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} [fn] - (可选)事件处理器回调函数\n */\nconst off = (el, type, fn) => {\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\n if (!isFunction(fn)) {\n return purgeElement(el, type)\n }\n\n _off(el, type, fn)\n}\n\nexport default off\n","import closest from '../dom/closest'\nimport off from './off'\nimport getTarget from './getTarget'\n\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst on = (el, selector, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n const listener = function (evt) {\n const target = getTarget(evt)\n // 通过 Element.matches 方法获得点击的目标元素\n const delegateTarget = closest(target, selector, el)\n let overrideContext = context || el\n\n evt.delegateTarget = delegateTarget\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n /* istanbul ignore else */\n if (delegateTarget) {\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n selector,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default on\n","import resolveTextNode from '../dom/resolveTextNode'\n\n/**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\nconst getTarget = function (evt) {\n const target = evt.target\n\n return resolveTextNode(target)\n}\n\nexport default getTarget\n","/**\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\n * resolveTextNode() 方法则会返回实际的目标节点。\n * ========================================================================\n * @method resolveTextNode\n * @param {HTMLElement|Text} el - 要解析的节点\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\n */\nconst resolveTextNode = function (el) {\n if (el && el.nodeType === 3) {\n return el.parentNode\n }\n\n return el\n}\n\nexport default resolveTextNode\n","import matches from './matches'\nimport getParentOrHost from './getParentOrHost'\n\n/**\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\n * ========================================================================\n * @method closest\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)DOM 元素的选择其\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\n */\nconst closest = (el, selector, ctx, includeCTX) => {\n const context = ctx || document\n\n if (!el) {\n return null\n }\n\n do {\n /* istanbul ignore else */\n if (\n (selector != null &&\n (selector.startsWith('>')\n ? el.parentNode === context && matches(el, selector)\n : matches(el, selector))) ||\n (includeCTX && el === context)\n ) {\n return el\n }\n\n /* istanbul ignore else */\n if (el === context) {\n break\n }\n\n /* jshint boss:true */\n } while ((el = getParentOrHost(el)))\n}\n\nexport default closest\n","/**\n * 存储订阅者(主题和处理器的)私有对象\n * ========================================================================\n * @type {{}}\n * @private\n */\nconst _subscribers = {}\n\nexport default _subscribers\n","import _subscribers from './_subscribers'\nimport hasOwn from '../lang/hasOwn'\n\n/**\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\n * ========================================================================\n * @method _hasDirectSubscribersFor\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasDirectSubscribersFor = (topic) => {\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\n}\n\nexport default _hasDirectSubscribersFor\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\nimport _hasSubscribers from './_hasSubscribers'\n\n/**\n * 判断是否存在包含 topic 指定的订阅者信息\n * ========================================================================\n * @method has\n * @param {String} topic - (必须)主题名称\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\n * @returns {Boolean}\n */\nconst has = (topic, isDirect = true) => {\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\n}\n\nexport default has\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * 判断是否存在包含给定 topic 相关的订阅者信息\n * ========================================================================\n * @method _hasSubscribers\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasSubscribers = (topic) => {\n let found = _hasDirectSubscribersFor(topic)\n let position = topic.lastIndexOf('.')\n\n while (!found && position !== -1) {\n topic = topic.substring(0, position)\n position = topic.lastIndexOf('.')\n found = _hasDirectSubscribersFor(topic)\n }\n\n return found\n}\n\nexport default _hasSubscribers\n","import isTypedArray from '../types/isTypedArray'\nimport _subscribers from './_subscribers'\nimport has from './has'\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * (异步)发布订阅主题信息\n * ========================================================================\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\n * ========================================================================\n * @method emit\n * @param {String} topic - (必须)主题名称\n * @param {Object} data - (必须)数据对象\n * @param {Boolean} async - (可选) 是否异步发布\n */\nconst emit = (topic, data, async = true) => {\n const execute = (topic) => {\n if (!_hasDirectSubscribersFor(topic)) {\n return false\n }\n\n _subscribers[topic].forEach((subscriber) => {\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\n // 采用 toString() 方法转化为普通(JSON)字符串\n const message = isTypedArray(data) ? data.toString() : data\n\n subscriber.callback.call(subscriber.context || subscriber, message)\n })\n }\n const deliver = () => {\n let subscriber = topic\n let position = topic.lastIndexOf('.')\n\n while (position !== -1) {\n subscriber = subscriber.substring(0, position)\n position = subscriber.lastIndexOf('.')\n\n execute(subscriber)\n }\n\n // 执行 topic 对应的处理器\n execute(topic)\n // 执行特殊 topic:'*'(监听全部消息的发布)\n execute('*')\n }\n\n if (!has(topic)) {\n return false\n }\n\n if (async) {\n setTimeout(deliver, 10)\n } else {\n deliver()\n }\n}\n\nexport default emit\n","import toString from '../lang/toString'\n/**\n * 判断检测数据是否为 Typed Arrays 类型的数据\n * ========================================================================\n * @param {*} val\n * @returns {boolean}\n */\nconst isTypedArray = (val) => {\n const TYPES = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n '[object BigInt64Array]',\n '[object BigUint64Array]'\n ]\n\n return TYPES.indexOf(toString(val)) > -1\n}\n\nexport default isTypedArray\n","import toString from '../lang/toString'\n\n/**\n * 检测数据是否为 Array 类型\n * ========================================================================\n * @method isArray\n * @param {*} o\n * @returns {boolean}\n */\nconst isArray = (o) => {\n if (Array.isArray) {\n return Array.isArray(o)\n } else {\n return toString(o) === '[object Array]'\n }\n}\n\nexport default isArray\n","import DEFAULTS from './defaults'\n\nconst SYMBOLS = [...DEFAULTS]\n\nexport default SYMBOLS\n","const DEFAULTS = [\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n ''\n]\n\nexport default DEFAULTS\n","import isString from '../types/isString'\nimport getSymbol from './getSymbol'\nimport SYMBOLS from './symbols'\n\n/**\n *\n * @method getSymbols\n * @param {String} [name]\n * @param {String} [iconSet]\n * @returns {string[]|*}\n */\nconst getSymbols = (name, iconSet = 'icon') => {\n if (isString(name)) {\n return getSymbol(name, iconSet)\n }\n\n return [...SYMBOLS]\n}\n\nexport default getSymbols\n","import SYMBOLS from './symbols'\n\n/**\n * @method getSymbol\n * @param {String} name\n * @param {String} [iconSet]\n * @returns {String}\n */\nconst getSymbol = (name, iconSet = 'icon') => {\n const patternName = /id=\"(.*?)\"/\n const patternSet = /^(\\w+)-/\n const symbols = SYMBOLS\n\n return symbols.find((symbol) => {\n const names = patternName.exec(symbol)\n const fullName = names[1]\n const sets = patternSet.exec(fullName)\n const setName = sets[1]\n const iconName =\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\n\n return setName === iconSet && fullName === iconName\n })\n}\n\nexport default getSymbol\n","import add from './add'\nimport getSymbols from './getSymbols'\n\n/**\n * 绘制 SVG 图标集\n * ========================================================================\n * @method paint\n * @param {String|Array} symbol\n */\nconst paint = (symbol = '') => {\n const $body = document.body\n let $icons = document.querySelector('#outline-icons')\n let symbols = []\n\n add(symbol)\n symbols = getSymbols()\n\n if ($icons) {\n $icons.innerHTML = symbols.join('')\n } else {\n $icons = document.createElement('div')\n $icons.innerHTML =\n ``\n $body.insertBefore($icons.firstChild, $body.firstChild)\n }\n}\n\nexport default paint\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport SYMBOLS from './symbols'\n\n/**\n * @method add\n * @param {Array|String} symbols\n * @return {Boolean}\n */\nconst add = (symbols) => {\n if (!symbols) {\n return false\n }\n\n if (isArray(symbols) && symbols.length > 0) {\n symbols.forEach((symbol) => {\n /* istanbul ignore else */\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\n SYMBOLS.push(symbol)\n }\n })\n } else {\n /* istanbul ignore else */\n if (isString(symbols)) {\n SYMBOLS.push(symbols)\n }\n }\n}\n\nexport default add\n","import isString from '../types/isString'\n\n/**\n * 清楚字符串起始位置所有的空格\n * ========================================================================\n * @method trim\n * @param {string} str\n * @returns {string|Boolean}\n */\nconst trim = (str) => {\n if (!isString(str)) {\n return false\n }\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\n}\n\nexport default trim\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\nimport isObject from './isObject'\n\nconst isFragment = (fragment) => {\n return !!(\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\n )\n}\n\nexport default isFragment\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","/**\n * 给 DOM 节点设置属性/值\n * ========================================================================\n * @method setAttribute\n * @param {HTMLElement} el - DOM 节点\n * @param {String} attr - 属性名称\n * @param {String|Number|Boolean} value - 属性值\n */\nconst setAttribute = (el, attr, value) => {\n let tagName = el.tagName.toLowerCase()\n\n switch (attr) {\n case 'style':\n el.style.cssText = value\n break\n case 'value':\n if (tagName === 'input' || tagName === 'textarea') {\n el.value = value\n } else {\n el.setAttribute(attr, value)\n }\n break\n case 'className':\n el.className = value\n break\n default:\n el.setAttribute(attr, value)\n break\n }\n}\n\nexport default setAttribute\n","import isString from './isString'\n\nconst isSVG = (str) => {\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\n const doctype =\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\n const pattern = new RegExp(svg, 'i')\n\n return isString(str) && pattern.test(str)\n}\n\nexport default isSVG\n","import createElement from './createElement'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method icon\n * @alias createElement\n * @see createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst icon = (name, options = {}) => {\n return createElement(name, options)\n}\n\nexport default icon\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport isSVG from '../types/isSVG'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst createElement = (name, options = {}) => {\n const size = options.size || 0\n const color = options.color || ''\n const iconSet = options.iconSet || ''\n const width = isArray(size) ? size[0] : size\n const height = isArray(size) ? size[1] : size\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\n const $icon = document.createElement('i')\n let binds = ''\n let svg = ''\n let $svg\n\n if (!isString(name)) {\n return null\n }\n\n if (isSVG(name)) {\n svg = name\n } else {\n binds =\n iconSet && iconSet !== 'icon'\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\n : `xlink:href=\"#icon-${name}\"`\n svg =\n `` +\n `` +\n ``\n }\n\n $icon.className = 'outline-icon'\n $icon.innerHTML = svg\n\n if (isSVG(name)) {\n $svg = $icon.querySelector('svg')\n $svg.setAttribute('aria-hidden', 'true')\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n $svg.setAttribute('class', 'outline-icon__svg')\n $svg.setAttribute('width', '200')\n $svg.setAttribute('height', '200')\n $svg.style = cssRules\n }\n\n return $icon\n}\n\nexport default createElement\n","import trim from './utils/lang/trim'\nimport createElement from './utils/dom/createElement'\nimport setAttribute from './utils/dom/setAttribute'\n\nimport icon from './utils/icons/icon'\n\nconst _updateHeading = ($heading, i, options) => {\n const $fragment = document.createDocumentFragment()\n const CLS_HEADING = 'outline-heading'\n const hasAnchor = options.hasAnchor || true\n const isAtStart = options.isAtStart || true\n const showCode = options.showCode || false\n const chapterCode = options.chapterCode || ''\n const anchorURL = options.anchorURL || ''\n const headingId = `heading-${i}`\n const attrs = {\n id: headingId,\n className: isAtStart ? `${CLS_HEADING} ${CLS_HEADING}_start` : CLS_HEADING,\n 'data-id': i\n }\n const keys = Object.keys(attrs)\n const text = trim($heading.innerHTML)\n let $anchor\n let $icon\n\n keys.forEach((prop) => {\n setAttribute($heading, prop, attrs[prop])\n })\n\n if (showCode) {\n $heading.innerHTML = chapterCode + ' ' + text\n }\n\n if (!hasAnchor) {\n return false\n }\n\n $icon = icon('hash', { iconSet: 'outline' })\n $anchor = createElement(\n 'a',\n {\n id: `anchor-${i}`,\n className: `${CLS_HEADING}__anchor anchor-${i}`,\n href: anchorURL || `#${headingId}`,\n target: anchorURL ? '_blank' : 'self',\n 'data-id': i\n },\n [$icon]\n )\n $fragment.appendChild($anchor)\n $heading.appendChild($fragment)\n}\n\nexport default _updateHeading\n","import hasOwn from '../lang/hasOwn'\nimport isObject from '../types/isObject'\nimport isString from '../types/isString'\nimport isArray from '../types/isArray'\nimport isDOM from '../types/isDOM'\nimport setAttribute from './setAttribute'\n\n/**\n * 创建 DOM 节点,并添加属性和子节点\n * ========================================================================\n * @method createElement\n * @param {String} tagName - 标签名称\n * @param {Object|Array} attrs - 属性对象或者子节点\n * @param {Array} [children] - 子节点数组\n * @returns {HTMLElement}\n */\nconst createElement = (tagName, attrs, children) => {\n const $fragment = document.createDocumentFragment()\n const $el = document.createElement(tagName)\n const isValidChild = (child) => {\n return isDOM(child) || isString(child)\n }\n const append = (child) => {\n let $child\n\n if (!isValidChild(child)) {\n return false\n }\n\n if (isDOM(child)) {\n $child = child\n } else if (isString(child)) {\n $child = document.createTextNode(child)\n }\n\n $fragment.appendChild($child)\n }\n\n if (isObject(attrs)) {\n Object.keys(attrs).forEach((attr) => {\n if (hasOwn(attrs, attr)) {\n setAttribute($el, attr, attrs[attr])\n }\n })\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\n attrs.forEach((child) => {\n append(child)\n })\n }\n\n if (isArray(children)) {\n children.forEach((child) => {\n append(child)\n })\n } else {\n append(children)\n }\n\n $el.appendChild($fragment)\n\n return $el\n}\n\nexport default createElement\n","import trim from '../lang/trim'\nimport hasClass from './hasClass'\n\n/**\n * 移除 DOM 节点的 className 样式\n * ========================================================================\n * @method removeClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst removeClass = (el, className) => {\n let allClass = el.className\n let classList\n\n if (!allClass || !hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.remove) {\n classList.remove(className)\n } else {\n allClass = trim(allClass.replace(className, ''))\n el.className = allClass\n }\n}\n\nexport default removeClass\n","import isElement from '../types/isElement'\n/**\n * 检测 DOM 节点是否包含名为 className 的样式\n * ========================================================================\n * @method hasClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst hasClass = (el, className) => {\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\n let allClass\n let classList\n\n if (!isElement(el)) {\n return false\n }\n\n allClass = el.className\n\n if (!allClass) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.contains) {\n return el.classList.contains(className)\n }\n\n return !!pattern.exec(allClass)\n}\n\nexport default hasClass\n","import removeClass from './utils/dom/removeClass'\nimport isEmpty from './utils/types/isEmpty'\nimport trim from './utils/lang/trim'\n\nconst _resetHeading = ($heading, hasAnchor = true, isAtStart = true) => {\n const CLS_HEADING = 'outline-heading'\n const text = $heading.innerHTML\n const pattern = /^\\d+(\\.?\\d+)*\\s?/gi\n let $anchor\n\n $heading.innerHTML = text.replace(pattern, '')\n $heading.removeAttribute('id')\n $heading.removeAttribute('data-id')\n\n removeClass($heading, CLS_HEADING)\n\n if (!hasAnchor) {\n return false\n }\n\n $anchor = $heading.querySelector(`.${CLS_HEADING}__anchor`)\n\n if (isAtStart) {\n removeClass($heading, `${CLS_HEADING}_start`)\n }\n\n if (isEmpty(trim($heading.className))) {\n $heading.removeAttribute('class')\n }\n\n $heading.removeChild($anchor)\n}\n\nexport default _resetHeading\n","import isString from './isString'\n/**\n * 检测数据是否为空字符串\n * ========================================================================\n * @method isEmpty\n * @param {String} str\n * @returns {boolean}\n */\nconst isEmpty = (str) => {\n return isString(str) && str === ''\n}\n\nexport default isEmpty\n","import trim from './utils/lang/trim'\nimport stripTags from './utils/lang/stripTags'\n\nimport _getChapterParentIdByDiffer from './_getChapterParentIdByDiffer'\nimport _getChaptersWithCode from './_getChaptersWithCode'\n\nconst getChapters = (headings, showCode = true) => {\n let previous = 1\n let level = 0\n const chapters = []\n\n headings.forEach((heading, i) => {\n const headingLevel = heading.tagName.replace(/h/i, '')\n let current = parseInt(headingLevel, 10)\n let pid = -1\n\n // 场景1:当前标题是前一个标题的子标题\n // 当前标题的(标题标签)序号 > 前一个标题的序号:两个相连的标题是父标题 -> 子标题关系;\n // h2 (前一个标题)\n // h3 (当前标题)\n if (current > previous) {\n level += 1\n\n // 第一层级的 pid 是 -1\n if (level === 1) {\n pid = -1\n } else {\n pid = i - 1\n }\n }\n // 场景2:当前标题和前一个标题层级相同\n // 当前标题的(标题标签)序号 = 前一个标题的序号\n // h2 (前一个标题)\n // h2 (当前标题)\n // 当前标题的(标题标签)序号 < 前一个标题的序号,并且当前标题序号 > 当前的级别\n // h2\n // h4 (前一个标题)\n // h3 (当前标题:这种情况我们还是任务 h3 是 h2 的下一级章节)\n else if (current === previous || (current < previous && current > level)) {\n // H1 的层级肯定是 1\n if (current === 1) {\n level = 1\n pid = -1\n } else {\n pid = chapters[i - 1].pid\n }\n }\n // 场景3:当前标题比前一个标题层级高\n else if (current <= level) {\n // H1 的层级肯定是 1\n if (current === 1) {\n level = 1\n } else {\n level = level - (previous - current)\n\n if (level <= 1) {\n level = 1\n }\n }\n\n // 第一级的标题\n if (level === 1) {\n pid = -1\n } else {\n // 通过当前标题和前一个标题之间的等级差,获得当前标题的父标题ID\n pid = _getChapterParentIdByDiffer(chapters, previous - current, i)\n }\n }\n\n previous = current\n\n chapters.push({\n id: i,\n pid: pid,\n level: level,\n rel: `heading-${i}`,\n text: stripTags(trim(heading.innerHTML))\n })\n })\n\n return showCode ? _getChaptersWithCode(chapters) : chapters\n}\n\nexport default getChapters\n","import isString from '../types/isString'\n\n/**\n * 过滤所有 HTML 标签\n * ========================================================================\n * @method stripTags\n * @param {string} str\n * @returns {string}\n */\nconst stripTags = (str) => {\n if (!isString(str)) {\n return ''\n }\n return str.replace(/<\\/?[^>]+(>|$)/g, '')\n}\n\nexport default stripTags\n","const _getChapterParentIdByDiffer = (chapters, differ, index) => {\n let previous = chapters[index - 1]\n let pid\n let i\n\n for (i = 0; i < differ; i += 1) {\n pid = previous.pid\n previous = chapters[pid]\n }\n\n pid = previous.pid\n\n return pid\n}\n\nexport default _getChapterParentIdByDiffer\n","const _getChaptersWithCode = (chapters) => {\n const groups = {}\n const cb = (o) => {\n return [o.pid]\n }\n\n chapters.forEach((o) => {\n const group = JSON.stringify(cb(o))\n\n groups[group] = groups[group] || []\n groups[group].push(o)\n\n o.index = groups[group].length\n if (o.pid === -1) {\n o.code = String(o.index)\n }\n })\n\n Object.keys(groups).forEach((group) => {\n groups[group].forEach((c) => {\n const subjects = chapters.filter((b) => b.pid === c.id)\n subjects.forEach((o) => {\n o.code = c.code + '.' + o.index\n })\n })\n })\n\n return chapters\n}\n\nexport default _getChaptersWithCode\n","import Base from './base'\n\n// 在文章的标题生成 anchor 链接\nimport isString from './utils/types/isString'\nimport isFunction from './utils/types/isFunction'\nimport isElement from './utils/types/isElement'\nimport toTree from './utils/lang/toTree'\nimport later from './utils/lang/later'\nimport scrollTo from './utils/dom/scrollTo'\nimport _getScrollElement from './utils/dom/_getScrollElement'\nimport offsetTop from './utils/dom/offsetTop'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\nimport stop from './utils/event/stop'\nimport publish from './utils/observer/emit'\nimport paint from './utils/icons/paint'\n\nimport _updateHeading from './_updateHeading'\nimport _resetHeading from './_resetHeading'\nimport getChapters from './getChapters'\n\nclass Anchors extends Base {\n constructor(options) {\n super()\n\n this.attrs = Anchors.DEFAULTS\n this.$articleElement = null\n this.$scrollElement = null\n this.$headings = []\n\n this.chapters = []\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n let scrollElement\n let selector\n let $articleElement\n let articleElement\n\n this.attr(options)\n articleElement = this.attr('articleElement')\n scrollElement = this.attr('scrollElement')\n selector = this.attr('selector')\n created = this.attr('created')\n\n if (isString(articleElement)) {\n $articleElement = document.querySelector(articleElement)\n } else if (isElement(articleElement)) {\n $articleElement = articleElement\n }\n\n if (!$articleElement) {\n return this\n }\n\n this.$articleElement = $articleElement\n this.$scrollElement = _getScrollElement(scrollElement)\n this.$headings = [...$articleElement.querySelectorAll(selector)]\n\n if (this.$headings.length < 1) {\n return this\n }\n\n this.chapters = getChapters(this.$headings)\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n this.render().addListeners()\n\n return this\n }\n\n getChapters(isTreeStructured = false) {\n const chapters = this.chapters\n return isTreeStructured ? toTree(chapters, 'id', 'pid') : chapters\n }\n\n count() {\n return this.chapters.length\n }\n\n render() {\n const mounted = this.attr('mounted')\n const hasAnchor = this.attr('hasAnchor')\n const isAtStart = this.attr('isAtStart')\n const showCode = this.attr('showCode')\n const anchorURL = this.attr('anchorURL')\n const $headings = this.$headings\n const chapters = this.getChapters()\n\n paint()\n\n $headings.forEach(($heading, i) => {\n const chapterCode = chapters[i].code\n _updateHeading($heading, i, {\n hasAnchor,\n isAtStart,\n showCode,\n chapterCode,\n anchorURL\n })\n })\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n return this\n }\n\n scrollTo(top, after) {\n const el = this.$scrollElement\n\n scrollTo(el, top, after)\n\n return this\n }\n\n destroy() {\n const hasAnchor = this.attr('hasAnchor')\n const isAtStart = this.attr('isAtStart')\n const beforeDestroy = this.attr('beforeDestroy')\n const afterDestroy = this.attr('afterDestroy')\n const $headings = this.$headings\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n $headings.forEach(($heading) => {\n _resetHeading($heading, hasAnchor, isAtStart)\n })\n\n this.attr(Anchors.DEFAULTS)\n this.$articleElement = null\n this.$scrollElement = null\n this.$headings = []\n this.chapters = []\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n return this\n }\n\n onAnchorTrigger(evt) {\n const anchorURL = this.attr('anchorURL')\n const afterScroll = this.attr('afterScroll')\n const stickyHeight = this.attr('stickyHeight')\n const $anchor = evt.delegateTarget\n const $heading = $anchor.parentNode\n const top = offsetTop($heading) - (stickyHeight + 10)\n const $scrollElement = this.$scrollElement\n const min = 0\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\n const after = () => {\n if (isFunction(afterScroll)) {\n afterScroll.call(this, 'anchor')\n }\n\n later(() => {\n publish('toolbar:update', {\n top,\n min,\n max\n })\n })\n }\n\n this.scrollTo(top, after)\n\n if (!anchorURL) {\n stop(evt)\n }\n\n return this\n }\n\n addListeners() {\n const $articleElement = this.$articleElement\n\n on(\n $articleElement,\n '.outline-heading__anchor',\n 'click',\n this.onAnchorTrigger,\n this,\n true\n )\n\n return this\n }\n\n removeListeners() {\n const $articleElement = this.$articleElement\n\n off($articleElement, 'click', this.onAnchorTrigger)\n\n return this\n }\n}\n\nAnchors.DEFAULTS = {\n scrollElement: 'html,body',\n articleElement: '#article',\n selector: 'h1,h2,h3,h4,h5,h6',\n stickyHeight: 0,\n anchorURL: '',\n hasAnchor: true,\n isAtStart: true,\n showCode: false,\n created: null,\n mounted: null,\n afterScroll: null,\n beforeDestroy: null,\n afterDestroy: null\n}\n\nexport default Anchors\n","const toTree = (list, nodeKey, parentKey) => {\r\n const map = {}\r\n const roots = []\r\n\r\n list.forEach((item, i) => {\r\n // initialize the map\r\n map[item[nodeKey]] = i\r\n // initialize the children\r\n item.children = []\r\n })\r\n\r\n list.forEach((item) => {\r\n const node = list[map[item[parentKey]]]\r\n\r\n if (item[parentKey] !== -1) {\r\n // if you have dangling branches check that map[node.parentId] exists\r\n node.children.push(item)\r\n } else {\r\n roots.push(item)\r\n }\r\n })\r\n\r\n return roots\r\n}\r\n\r\nexport default toTree\r\n","import easeInQuad from '../lang/easeInQuad'\nimport isFunction from '../types/isFunction'\nimport _getScrollElement from './_getScrollElement'\n\n/**\n * 指定 rootElement DOM 节点滚动到指定 top 位置\n * ========================================================================\n * @method scrollTo\n * @param {HTMLElement|Object} [scrollElement] - (必须)要滚动的 DOM 节点\n * @param {Number} top - (必须)滚动的 scrollTop 数值\n * @param {Function} [afterStop] - (可选)滚动完成的回调函数\n */\nconst scrollTo = (scrollElement, top, afterStop) => {\n const $scrollElement = _getScrollElement(scrollElement)\n let scrollTop = $scrollElement.scrollTop\n let step = 0\n const distance = top - scrollTop\n const MAX_HEIGHT = $scrollElement.scrollHeight\n const MAX_TOP = top - MAX_HEIGHT <= 0 ? top : MAX_HEIGHT\n const stop = (top) => {\n if (isFunction(afterStop)) {\n afterStop(top)\n }\n\n return false\n }\n const play = () => {\n step += 1\n\n // 向上滚动\n if (distance < 0) {\n scrollTop -= easeInQuad(step)\n $scrollElement.scrollTop = scrollTop\n\n if (scrollTop <= top) {\n $scrollElement.scrollTop = top\n return stop(top)\n }\n } else {\n scrollTop += easeInQuad(step)\n $scrollElement.scrollTop = scrollTop\n\n if (scrollTop >= MAX_TOP) {\n $scrollElement.scrollTop = MAX_TOP\n return stop(MAX_TOP)\n }\n }\n\n requestAnimationFrame(play)\n }\n\n requestAnimationFrame(play)\n}\n\nexport default scrollTo\n","import isFunction from '../types/isFunction'\n\n/**\n * later - 延迟执行方法\n * ========================================================================\n * @method later\n * @param {Function} fn\n * @param {Number} [delay]\n * @returns {number|boolean}\n */\nconst later = (fn, delay = 300) => {\n if (!isFunction(fn)) {\n return false\n }\n\n return setTimeout(() => {\n fn()\n }, delay)\n}\n\nexport default later\n","/**\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\n * ========================================================================\n * @method stop\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 工作台输出:'a'\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\n * stopEvent(evt)\n * })\n */\nconst stop = function (evt) {\n evt.stopPropagation()\n evt.preventDefault()\n}\n\nexport default stop\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isElement","nodeName","tagName","nodeType","easeInQuad","x","_getScrollElement","scrollElement","$rootElements","$scrollElement","document","querySelector","querySelectorAll","scrollTop","offsetTop","el","top","offsetParent","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","fn","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","$children","childNodes","filter","getListeners","$child","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","setTimeout","isArray","Array","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","exec","iconName","getSymbol","paint","$body","body","$icons","symbols","add","innerHTML","join","createElement","insertBefore","firstChild","trim","isDOM","isHTMLCollection","fragment","isTextNode","setAttribute","toLowerCase","style","cssText","className","isSVG","pattern","RegExp","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","_updateHeading","$heading","$fragment","createDocumentFragment","CLS_HEADING","hasAnchor","isAtStart","showCode","chapterCode","anchorURL","headingId","id","text","$anchor","children","$el","isValidChild","child","append","createTextNode","appendChild","every","href","removeClass","classList","allClass","contains","hasClass","remove","_resetHeading","removeAttribute","removeChild","getChapters","headings","previous","level","chapters","heading","headingLevel","current","parseInt","pid","differ","_getChapterParentIdByDiffer","rel","groups","group","JSON","stringify","cb","code","String","c","b","_getChaptersWithCode","Anchors","super","DEFAULTS","$articleElement","$headings","created","articleElement","isTreeStructured","list","nodeKey","parentKey","map","roots","item","node","toTree","count","mounted","scrollTo","after","afterStop","step","distance","MAX_HEIGHT","scrollHeight","MAX_TOP","stop","play","requestAnimationFrame","beforeDestroy","afterDestroy","onAnchorTrigger","afterScroll","stickyHeight","max","clientHeight","delay","later","publish","min","stopPropagation","preventDefault"],"mappings":"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"} \ No newline at end of file diff --git a/chapters.css b/chapters.css index 5748278c..b592c2fb 100644 --- a/chapters.css +++ b/chapters.css @@ -147,4 +147,4 @@ width: 0; } -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZhcmlhYmxlcy5sZXNzIiwiLi4vLi4vPGlucHV0IGNzcyAyPiIsImNoYXB0ZXJzLmxlc3MiLCJlbGxpcHNpcy5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsdUJBQUE7RUFDQSw4QkFBQTtFQUNBLCtCQUFBO0NDQ0Q7QUFDRCxtREFBbUQ7QUFDbkQ7Ozs7O0dBS0c7QUFDSCwwQkFBMEI7QUNSMUI7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0VBQ0EscUNBQUE7RUFDQSxrQ0FBQTtVQUFBLDBCQUFBO0VBQ0EsZUFBQTtDRFVEO0FDUkM7RUFDRSxlQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQ0FBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtDRFVIO0FDUEM7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0VBQ0EsaUJBQUE7Q0RTSDtBQ05DOzs7RUFHRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VBQ0EsaUJBQUE7Q0RRSDtBQ0xDO0VBQ0UsaUJBQUE7Q0RPSDtBQ0pDO0VBQ0Usa0JBQUE7Q0RNSDtBQ0hDO0VBQ0UsVUFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtDREtIO0FDRkM7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsMEJBQUE7RUFDQSwrQkFBQTtFQUNBLGtDQUFBO1VBQUEsMEJBQUE7RUFDQSwrQkFBQTtVQUFBLHVCQUFBO0VBQ0EsaUJBQUE7Q0RJSDtBQ0RDO0VDN0RBLG9CQUFBO0VBQ0Esd0JBQUE7RUFDQSxpQkFBQTtFRDZERSxlQUFBO0VBQ0EsaUJBQUE7Q0RLSDtBQ0hHOzs7RUFHRSxzQkFBQTtFQUNBLFlBQUE7Q0RLTDtBQ0ZHO0VBQ0UsZUFBQTtDRElMO0FDQUM7RUFDRSxxQkFBQTtDREVIO0FDR0s7OztFQUdFLGVBQUE7RUFDQSxpQkFBQTtDRERQO0FDTUM7O0VBRUUscUJBQUE7RUFBQSxxQkFBQTtFQUFBLGNBQUE7RUFDQSxzQkFBQTtNQUFBLGtCQUFBO0VBQ0EsNkJBQUE7RUFBQSw4QkFBQTtNQUFBLDJCQUFBO1VBQUEsdUJBQUE7RUFDQSwrQkFBQTtFQUNBLE9BQUE7RUFDQSxpQkFBQTtDREpIO0FDT0s7Ozs7RUFFRSwrQkFBQTtVQUFBLHVCQUFBO0NESFA7QUNNSzs7RUFDRSxxQkFBQTtNQUFBLGVBQUE7Q0RIUDtBQ01LOztFQUNFLG9CQUFBO01BQUEsWUFBQTtVQUFBLFFBQUE7RUFDQSxlQUFBO0NESFA7QUNRQztFQUNFLGlCQUFBO0VBQ0EseUNBQUE7Q0ROSDtBQ1NDO0VBQ0UsZ0JBQUE7RUFDQSxpQkFBQTtDRFBIO0FDVUM7RUFDRSxjQUFBO0NEUkg7QUNXQztFQUNFLFNBQUE7Q0RUSCIsImZpbGUiOiJjaGFwdGVycy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6cm9vdCB7XHJcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcclxuICAtLW91dGxpbmUtc3RpY2t5LWhlaWdodDogMTAwJTtcclxuICAtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGg6IDEwMCU7XHJcbn1cclxuIiwiOnJvb3Qge1xuICAtLW91dGxpbmUtekluZGV4OiAyMDAwO1xuICAtLW91dGxpbmUtc3RpY2t5LWhlaWdodDogMTAwJTtcbiAgLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoOiAxMDAlO1xufVxuLyogPT09PT09PT09PSBjb2xvcnMudGhlbWUgLSDln7rnoYDpopzoibLlj5jph4/pm4blkIggPT09PT09PT09PSAqL1xuLyoqXG4gKiBlbGxpcHNpcy5sZXNzIC0g5paH5pys55yB55WlIG1peGlueCDlh73mlbBcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENyZWF0ZWQgQnk6IFlhb2hhaXhpYW9cbiAqIFVwZGF0ZTogMjAyMi4zLjExXG4gKi9cbi8qID09PT09PSDmlofmnKznnIHnlaXlh73mlbAgPT09PT09ICovXG4ub3V0bGluZS1jaGFwdGVycyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogdmFyKC0tb3V0bGluZS1jaGFwdGVycy13aWR0aCk7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlIHtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIGhlaWdodDogNDBweDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmc6IDAgMTZweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbGlzdCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19zdWJqZWN0LFxuLm91dGxpbmUtY2hhcHRlcnNfX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDI7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2xpc3Qge1xuICBwYWRkaW5nOiAwLjVlbSAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3N1YmplY3Qge1xuICBwYWRkaW5nLWxlZnQ6IDFlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19pdGVtIHtcbiAgbWFyZ2luOiAwO1xuICBsaW5lLWhlaWdodDogMzBweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3BsYWNlaG9sZGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDMwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y4Zjk7XG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzA1ODk0MjtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3Ige1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMS41ZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzU1NTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19jb2RlIHtcbiAgcGFkZGluZy1yaWdodDogMC41ZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3ksXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG4gIHRvcDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX21haW4sXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlIHtcbiAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX21haW4sXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgbWF4LWhlaWdodDogdmFyKC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0KTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2ZvbGRlZCB7XG4gIHdpZHRoOiAwO1xufVxuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xyXG5AaW1wb3J0ICcuL2NvbG9ycyc7XHJcbkBpbXBvcnQgJy4vZWxsaXBzaXMnO1xyXG5cclxuLm91dGxpbmUtY2hhcHRlcnMge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAxO1xyXG4gIG1hcmdpbjogMDtcclxuICB3aWR0aDogdmFyKC0tb3V0bGluZS1jaGFwdGVycy13aWR0aCk7XHJcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcclxuICBvdmVyZmxvdzogYXV0bztcclxuXHJcbiAgJl9fdGl0bGUge1xyXG4gICAgbWFyZ2luOiAwIDE2cHg7XHJcbiAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICBsaW5lLWhlaWdodDogNDBweDtcclxuICAgIHBhZGRpbmc6IDAgMTZweDtcclxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX21haW4ge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19saXN0LFxyXG4gICZfX3N1YmplY3QsXHJcbiAgJl9faXRlbSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiAyO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19saXN0IHtcclxuICAgIHBhZGRpbmc6IDAuNWVtIDA7XHJcbiAgfVxyXG5cclxuICAmX19zdWJqZWN0IHtcclxuICAgIHBhZGRpbmctbGVmdDogMWVtO1xyXG4gIH1cclxuXHJcbiAgJl9faXRlbSB7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBsaW5lLWhlaWdodDogMzBweDtcclxuICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19wbGFjZWhvbGRlciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB6LWluZGV4OiAxO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAzMHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGhvdmVyX2JnX2NvbG9yO1xyXG4gICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBAc3VjY2Vzc19jb2xvcjtcclxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX2FuY2hvciB7XHJcbiAgICAuZWxsaXBzaXMoMSk7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHBhZGRpbmc6IDAgMS41ZW07XHJcblxyXG4gICAgJjpsaW5rLFxyXG4gICAgJjp2aXNpdGVkLFxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgY29sb3I6IEBzZWNvbmRhcnlfdGV4dF9jb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9fY29kZSB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcclxuICB9XHJcblxyXG4gICZfYWN0aXZlIHtcclxuICAgICYub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yIHtcclxuICAgICAgJjpsaW5rLFxyXG4gICAgICAmOnZpc2l0ZWQsXHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuICAgICAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3N0aWNreSxcclxuICAmX2ZpeGVkIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgIC5vdXRsaW5lLWNoYXB0ZXJzIHtcclxuICAgICAgJl9fdGl0bGUsXHJcbiAgICAgICZfX21haW4ge1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfX3RpdGxlIHtcclxuICAgICAgICBmbGV4LXNocmluazogMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9fbWFpbiB7XHJcbiAgICAgICAgZmxleDogMTtcclxuICAgICAgICBvdmVyZmxvdzogYXV0bztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9zdGlja3kge1xyXG4gICAgcG9zaXRpb246IHN0aWNreTtcclxuICAgIG1heC1oZWlnaHQ6IHZhcigtLW91dGxpbmUtc3RpY2t5LWhlaWdodCk7XHJcbiAgfVxyXG5cclxuICAmX2ZpeGVkIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgfVxyXG5cclxuICAmX2hpZGRlbiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gIH1cclxuXHJcbiAgJl9mb2xkZWQge1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgfVxyXG59XHJcbiIsIi8qKlxuICogZWxsaXBzaXMubGVzcyAtIOaWh+acrOecgeeVpSBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4xMVxuICovXG5cbi8qID09PT09PSDmlofmnKznnIHnlaXlh73mlbAgPT09PT09ICovXG4uZWxsaXBzaXMgKEBsaW5lcykgd2hlbiAoQGxpbmVzPTEpIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5lbGxpcHNpcyAoQGxpbmVzKSB3aGVuIChAbGluZXM+PTIpIHtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiBAbGluZXM7XG4gIGRpc3BsYXk6IGJveDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4iXX0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZhcmlhYmxlcy5sZXNzIiwiLi4vLi4vPGlucHV0IGNzcyAyPiIsImNoYXB0ZXJzLmxlc3MiLCJlbGxpcHNpcy5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsdUJBQUE7RUFDQSw4QkFBQTtFQUNBLCtCQUFBO0NDQ0Q7QUFDRCxtREFBbUQ7QUFDbkQ7Ozs7O0dBS0c7QUFDSCwwQkFBMEI7QUNSMUI7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0VBQ0EscUNBQUE7RUFDQSxrQ0FBQTtVQUFBLDBCQUFBO0VBQ0EsZUFBQTtDRFVEO0FDUkM7RUFDRSxlQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQ0FBQTtFQUNBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSxpQkFBQTtDRFVIO0FDUEM7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0VBQ0EsaUJBQUE7Q0RTSDtBQ05DOzs7RUFHRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VBQ0EsaUJBQUE7Q0RRSDtBQ0xDO0VBQ0UsaUJBQUE7Q0RPSDtBQ0pDO0VBQ0Usa0JBQUE7Q0RNSDtBQ0hDO0VBQ0UsVUFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxpQkFBQTtDREtIO0FDRkM7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsMEJBQUE7RUFDQSwrQkFBQTtFQUNBLGtDQUFBO1VBQUEsMEJBQUE7RUFDQSwrQkFBQTtVQUFBLHVCQUFBO0VBQ0EsaUJBQUE7Q0RJSDtBQ0RDO0VDN0RBLG9CQUFBO0VBQ0Esd0JBQUE7RUFDQSxpQkFBQTtFRDZERSxlQUFBO0VBQ0EsaUJBQUE7Q0RLSDtBQ0hHOzs7RUFHRSxzQkFBQTtFQUNBLFlBQUE7Q0RLTDtBQ0ZHO0VBQ0UsZUFBQTtDRElMO0FDQUM7RUFDRSxxQkFBQTtDREVIO0FDR0s7OztFQUdFLGVBQUE7RUFDQSxpQkFBQTtDRERQO0FDTUM7O0VBRUUscUJBQUE7RUFBQSxxQkFBQTtFQUFBLGNBQUE7RUFDQSxzQkFBQTtNQUFBLGtCQUFBO0VBQ0EsNkJBQUE7RUFBQSw4QkFBQTtNQUFBLDJCQUFBO1VBQUEsdUJBQUE7RUFDQSwrQkFBQTtFQUNBLE9BQUE7RUFDQSxpQkFBQTtDREpIO0FDT0s7Ozs7RUFFRSwrQkFBQTtVQUFBLHVCQUFBO0NESFA7QUNNSzs7RUFDRSxxQkFBQTtNQUFBLGVBQUE7Q0RIUDtBQ01LOztFQUNFLG9CQUFBO01BQUEsWUFBQTtVQUFBLFFBQUE7RUFDQSxlQUFBO0NESFA7QUNRQztFQUNFLGlCQUFBO0VBQ0EseUNBQUE7Q0ROSDtBQ1NDO0VBQ0UsZ0JBQUE7RUFDQSxpQkFBQTtDRFBIO0FDVUM7RUFDRSxjQUFBO0NEUkg7QUNXQztFQUNFLFNBQUE7Q0RUSCIsImZpbGUiOiJjaGFwdGVycy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6cm9vdCB7XG4gIC0tb3V0bGluZS16SW5kZXg6IDIwMDA7XG4gIC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0OiAxMDAlO1xuICAtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGg6IDEwMCU7XG59XG4iLCI6cm9vdCB7XG4gIC0tb3V0bGluZS16SW5kZXg6IDIwMDA7XG4gIC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0OiAxMDAlO1xuICAtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGg6IDEwMCU7XG59XG4vKiA9PT09PT09PT09IGNvbG9ycy50aGVtZSAtIOWfuuehgOminOiJsuWPmOmHj+mbhuWQiCA9PT09PT09PT09ICovXG4vKipcbiAqIGVsbGlwc2lzLmxlc3MgLSDmlofmnKznnIHnlaUgbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMTFcbiAqL1xuLyogPT09PT09IOaWh+acrOecgeeVpeWHveaVsCA9PT09PT0gKi9cbi5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiB2YXIoLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoKTtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICBtYXJnaW46IDAgMTZweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBsaW5lLWhlaWdodDogNDBweDtcbiAgcGFkZGluZzogMCAxNnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19saXN0LFxuLm91dGxpbmUtY2hhcHRlcnNfX3N1YmplY3QsXG4ub3V0bGluZS1jaGFwdGVyc19faXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbGlzdCB7XG4gIHBhZGRpbmc6IDAuNWVtIDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fc3ViamVjdCB7XG4gIHBhZGRpbmctbGVmdDogMWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2l0ZW0ge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fcGxhY2Vob2xkZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmOTtcbiAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMDU4OTQyO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMCAxLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjNTU1O1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2NvZGUge1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHotaW5kZXg6IHZhcigtLW91dGxpbmUtekluZGV4KTtcbiAgdG9wOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICBmbGV4LXNocmluazogMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICBtYXgtaGVpZ2h0OiB2YXIoLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQpO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZm9sZGVkIHtcbiAgd2lkdGg6IDA7XG59XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICcuL2NvbG9ycyc7XG5AaW1wb3J0ICcuL2VsbGlwc2lzJztcblxuLm91dGxpbmUtY2hhcHRlcnMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IHZhcigtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGgpO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICBvdmVyZmxvdzogYXV0bztcblxuICAmX190aXRsZSB7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICAgIHBhZGRpbmc6IDAgMTZweDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19tYWluIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBtYXJnaW46IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX2xpc3QsXG4gICZfX3N1YmplY3QsXG4gICZfX2l0ZW0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fbGlzdCB7XG4gICAgcGFkZGluZzogMC41ZW0gMDtcbiAgfVxuXG4gICZfX3N1YmplY3Qge1xuICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICB9XG5cbiAgJl9faXRlbSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fcGxhY2Vob2xkZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMzBweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAaG92ZXJfYmdfY29sb3I7XG4gICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBAc3VjY2Vzc19jb2xvcjtcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX2FuY2hvciB7XG4gICAgLmVsbGlwc2lzKDEpO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMS41ZW07XG5cbiAgICAmOmxpbmssXG4gICAgJjp2aXNpdGVkLFxuICAgICY6aG92ZXIge1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgY29sb3I6IEBzZWNvbmRhcnlfdGV4dF9jb2xvcjtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcbiAgICB9XG4gIH1cblxuICAmX19jb2RlIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcbiAgfVxuXG4gICZfYWN0aXZlIHtcbiAgICAmLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvciB7XG4gICAgICAmOmxpbmssXG4gICAgICAmOnZpc2l0ZWQsXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfc3RpY2t5LFxuICAmX2ZpeGVkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xuICAgIHRvcDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLm91dGxpbmUtY2hhcHRlcnMge1xuICAgICAgJl9fdGl0bGUsXG4gICAgICAmX19tYWluIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIH1cblxuICAgICAgJl9fdGl0bGUge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cblxuICAgICAgJl9fbWFpbiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfc3RpY2t5IHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIG1heC1oZWlnaHQ6IHZhcigtLW91dGxpbmUtc3RpY2t5LWhlaWdodCk7XG4gIH1cblxuICAmX2ZpeGVkIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gICZfaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgJl9mb2xkZWQge1xuICAgIHdpZHRoOiAwO1xuICB9XG59XG4iLCIvKipcbiAqIGVsbGlwc2lzLmxlc3MgLSDmlofmnKznnIHnlaUgbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMTFcbiAqL1xuXG4vKiA9PT09PT0g5paH5pys55yB55Wl5Ye95pWwID09PT09PSAqL1xuLmVsbGlwc2lzIChAbGluZXMpIHdoZW4gKEBsaW5lcz0xKSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZWxsaXBzaXMgKEBsaW5lcykgd2hlbiAoQGxpbmVzPj0yKSB7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogQGxpbmVzO1xuICBkaXNwbGF5OiBib3g7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuIl19 */ diff --git a/chapters.min.css b/chapters.min.css index 5fcc9310..e94bca0f 100644 --- a/chapters.min.css +++ b/chapters.min.css @@ -1,2 +1,2 @@ :root{--outline-zIndex:2000;--outline-sticky-height:100%;--outline-chapters-width:100%}.outline-chapters{position:relative;z-index:1;margin:0;width:var(--outline-chapters-width);-webkit-transition-duration:.3s;transition-duration:.3s;overflow:auto}.outline-chapters__title{margin:0 16px;height:40px;line-height:40px;padding:0 16px;border-bottom:1px solid #dcdfe6;font-size:16px;font-weight:400;overflow:hidden}.outline-chapters__main{position:relative;z-index:1;margin:0;overflow:hidden}.outline-chapters__item,.outline-chapters__list,.outline-chapters__subject{position:relative;z-index:2;margin:0;padding:0;list-style-type:none;overflow:hidden}.outline-chapters__list{padding:.5em 0}.outline-chapters__subject{padding-left:1em}.outline-chapters__item{margin:0;line-height:30px;font-size:13px;overflow:hidden}.outline-chapters__placeholder{position:absolute;z-index:1;top:0;left:0;width:100%;height:30px;background-color:#f7f8f9;border-left:2px solid #058942;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.outline-chapters__anchor{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;padding:0 1.5em}.outline-chapters__anchor:hover,.outline-chapters__anchor:link,.outline-chapters__anchor:visited{text-decoration:none;color:#555}.outline-chapters__anchor:hover{color:#058942}.outline-chapters__code{padding-right:.5em}.outline-chapters_active.outline-chapters__anchor:hover,.outline-chapters_active.outline-chapters__anchor:link,.outline-chapters_active.outline-chapters__anchor:visited{color:#058942;font-weight:400}.outline-chapters_fixed,.outline-chapters_sticky{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;z-index:var(--outline-zIndex);top:0;overflow:hidden}.outline-chapters_fixed .outline-chapters__main,.outline-chapters_fixed .outline-chapters__title,.outline-chapters_sticky .outline-chapters__main,.outline-chapters_sticky .outline-chapters__title{-webkit-box-sizing:border-box;box-sizing:border-box}.outline-chapters_fixed .outline-chapters__title,.outline-chapters_sticky .outline-chapters__title{-ms-flex-negative:0;flex-shrink:0}.outline-chapters_fixed .outline-chapters__main,.outline-chapters_sticky .outline-chapters__main{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.outline-chapters_sticky{position:sticky;max-height:var(--outline-sticky-height)}.outline-chapters_fixed{position:fixed;max-height:100%}.outline-chapters_hidden{display:none}.outline-chapters_folded{width:0} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJjaGFwdGVycy5jc3MiXSwic291cmNlc0NvbnRlbnQiOlsiOnJvb3Qge1xuICAtLW91dGxpbmUtekluZGV4OiAyMDAwO1xuICAtLW91dGxpbmUtc3RpY2t5LWhlaWdodDogMTAwJTtcbiAgLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoOiAxMDAlO1xufVxuLyogPT09PT09PT09PSBjb2xvcnMudGhlbWUgLSDln7rnoYDpopzoibLlj5jph4/pm4blkIggPT09PT09PT09PSAqL1xuLyoqXG4gKiBlbGxpcHNpcy5sZXNzIC0g5paH5pys55yB55WlIG1peGlueCDlh73mlbBcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENyZWF0ZWQgQnk6IFlhb2hhaXhpYW9cbiAqIFVwZGF0ZTogMjAyMi4zLjExXG4gKi9cbi8qID09PT09PSDmlofmnKznnIHnlaXlh73mlbAgPT09PT09ICovXG4ub3V0bGluZS1jaGFwdGVycyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogdmFyKC0tb3V0bGluZS1jaGFwdGVycy13aWR0aCk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSB7XG4gIG1hcmdpbjogMCAxNnB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICBwYWRkaW5nOiAwIDE2cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2xpc3QsXG4ub3V0bGluZS1jaGFwdGVyc19fc3ViamVjdCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19saXN0IHtcbiAgcGFkZGluZzogMC41ZW0gMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19zdWJqZWN0IHtcbiAgcGFkZGluZy1sZWZ0OiAxZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19faXRlbSB7XG4gIG1hcmdpbjogMDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19wbGFjZWhvbGRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAzMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGY5O1xuICBib3JkZXItbGVmdDogMnB4IHNvbGlkICMwNTg5NDI7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3Ige1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMS41ZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzU1NTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19jb2RlIHtcbiAgcGFkZGluZy1yaWdodDogMC41ZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3ksXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xuICB0b3A6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICBtYXgtaGVpZ2h0OiB2YXIoLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQpO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZm9sZGVkIHtcbiAgd2lkdGg6IDA7XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zjg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW5aaGNtbGhZbXhsY3k1c1pYTnpJaXdpTGk0dkxpNHZQR2x1Y0hWMElHTnpjeUF5UGlJc0ltTm9ZWEIwWlhKekxteGxjM01pTENKbGJHeHBjSE5wY3k1c1pYTnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTzBWQlEwVXNkVUpCUVVFN1JVRkRRU3c0UWtGQlFUdEZRVU5CTEN0Q1FVRkJPME5EUTBRN1FVRkRSQ3h0UkVGQmJVUTdRVUZEYmtRN096czdPMGRCUzBjN1FVRkRTQ3d3UWtGQk1FSTdRVU5TTVVJN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc2NVTkJRVUU3UlVGRFFTeHJRMEZCUVR0VlFVRkJMREJDUVVGQk8wVkJRMEVzWlVGQlFUdERSRlZFTzBGRFVrTTdSVUZEUlN4bFFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxHdENRVUZCTzBWQlEwRXNaMEpCUVVFN1JVRkRRU3hwUTBGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFJGVklPMEZEVUVNN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc2FVSkJRVUU3UTBSVFNEdEJRMDVET3pzN1JVRkhSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxITkNRVUZCTzBWQlEwRXNhVUpCUVVFN1EwUlJTRHRCUTB4RE8wVkJRMFVzYVVKQlFVRTdRMFJQU0R0QlEwcERPMFZCUTBVc2EwSkJRVUU3UTBSTlNEdEJRMGhETzBWQlEwVXNWVUZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzWjBKQlFVRTdSVUZEUVN4cFFrRkJRVHREUkV0SU8wRkRSa003UlVGRFJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hQUVVGQk8wVkJRMEVzVVVGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc01FSkJRVUU3UlVGRFFTd3JRa0ZCUVR0RlFVTkJMR3REUVVGQk8xVkJRVUVzTUVKQlFVRTdSVUZEUVN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWQlEwRXNhVUpCUVVFN1EwUkpTRHRCUTBSRE8wVkROMFJCTEc5Q1FVRkJPMFZCUTBFc2QwSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RlJEWkVSU3hsUVVGQk8wVkJRMEVzYVVKQlFVRTdRMFJMU0R0QlEwaEhPenM3UlVGSFJTeHpRa0ZCUVR0RlFVTkJMRmxCUVVFN1EwUkxURHRCUTBaSE8wVkJRMFVzWlVGQlFUdERSRWxNTzBGRFFVTTdSVUZEUlN4eFFrRkJRVHREUkVWSU8wRkRSMHM3T3p0RlFVZEZMR1ZCUVVFN1JVRkRRU3hwUWtGQlFUdERSRVJRTzBGRFRVTTdPMFZCUlVVc2NVSkJRVUU3UlVGQlFTeHhRa0ZCUVR0RlFVRkJMR05CUVVFN1JVRkRRU3h6UWtGQlFUdE5RVUZCTEd0Q1FVRkJPMFZCUTBFc05rSkJRVUU3UlVGQlFTdzRRa0ZCUVR0TlFVRkJMREpDUVVGQk8xVkJRVUVzZFVKQlFVRTdSVUZEUVN3clFrRkJRVHRGUVVOQkxFOUJRVUU3UlVGRFFTeHBRa0ZCUVR0RFJFcElPMEZEVDBzN096czdSVUZGUlN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBORVNGQTdRVU5OU3pzN1JVRkRSU3h4UWtGQlFUdE5RVUZCTEdWQlFVRTdRMFJJVUR0QlEwMUxPenRGUVVORkxHOUNRVUZCTzAxQlFVRXNXVUZCUVR0VlFVRkJMRkZCUVVFN1JVRkRRU3hsUVVGQk8wTkVTRkE3UVVOUlF6dEZRVU5GTEdsQ1FVRkJPMFZCUTBFc2VVTkJRVUU3UTBST1NEdEJRMU5ETzBWQlEwVXNaMEpCUVVFN1JVRkRRU3hwUWtGQlFUdERSRkJJTzBGRFZVTTdSVUZEUlN4alFVRkJPME5FVWtnN1FVTlhRenRGUVVORkxGTkJRVUU3UTBSVVNDSXNJbVpwYkdVaU9pSmphR0Z3ZEdWeWN5NWpjM01pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJNmNtOXZkQ0I3WEhKY2JpQWdMUzF2ZFhSc2FXNWxMWHBKYm1SbGVEb2dNakF3TUR0Y2NseHVJQ0F0TFc5MWRHeHBibVV0YzNScFkydDVMV2hsYVdkb2REb2dNVEF3SlR0Y2NseHVJQ0F0TFc5MWRHeHBibVV0WTJoaGNIUmxjbk10ZDJsa2RHZzZJREV3TUNVN1hISmNibjFjY2x4dUlpd2lPbkp2YjNRZ2UxeHVJQ0F0TFc5MWRHeHBibVV0ZWtsdVpHVjRPaUF5TURBd08xeHVJQ0F0TFc5MWRHeHBibVV0YzNScFkydDVMV2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdMUzF2ZFhSc2FXNWxMV05vWVhCMFpYSnpMWGRwWkhSb09pQXhNREFsTzF4dWZWeHVMeW9nUFQwOVBUMDlQVDA5UFNCamIyeHZjbk11ZEdobGJXVWdMU0Rsbjdybm9ZRHBvcHpvaWJMbGo1anBoNC9wbTRibGtJZ2dQVDA5UFQwOVBUMDlQU0FxTDF4dUx5b3FYRzRnS2lCbGJHeHBjSE5wY3k1c1pYTnpJQzBnNXBhSDVweXM1NXlCNTVXbElHMXBlR2x1ZUNEbGg3M21sYkJjYmlBcUlEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2JpQXFJRU55WldGMFpXUWdRbms2SUZsaGIyaGhhWGhwWVc5Y2JpQXFJRlZ3WkdGMFpUb2dNakF5TWk0ekxqRXhYRzRnS2k5Y2JpOHFJRDA5UFQwOVBTRG1sb2Ztbkt6bm5JSG5sYVhsaDczbWxiQWdQVDA5UFQwOUlDb3ZYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljeUI3WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnZWkxcGJtUmxlRG9nTVR0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1SUNCM2FXUjBhRG9nZG1GeUtDMHRiM1YwYkdsdVpTMWphR0Z3ZEdWeWN5MTNhV1IwYUNrN1hHNGdJSFJ5WVc1emFYUnBiMjR0WkhWeVlYUnBiMjQ2SURBdU0zTTdYRzRnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgzUnBkR3hsSUh0Y2JpQWdiV0Z5WjJsdU9pQXdJREUyY0hnN1hHNGdJR2hsYVdkb2REb2dOREJ3ZUR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURRd2NIZzdYRzRnSUhCaFpHUnBibWM2SURBZ01UWndlRHRjYmlBZ1ltOXlaR1Z5TFdKdmRIUnZiVG9nTVhCNElITnZiR2xrSUNOa1kyUm1aVFk3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVFp3ZUR0Y2JpQWdabTl1ZEMxM1pXbG5hSFE2SURRd01EdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOXRZV2x1SUh0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0J0WVhKbmFXNDZJREE3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmYkdsemRDeGNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTl6ZFdKcVpXTjBMRnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDJsMFpXMGdlMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREk3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnY0dGa1pHbHVaem9nTUR0Y2JpQWdiR2x6ZEMxemRIbHNaUzEwZVhCbE9pQnViMjVsTzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDJ4cGMzUWdlMXh1SUNCd1lXUmthVzVuT2lBd0xqVmxiU0F3TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYM04xWW1wbFkzUWdlMXh1SUNCd1lXUmthVzVuTFd4bFpuUTZJREZsYlR0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTlwZEdWdElIdGNiaUFnYldGeVoybHVPaUF3TzF4dUlDQnNhVzVsTFdobGFXZG9kRG9nTXpCd2VEdGNiaUFnWm05dWRDMXphWHBsT2lBeE0zQjRPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYM0JzWVdObGFHOXNaR1Z5SUh0Y2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0IwYjNBNklEQTdYRzRnSUd4bFpuUTZJREE3WEc0Z0lIZHBaSFJvT2lBeE1EQWxPMXh1SUNCb1pXbG5hSFE2SURNd2NIZzdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObU4yWTRaams3WEc0Z0lHSnZjbVJsY2kxc1pXWjBPaUF5Y0hnZ2MyOXNhV1FnSXpBMU9EazBNanRjYmlBZ2RISmhibk5wZEdsdmJpMWtkWEpoZEdsdmJqb2dNQzR5Y3p0Y2JpQWdZbTk0TFhOcGVtbHVaem9nWW05eVpHVnlMV0p2ZUR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5aGJtTm9iM0lnZTF4dUlDQjNhR2wwWlMxemNHRmpaVG9nYm05M2NtRndPMXh1SUNCMFpYaDBMVzkyWlhKbWJHOTNPaUJsYkd4cGNITnBjenRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JpQWdaR2x6Y0d4aGVUb2dZbXh2WTJzN1hHNGdJSEJoWkdScGJtYzZJREFnTVM0MVpXMDdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZllXNWphRzl5T214cGJtc3NYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmWVc1amFHOXlPblpwYzJsMFpXUXNYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmWVc1amFHOXlPbWh2ZG1WeUlIdGNiaUFnZEdWNGRDMWtaV052Y21GMGFXOXVPaUJ1YjI1bE8xeHVJQ0JqYjJ4dmNqb2dJelUxTlR0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSTZhRzkyWlhJZ2UxeHVJQ0JqYjJ4dmNqb2dJekExT0RrME1qdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5amIyUmxJSHRjYmlBZ2NHRmtaR2x1WnkxeWFXZG9kRG9nTUM0MVpXMDdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5aFkzUnBkbVV1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmWVc1amFHOXlPbXhwYm1zc1hHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWhZM1JwZG1VdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZllXNWphRzl5T25acGMybDBaV1FzWEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5aFkzUnBkbVV1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmWVc1amFHOXlPbWh2ZG1WeUlIdGNiaUFnWTI5c2IzSTZJQ013TlRnNU5ESTdYRzRnSUdadmJuUXRkMlZwWjJoME9pQTBNREE3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOXpkR2xqYTNrc1hHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOW1hWGhsWkNCN1hHNGdJR1JwYzNCc1lYazZJR1pzWlhnN1hHNGdJR1pzWlhndGQzSmhjRG9nYm05M2NtRndPMXh1SUNCbWJHVjRMV1JwY21WamRHbHZiam9nWTI5c2RXMXVPMXh1SUNCNkxXbHVaR1Y0T2lCMllYSW9MUzF2ZFhSc2FXNWxMWHBKYm1SbGVDazdYRzRnSUhSdmNEb2dNRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYM04wYVdOcmVTQXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZkR2wwYkdVc1hHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOW1hWGhsWkNBdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmRHbDBiR1VzWEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5emRHbGphM2tnTG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDIxaGFXNHNYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTltYVhobFpDQXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZiV0ZwYmlCN1hHNGdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hHNTlYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTl6ZEdsamEza2dMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYM1JwZEd4bExGeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZabWw0WldRZ0xtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgzUnBkR3hsSUh0Y2JpQWdabXhsZUMxemFISnBibXM2SURBN1hHNTlYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTl6ZEdsamEza2dMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMjFoYVc0c1hHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOW1hWGhsWkNBdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmJXRnBiaUI3WEc0Z0lHWnNaWGc2SURFN1hHNGdJRzkyWlhKbWJHOTNPaUJoZFhSdk8xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mYzNScFkydDVJSHRjYmlBZ2NHOXphWFJwYjI0NklITjBhV05yZVR0Y2JpQWdiV0Y0TFdobGFXZG9kRG9nZG1GeUtDMHRiM1YwYkdsdVpTMXpkR2xqYTNrdGFHVnBaMmgwS1R0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMlpwZUdWa0lIdGNiaUFnY0c5emFYUnBiMjQ2SUdacGVHVmtPMXh1SUNCdFlYZ3RhR1ZwWjJoME9pQXhNREFsTzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZhR2xrWkdWdUlIdGNiaUFnWkdsemNHeGhlVG9nYm05dVpUdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJadmJHUmxaQ0I3WEc0Z0lIZHBaSFJvT2lBd08xeHVmVnh1SWl3aVFHbHRjRzl5ZENBbkxpOTJZWEpwWVdKc1pYTW5PMXh5WEc1QWFXMXdiM0owSUNjdUwyTnZiRzl5Y3ljN1hISmNia0JwYlhCdmNuUWdKeTR2Wld4c2FYQnphWE1uTzF4eVhHNWNjbHh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk1nZTF4eVhHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjY2x4dUlDQjZMV2x1WkdWNE9pQXhPMXh5WEc0Z0lHMWhjbWRwYmpvZ01EdGNjbHh1SUNCM2FXUjBhRG9nZG1GeUtDMHRiM1YwYkdsdVpTMWphR0Z3ZEdWeWN5MTNhV1IwYUNrN1hISmNiaUFnZEhKaGJuTnBkR2x2Ymkxa2RYSmhkR2x2YmpvZ01DNHpjenRjY2x4dUlDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2NseHVYSEpjYmlBZ0psOWZkR2wwYkdVZ2UxeHlYRzRnSUNBZ2JXRnlaMmx1T2lBd0lERTJjSGc3WEhKY2JpQWdJQ0JvWldsbmFIUTZJRFF3Y0hnN1hISmNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dOREJ3ZUR0Y2NseHVJQ0FnSUhCaFpHUnBibWM2SURBZ01UWndlRHRjY2x4dUlDQWdJR0p2Y21SbGNpMWliM1IwYjIwNklERndlQ0J6YjJ4cFpDQkFjSEpwYldGeWVWOWliM0prWlhKZlkyOXNiM0k3WEhKY2JpQWdJQ0JtYjI1MExYTnBlbVU2SURFMmNIZzdYSEpjYmlBZ0lDQm1iMjUwTFhkbGFXZG9kRG9nTkRBd08xeHlYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyMWhhVzRnZTF4eVhHNGdJQ0FnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4eVhHNGdJQ0FnZWkxcGJtUmxlRG9nTVR0Y2NseHVJQ0FnSUcxaGNtZHBiam9nTUR0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5c2FYTjBMRnh5WEc0Z0lDWmZYM04xWW1wbFkzUXNYSEpjYmlBZ0psOWZhWFJsYlNCN1hISmNiaUFnSUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hISmNiaUFnSUNCNkxXbHVaR1Y0T2lBeU8xeHlYRzRnSUNBZ2JXRnlaMmx1T2lBd08xeHlYRzRnSUNBZ2NHRmtaR2x1WnpvZ01EdGNjbHh1SUNBZ0lHeHBjM1F0YzNSNWJHVXRkSGx3WlRvZ2JtOXVaVHRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTlzYVhOMElIdGNjbHh1SUNBZ0lIQmhaR1JwYm1jNklEQXVOV1Z0SURBN1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOXpkV0pxWldOMElIdGNjbHh1SUNBZ0lIQmhaR1JwYm1jdGJHVm1kRG9nTVdWdE8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZhWFJsYlNCN1hISmNiaUFnSUNCdFlYSm5hVzQ2SURBN1hISmNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dNekJ3ZUR0Y2NseHVJQ0FnSUdadmJuUXRjMmw2WlRvZ01UTndlRHRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTl3YkdGalpXaHZiR1JsY2lCN1hISmNiaUFnSUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hISmNiaUFnSUNCNkxXbHVaR1Y0T2lBeE8xeHlYRzRnSUNBZ2RHOXdPaUF3TzF4eVhHNGdJQ0FnYkdWbWREb2dNRHRjY2x4dUlDQWdJSGRwWkhSb09pQXhNREFsTzF4eVhHNGdJQ0FnYUdWcFoyaDBPaUF6TUhCNE8xeHlYRzRnSUNBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FHaHZkbVZ5WDJKblgyTnZiRzl5TzF4eVhHNGdJQ0FnWW05eVpHVnlMV3hsWm5RNklESndlQ0J6YjJ4cFpDQkFjM1ZqWTJWemMxOWpiMnh2Y2p0Y2NseHVJQ0FnSUhSeVlXNXphWFJwYjI0dFpIVnlZWFJwYjI0NklEQXVNbk03WEhKY2JpQWdJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHlYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyRnVZMmh2Y2lCN1hISmNiaUFnSUNBdVpXeHNhWEJ6YVhNb01TazdYSEpjYmlBZ0lDQmthWE53YkdGNU9pQmliRzlqYXp0Y2NseHVJQ0FnSUhCaFpHUnBibWM2SURBZ01TNDFaVzA3WEhKY2JseHlYRzRnSUNBZ0pqcHNhVzVyTEZ4eVhHNGdJQ0FnSmpwMmFYTnBkR1ZrTEZ4eVhHNGdJQ0FnSmpwb2IzWmxjaUI3WEhKY2JpQWdJQ0FnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUdGNjbHh1SUNBZ0lDQWdZMjlzYjNJNklFQnpaV052Ym1SaGNubGZkR1Y0ZEY5amIyeHZjanRjY2x4dUlDQWdJSDFjY2x4dVhISmNiaUFnSUNBbU9taHZkbVZ5SUh0Y2NseHVJQ0FnSUNBZ1kyOXNiM0k2SUVCemRXTmpaWE56WDJOdmJHOXlPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmWTI5a1pTQjdYSEpjYmlBZ0lDQndZV1JrYVc1bkxYSnBaMmgwT2lBd0xqVmxiVHRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWVdOMGFYWmxJSHRjY2x4dUlDQWdJQ1l1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmWVc1amFHOXlJSHRjY2x4dUlDQWdJQ0FnSmpwc2FXNXJMRnh5WEc0Z0lDQWdJQ0FtT25acGMybDBaV1FzWEhKY2JpQWdJQ0FnSUNZNmFHOTJaWElnZTF4eVhHNGdJQ0FnSUNBZ0lHTnZiRzl5T2lCQWMzVmpZMlZ6YzE5amIyeHZjanRjY2x4dUlDQWdJQ0FnSUNCbWIyNTBMWGRsYVdkb2REb2dOREF3TzF4eVhHNGdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgzTjBhV05yZVN4Y2NseHVJQ0FtWDJacGVHVmtJSHRjY2x4dUlDQWdJR1JwYzNCc1lYazZJR1pzWlhnN1hISmNiaUFnSUNCbWJHVjRMWGR5WVhBNklHNXZkM0poY0R0Y2NseHVJQ0FnSUdac1pYZ3RaR2x5WldOMGFXOXVPaUJqYjJ4MWJXNDdYSEpjYmlBZ0lDQjZMV2x1WkdWNE9pQjJZWElvTFMxdmRYUnNhVzVsTFhwSmJtUmxlQ2s3WEhKY2JpQWdJQ0IwYjNBNklEQTdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzVjY2x4dUlDQWdJQzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpJSHRjY2x4dUlDQWdJQ0FnSmw5ZmRHbDBiR1VzWEhKY2JpQWdJQ0FnSUNaZlgyMWhhVzRnZTF4eVhHNGdJQ0FnSUNBZ0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmWDNScGRHeGxJSHRjY2x4dUlDQWdJQ0FnSUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDlmYldGcGJpQjdYSEpjYmlBZ0lDQWdJQ0FnWm14bGVEb2dNVHRjY2x4dUlDQWdJQ0FnSUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjY2x4dUlDQWdJQ0FnZlZ4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5emRHbGphM2tnZTF4eVhHNGdJQ0FnY0c5emFYUnBiMjQ2SUhOMGFXTnJlVHRjY2x4dUlDQWdJRzFoZUMxb1pXbG5hSFE2SUhaaGNpZ3RMVzkxZEd4cGJtVXRjM1JwWTJ0NUxXaGxhV2RvZENrN1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgyWnBlR1ZrSUh0Y2NseHVJQ0FnSUhCdmMybDBhVzl1T2lCbWFYaGxaRHRjY2x4dUlDQWdJRzFoZUMxb1pXbG5hSFE2SURFd01DVTdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMmhwWkdSbGJpQjdYSEpjYmlBZ0lDQmthWE53YkdGNU9pQnViMjVsTzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5bWIyeGtaV1FnZTF4eVhHNGdJQ0FnZDJsa2RHZzZJREE3WEhKY2JpQWdmVnh5WEc1OVhISmNiaUlzSWk4cUtseHVJQ29nWld4c2FYQnphWE11YkdWemN5QXRJT2FXaCthY3JPZWNnZWVWcFNCdGFYaHBibmdnNVllOTVwV3dYRzRnS2lBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0Z0tpQkRjbVZoZEdWa0lFSjVPaUJaWVc5b1lXbDRhV0Z2WEc0Z0tpQlZjR1JoZEdVNklESXdNakl1TXk0eE1WeHVJQ292WEc1Y2JpOHFJRDA5UFQwOVBTRG1sb2Ztbkt6bm5JSG5sYVhsaDczbWxiQWdQVDA5UFQwOUlDb3ZYRzR1Wld4c2FYQnphWE1nS0VCc2FXNWxjeWtnZDJobGJpQW9RR3hwYm1WelBURXBJSHRjYmlBZ2QyaHBkR1V0YzNCaFkyVTZJRzV2ZDNKaGNEdGNiaUFnZEdWNGRDMXZkbVZ5Wm14dmR6b2daV3hzYVhCemFYTTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNWNiaTVsYkd4cGNITnBjeUFvUUd4cGJtVnpLU0IzYUdWdUlDaEFiR2x1WlhNK1BUSXBJSHRjYmlBZ0xYZGxZbXRwZEMxc2FXNWxMV05zWVcxd09pQkFiR2x1WlhNN1hHNGdJR1JwYzNCc1lYazZJR0p2ZUR0Y2JpQWdMWGRsWW10cGRDMWliM2d0YjNKcFpXNTBPaUIyWlhKMGFXTmhiRHRjYmlBZ2RHVjRkQzF2ZG1WeVpteHZkem9nWld4c2FYQnphWE03WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzRpWFgwPSAqL1xuIl0sImZpbGUiOiJjaGFwdGVycy5taW4uY3NzIn0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJjaGFwdGVycy5jc3MiXSwic291cmNlc0NvbnRlbnQiOlsiOnJvb3Qge1xuICAtLW91dGxpbmUtekluZGV4OiAyMDAwO1xuICAtLW91dGxpbmUtc3RpY2t5LWhlaWdodDogMTAwJTtcbiAgLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoOiAxMDAlO1xufVxuLyogPT09PT09PT09PSBjb2xvcnMudGhlbWUgLSDln7rnoYDpopzoibLlj5jph4/pm4blkIggPT09PT09PT09PSAqL1xuLyoqXG4gKiBlbGxpcHNpcy5sZXNzIC0g5paH5pys55yB55WlIG1peGlueCDlh73mlbBcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENyZWF0ZWQgQnk6IFlhb2hhaXhpYW9cbiAqIFVwZGF0ZTogMjAyMi4zLjExXG4gKi9cbi8qID09PT09PSDmlofmnKznnIHnlaXlh73mlbAgPT09PT09ICovXG4ub3V0bGluZS1jaGFwdGVycyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogdmFyKC0tb3V0bGluZS1jaGFwdGVycy13aWR0aCk7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSB7XG4gIG1hcmdpbjogMCAxNnB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICBwYWRkaW5nOiAwIDE2cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2xpc3QsXG4ub3V0bGluZS1jaGFwdGVyc19fc3ViamVjdCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19saXN0IHtcbiAgcGFkZGluZzogMC41ZW0gMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19zdWJqZWN0IHtcbiAgcGFkZGluZy1sZWZ0OiAxZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19faXRlbSB7XG4gIG1hcmdpbjogMDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19wbGFjZWhvbGRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAzMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGY5O1xuICBib3JkZXItbGVmdDogMnB4IHNvbGlkICMwNTg5NDI7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3Ige1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMS41ZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzU1NTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19jb2RlIHtcbiAgcGFkZGluZy1yaWdodDogMC41ZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3ksXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xuICB0b3A6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICBtYXgtaGVpZ2h0OiB2YXIoLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQpO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZm9sZGVkIHtcbiAgd2lkdGg6IDA7XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zjg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW5aaGNtbGhZbXhsY3k1c1pYTnpJaXdpTGk0dkxpNHZQR2x1Y0hWMElHTnpjeUF5UGlJc0ltTm9ZWEIwWlhKekxteGxjM01pTENKbGJHeHBjSE5wY3k1c1pYTnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTzBWQlEwVXNkVUpCUVVFN1JVRkRRU3c0UWtGQlFUdEZRVU5CTEN0Q1FVRkJPME5EUTBRN1FVRkRSQ3h0UkVGQmJVUTdRVUZEYmtRN096czdPMGRCUzBjN1FVRkRTQ3d3UWtGQk1FSTdRVU5TTVVJN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc2NVTkJRVUU3UlVGRFFTeHJRMEZCUVR0VlFVRkJMREJDUVVGQk8wVkJRMEVzWlVGQlFUdERSRlZFTzBGRFVrTTdSVUZEUlN4bFFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxHdENRVUZCTzBWQlEwRXNaMEpCUVVFN1JVRkRRU3hwUTBGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFJGVklPMEZEVUVNN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc2FVSkJRVUU3UTBSVFNEdEJRMDVET3pzN1JVRkhSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxITkNRVUZCTzBWQlEwRXNhVUpCUVVFN1EwUlJTRHRCUTB4RE8wVkJRMFVzYVVKQlFVRTdRMFJQU0R0QlEwcERPMFZCUTBVc2EwSkJRVUU3UTBSTlNEdEJRMGhETzBWQlEwVXNWVUZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzWjBKQlFVRTdSVUZEUVN4cFFrRkJRVHREUkV0SU8wRkRSa003UlVGRFJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hQUVVGQk8wVkJRMEVzVVVGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc01FSkJRVUU3UlVGRFFTd3JRa0ZCUVR0RlFVTkJMR3REUVVGQk8xVkJRVUVzTUVKQlFVRTdSVUZEUVN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWQlEwRXNhVUpCUVVFN1EwUkpTRHRCUTBSRE8wVkROMFJCTEc5Q1FVRkJPMFZCUTBFc2QwSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RlJEWkVSU3hsUVVGQk8wVkJRMEVzYVVKQlFVRTdRMFJMU0R0QlEwaEhPenM3UlVGSFJTeHpRa0ZCUVR0RlFVTkJMRmxCUVVFN1EwUkxURHRCUTBaSE8wVkJRMFVzWlVGQlFUdERSRWxNTzBGRFFVTTdSVUZEUlN4eFFrRkJRVHREUkVWSU8wRkRSMHM3T3p0RlFVZEZMR1ZCUVVFN1JVRkRRU3hwUWtGQlFUdERSRVJRTzBGRFRVTTdPMFZCUlVVc2NVSkJRVUU3UlVGQlFTeHhRa0ZCUVR0RlFVRkJMR05CUVVFN1JVRkRRU3h6UWtGQlFUdE5RVUZCTEd0Q1FVRkJPMFZCUTBFc05rSkJRVUU3UlVGQlFTdzRRa0ZCUVR0TlFVRkJMREpDUVVGQk8xVkJRVUVzZFVKQlFVRTdSVUZEUVN3clFrRkJRVHRGUVVOQkxFOUJRVUU3UlVGRFFTeHBRa0ZCUVR0RFJFcElPMEZEVDBzN096czdSVUZGUlN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBORVNGQTdRVU5OU3pzN1JVRkRSU3h4UWtGQlFUdE5RVUZCTEdWQlFVRTdRMFJJVUR0QlEwMUxPenRGUVVORkxHOUNRVUZCTzAxQlFVRXNXVUZCUVR0VlFVRkJMRkZCUVVFN1JVRkRRU3hsUVVGQk8wTkVTRkE3UVVOUlF6dEZRVU5GTEdsQ1FVRkJPMFZCUTBFc2VVTkJRVUU3UTBST1NEdEJRMU5ETzBWQlEwVXNaMEpCUVVFN1JVRkRRU3hwUWtGQlFUdERSRkJJTzBGRFZVTTdSVUZEUlN4alFVRkJPME5FVWtnN1FVTlhRenRGUVVORkxGTkJRVUU3UTBSVVNDSXNJbVpwYkdVaU9pSmphR0Z3ZEdWeWN5NWpjM01pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJNmNtOXZkQ0I3WEc0Z0lDMHRiM1YwYkdsdVpTMTZTVzVrWlhnNklESXdNREE3WEc0Z0lDMHRiM1YwYkdsdVpTMXpkR2xqYTNrdGFHVnBaMmgwT2lBeE1EQWxPMXh1SUNBdExXOTFkR3hwYm1VdFkyaGhjSFJsY25NdGQybGtkR2c2SURFd01DVTdYRzU5WEc0aUxDSTZjbTl2ZENCN1hHNGdJQzB0YjNWMGJHbHVaUzE2U1c1a1pYZzZJREl3TURBN1hHNGdJQzB0YjNWMGJHbHVaUzF6ZEdsamEza3RhR1ZwWjJoME9pQXhNREFsTzF4dUlDQXRMVzkxZEd4cGJtVXRZMmhoY0hSbGNuTXRkMmxrZEdnNklERXdNQ1U3WEc1OVhHNHZLaUE5UFQwOVBUMDlQVDA5SUdOdmJHOXljeTUwYUdWdFpTQXRJT1dmdXVlaGdPbWluT2lKc3VXUG1PbUhqK21iaHVXUWlDQTlQVDA5UFQwOVBUMDlJQ292WEc0dktpcGNiaUFxSUdWc2JHbHdjMmx6TG14bGMzTWdMU0RtbG9mbW5Lem5uSUhubGFVZ2JXbDRhVzU0SU9XSHZlYVZzRnh1SUNvZ1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUlDb2dRM0psWVhSbFpDQkNlVG9nV1dGdmFHRnBlR2xoYjF4dUlDb2dWWEJrWVhSbE9pQXlNREl5TGpNdU1URmNiaUFxTDF4dUx5b2dQVDA5UFQwOUlPYVdoK2Fjck9lY2dlZVZwZVdIdmVhVnNDQTlQVDA5UFQwZ0tpOWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpJSHRjYmlBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHVJQ0I2TFdsdVpHVjRPaUF4TzF4dUlDQnRZWEpuYVc0NklEQTdYRzRnSUhkcFpIUm9PaUIyWVhJb0xTMXZkWFJzYVc1bExXTm9ZWEIwWlhKekxYZHBaSFJvS1R0Y2JpQWdkSEpoYm5OcGRHbHZiaTFrZFhKaGRHbHZiam9nTUM0emN6dGNiaUFnYjNabGNtWnNiM2M2SUdGMWRHODdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmRHbDBiR1VnZTF4dUlDQnRZWEpuYVc0NklEQWdNVFp3ZUR0Y2JpQWdhR1ZwWjJoME9pQTBNSEI0TzF4dUlDQnNhVzVsTFdobGFXZG9kRG9nTkRCd2VEdGNiaUFnY0dGa1pHbHVaem9nTUNBeE5uQjRPMXh1SUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnSTJSalpHWmxOanRjYmlBZ1ptOXVkQzF6YVhwbE9pQXhObkI0TzF4dUlDQm1iMjUwTFhkbGFXZG9kRG9nTkRBd08xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyMWhhVzRnZTF4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUhvdGFXNWtaWGc2SURFN1hHNGdJRzFoY21kcGJqb2dNRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTlzYVhOMExGeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYM04xWW1wbFkzUXNYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmYVhSbGJTQjdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNanRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0J3WVdSa2FXNW5PaUF3TzF4dUlDQnNhWE4wTFhOMGVXeGxMWFI1Y0dVNklHNXZibVU3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmYkdsemRDQjdYRzRnSUhCaFpHUnBibWM2SURBdU5XVnRJREE3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZjM1ZpYW1WamRDQjdYRzRnSUhCaFpHUnBibWN0YkdWbWREb2dNV1Z0TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMmwwWlcwZ2UxeHVJQ0J0WVhKbmFXNDZJREE3WEc0Z0lHeHBibVV0YUdWcFoyaDBPaUF6TUhCNE8xeHVJQ0JtYjI1MExYTnBlbVU2SURFemNIZzdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZjR3hoWTJWb2IyeGtaWElnZTF4dUlDQndiM05wZEdsdmJqb2dZV0p6YjJ4MWRHVTdYRzRnSUhvdGFXNWtaWGc2SURFN1hHNGdJSFJ2Y0RvZ01EdGNiaUFnYkdWbWREb2dNRHRjYmlBZ2QybGtkR2c2SURFd01DVTdYRzRnSUdobGFXZG9kRG9nTXpCd2VEdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJZM1pqaG1PVHRjYmlBZ1ltOXlaR1Z5TFd4bFpuUTZJREp3ZUNCemIyeHBaQ0FqTURVNE9UUXlPMXh1SUNCMGNtRnVjMmwwYVc5dUxXUjFjbUYwYVc5dU9pQXdMakp6TzF4dUlDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDJGdVkyaHZjaUI3WEc0Z0lIZG9hWFJsTFhOd1lXTmxPaUJ1YjNkeVlYQTdYRzRnSUhSbGVIUXRiM1psY21ac2IzYzZJR1ZzYkdsd2MybHpPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQmthWE53YkdGNU9pQmliRzlqYXp0Y2JpQWdjR0ZrWkdsdVp6b2dNQ0F4TGpWbGJUdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5aGJtTm9iM0k2YkdsdWF5eGNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSTZkbWx6YVhSbFpDeGNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSTZhRzkyWlhJZ2UxeHVJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hHNGdJR052Ykc5eU9pQWpOVFUxTzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMkZ1WTJodmNqcG9iM1psY2lCN1hHNGdJR052Ykc5eU9pQWpNRFU0T1RReU8xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDJOdlpHVWdlMXh1SUNCd1lXUmthVzVuTFhKcFoyaDBPaUF3TGpWbGJUdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJGamRHbDJaUzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSTZiR2x1YXl4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgyRmpkR2wyWlM1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5aGJtTm9iM0k2ZG1semFYUmxaQ3hjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJGamRHbDJaUzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSTZhRzkyWlhJZ2UxeHVJQ0JqYjJ4dmNqb2dJekExT0RrME1qdGNiaUFnWm05dWRDMTNaV2xuYUhRNklEUXdNRHRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgzTjBhV05yZVN4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgyWnBlR1ZrSUh0Y2JpQWdaR2x6Y0d4aGVUb2dabXhsZUR0Y2JpQWdabXhsZUMxM2NtRndPaUJ1YjNkeVlYQTdYRzRnSUdac1pYZ3RaR2x5WldOMGFXOXVPaUJqYjJ4MWJXNDdYRzRnSUhvdGFXNWtaWGc2SUhaaGNpZ3RMVzkxZEd4cGJtVXRla2x1WkdWNEtUdGNiaUFnZEc5d09pQXdPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZjM1JwWTJ0NUlDNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOTBhWFJzWlN4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgyWnBlR1ZrSUM1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5MGFYUnNaU3hjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDNOMGFXTnJlU0F1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmYldGcGJpeGNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMlpwZUdWa0lDNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOXRZV2x1SUh0Y2JpQWdZbTk0TFhOcGVtbHVaem9nWW05eVpHVnlMV0p2ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYM04wYVdOcmVTQXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZkR2wwYkdVc1hHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOW1hWGhsWkNBdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmRHbDBiR1VnZTF4dUlDQm1iR1Y0TFhOb2NtbHVhem9nTUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYM04wYVdOcmVTQXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZiV0ZwYml4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgyWnBlR1ZrSUM1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5dFlXbHVJSHRjYmlBZ1pteGxlRG9nTVR0Y2JpQWdiM1psY21ac2IzYzZJR0YxZEc4N1hHNTlYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTl6ZEdsamEza2dlMXh1SUNCd2IzTnBkR2x2YmpvZ2MzUnBZMnQ1TzF4dUlDQnRZWGd0YUdWcFoyaDBPaUIyWVhJb0xTMXZkWFJzYVc1bExYTjBhV05yZVMxb1pXbG5hSFFwTzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZabWw0WldRZ2UxeHVJQ0J3YjNOcGRHbHZiam9nWm1sNFpXUTdYRzRnSUcxaGVDMW9aV2xuYUhRNklERXdNQ1U3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOW9hV1JrWlc0Z2UxeHVJQ0JrYVhOd2JHRjVPaUJ1YjI1bE8xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWm05c1pHVmtJSHRjYmlBZ2QybGtkR2c2SURBN1hHNTlYRzRpTENKQWFXMXdiM0owSUNjdUwzWmhjbWxoWW14bGN5YzdYRzVBYVcxd2IzSjBJQ2N1TDJOdmJHOXljeWM3WEc1QWFXMXdiM0owSUNjdUwyVnNiR2x3YzJsekp6dGNibHh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk1nZTF4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUhvdGFXNWtaWGc2SURFN1hHNGdJRzFoY21kcGJqb2dNRHRjYmlBZ2QybGtkR2c2SUhaaGNpZ3RMVzkxZEd4cGJtVXRZMmhoY0hSbGNuTXRkMmxrZEdncE8xeHVJQ0IwY21GdWMybDBhVzl1TFdSMWNtRjBhVzl1T2lBd0xqTnpPMXh1SUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjYmx4dUlDQW1YMTkwYVhSc1pTQjdYRzRnSUNBZ2JXRnlaMmx1T2lBd0lERTJjSGc3WEc0Z0lDQWdhR1ZwWjJoME9pQTBNSEI0TzF4dUlDQWdJR3hwYm1VdGFHVnBaMmgwT2lBME1IQjRPMXh1SUNBZ0lIQmhaR1JwYm1jNklEQWdNVFp3ZUR0Y2JpQWdJQ0JpYjNKa1pYSXRZbTkwZEc5dE9pQXhjSGdnYzI5c2FXUWdRSEJ5YVcxaGNubGZZbTl5WkdWeVgyTnZiRzl5TzF4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVRad2VEdGNiaUFnSUNCbWIyNTBMWGRsYVdkb2REb2dOREF3TzF4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzRnSUgxY2JseHVJQ0FtWDE5dFlXbHVJSHRjYmlBZ0lDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUNBZ2VpMXBibVJsZURvZ01UdGNiaUFnSUNCdFlYSm5hVzQ2SURBN1hHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYmlBZ2ZWeHVYRzRnSUNaZlgyeHBjM1FzWEc0Z0lDWmZYM04xWW1wbFkzUXNYRzRnSUNaZlgybDBaVzBnZTF4dUlDQWdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ0lDQjZMV2x1WkdWNE9pQXlPMXh1SUNBZ0lHMWhjbWRwYmpvZ01EdGNiaUFnSUNCd1lXUmthVzVuT2lBd08xeHVJQ0FnSUd4cGMzUXRjM1I1YkdVdGRIbHdaVG9nYm05dVpUdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQjlYRzVjYmlBZ0psOWZiR2x6ZENCN1hHNGdJQ0FnY0dGa1pHbHVaem9nTUM0MVpXMGdNRHRjYmlBZ2ZWeHVYRzRnSUNaZlgzTjFZbXBsWTNRZ2UxeHVJQ0FnSUhCaFpHUnBibWN0YkdWbWREb2dNV1Z0TzF4dUlDQjlYRzVjYmlBZ0psOWZhWFJsYlNCN1hHNGdJQ0FnYldGeVoybHVPaUF3TzF4dUlDQWdJR3hwYm1VdGFHVnBaMmgwT2lBek1IQjRPMXh1SUNBZ0lHWnZiblF0YzJsNlpUb2dNVE53ZUR0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1SUNCOVhHNWNiaUFnSmw5ZmNHeGhZMlZvYjJ4a1pYSWdlMXh1SUNBZ0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnSUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0FnSUhSdmNEb2dNRHRjYmlBZ0lDQnNaV1owT2lBd08xeHVJQ0FnSUhkcFpIUm9PaUF4TURBbE8xeHVJQ0FnSUdobGFXZG9kRG9nTXpCd2VEdGNiaUFnSUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCQWFHOTJaWEpmWW1kZlkyOXNiM0k3WEc0Z0lDQWdZbTl5WkdWeUxXeGxablE2SURKd2VDQnpiMnhwWkNCQWMzVmpZMlZ6YzE5amIyeHZjanRjYmlBZ0lDQjBjbUZ1YzJsMGFXOXVMV1IxY21GMGFXOXVPaUF3TGpKek8xeHVJQ0FnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JpQWdmVnh1WEc0Z0lDWmZYMkZ1WTJodmNpQjdYRzRnSUNBZ0xtVnNiR2x3YzJsektERXBPMXh1SUNBZ0lHUnBjM0JzWVhrNklHSnNiMk5yTzF4dUlDQWdJSEJoWkdScGJtYzZJREFnTVM0MVpXMDdYRzVjYmlBZ0lDQW1PbXhwYm1zc1hHNGdJQ0FnSmpwMmFYTnBkR1ZrTEZ4dUlDQWdJQ1k2YUc5MlpYSWdlMXh1SUNBZ0lDQWdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQnViMjVsTzF4dUlDQWdJQ0FnWTI5c2IzSTZJRUJ6WldOdmJtUmhjbmxmZEdWNGRGOWpiMnh2Y2p0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0FtT21odmRtVnlJSHRjYmlBZ0lDQWdJR052Ykc5eU9pQkFjM1ZqWTJWemMxOWpiMnh2Y2p0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgxOWpiMlJsSUh0Y2JpQWdJQ0J3WVdSa2FXNW5MWEpwWjJoME9pQXdMalZsYlR0Y2JpQWdmVnh1WEc0Z0lDWmZZV04wYVhabElIdGNiaUFnSUNBbUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyRnVZMmh2Y2lCN1hHNGdJQ0FnSUNBbU9teHBibXNzWEc0Z0lDQWdJQ0FtT25acGMybDBaV1FzWEc0Z0lDQWdJQ0FtT21odmRtVnlJSHRjYmlBZ0lDQWdJQ0FnWTI5c2IzSTZJRUJ6ZFdOalpYTnpYMk52Ykc5eU8xeHVJQ0FnSUNBZ0lDQm1iMjUwTFhkbGFXZG9kRG9nTkRBd08xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDWmZjM1JwWTJ0NUxGeHVJQ0FtWDJacGVHVmtJSHRjYmlBZ0lDQmthWE53YkdGNU9pQm1iR1Y0TzF4dUlDQWdJR1pzWlhndGQzSmhjRG9nYm05M2NtRndPMXh1SUNBZ0lHWnNaWGd0WkdseVpXTjBhVzl1T2lCamIyeDFiVzQ3WEc0Z0lDQWdlaTFwYm1SbGVEb2dkbUZ5S0MwdGIzVjBiR2x1WlMxNlNXNWtaWGdwTzF4dUlDQWdJSFJ2Y0RvZ01EdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dVhHNGdJQ0FnTG05MWRHeHBibVV0WTJoaGNIUmxjbk1nZTF4dUlDQWdJQ0FnSmw5ZmRHbDBiR1VzWEc0Z0lDQWdJQ0FtWDE5dFlXbHVJSHRjYmlBZ0lDQWdJQ0FnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdKbDlmZEdsMGJHVWdlMXh1SUNBZ0lDQWdJQ0JtYkdWNExYTm9jbWx1YXpvZ01EdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdKbDlmYldGcGJpQjdYRzRnSUNBZ0lDQWdJR1pzWlhnNklERTdYRzRnSUNBZ0lDQWdJRzkyWlhKbWJHOTNPaUJoZFhSdk8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDWmZjM1JwWTJ0NUlIdGNiaUFnSUNCd2IzTnBkR2x2YmpvZ2MzUnBZMnQ1TzF4dUlDQWdJRzFoZUMxb1pXbG5hSFE2SUhaaGNpZ3RMVzkxZEd4cGJtVXRjM1JwWTJ0NUxXaGxhV2RvZENrN1hHNGdJSDFjYmx4dUlDQW1YMlpwZUdWa0lIdGNiaUFnSUNCd2IzTnBkR2x2YmpvZ1ptbDRaV1E3WEc0Z0lDQWdiV0Y0TFdobGFXZG9kRG9nTVRBd0pUdGNiaUFnZlZ4dVhHNGdJQ1pmYUdsa1pHVnVJSHRjYmlBZ0lDQmthWE53YkdGNU9pQnViMjVsTzF4dUlDQjlYRzVjYmlBZ0psOW1iMnhrWldRZ2UxeHVJQ0FnSUhkcFpIUm9PaUF3TzF4dUlDQjlYRzU5WEc0aUxDSXZLaXBjYmlBcUlHVnNiR2x3YzJsekxteGxjM01nTFNEbWxvZm1uS3pubklIbmxhVWdiV2w0YVc1NElPV0h2ZWFWc0Z4dUlDb2dQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVJQ29nUTNKbFlYUmxaQ0JDZVRvZ1dXRnZhR0ZwZUdsaGIxeHVJQ29nVlhCa1lYUmxPaUF5TURJeUxqTXVNVEZjYmlBcUwxeHVYRzR2S2lBOVBUMDlQVDBnNXBhSDVweXM1NXlCNTVXbDVZZTk1cFd3SUQwOVBUMDlQU0FxTDF4dUxtVnNiR2x3YzJseklDaEFiR2x1WlhNcElIZG9aVzRnS0VCc2FXNWxjejB4S1NCN1hHNGdJSGRvYVhSbExYTndZV05sT2lCdWIzZHlZWEE3WEc0Z0lIUmxlSFF0YjNabGNtWnNiM2M2SUdWc2JHbHdjMmx6TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1WEc0dVpXeHNhWEJ6YVhNZ0tFQnNhVzVsY3lrZ2QyaGxiaUFvUUd4cGJtVnpQajB5S1NCN1hHNGdJQzEzWldKcmFYUXRiR2x1WlMxamJHRnRjRG9nUUd4cGJtVnpPMXh1SUNCa2FYTndiR0Y1T2lCaWIzZzdYRzRnSUMxM1pXSnJhWFF0WW05NExXOXlhV1Z1ZERvZ2RtVnlkR2xqWVd3N1hHNGdJSFJsZUhRdGIzWmxjbVpzYjNjNklHVnNiR2x3YzJsek8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUlsMTkgKi9cbiJdLCJmaWxlIjoiY2hhcHRlcnMubWluLmNzcyJ9 */ diff --git a/chapters.min.js.map b/chapters.min.js.map index 47a19d0d..2ef2c26e 100644 --- a/chapters.min.js.map +++ b/chapters.min.js.map @@ -1 +1 @@ -{"version":3,"file":"chapters.min.js","sources":["src/utils/types/isString.js","src/utils/lang/hasOwn.js","src/utils/lang/toString.js","src/utils/types/isFunction.js","src/utils/types/isObject.js","src/base.js","src/utils/lang/extend.js","src/utils/types/isElement.js","src/utils/lang/later.js","src/utils/event/enum.js","src/utils/event/_off.js","src/utils/event/_delete.js","src/utils/event/purgeElement.js","src/utils/event/getListeners.js","src/utils/event/off.js","src/utils/event/at.js","src/utils/dom/matches.js","src/utils/dom/getParentOrHost.js","src/utils/event/on.js","src/utils/event/getTarget.js","src/utils/dom/resolveTextNode.js","src/utils/dom/closest.js","src/utils/types/isArray.js","src/utils/types/isDOM.js","src/utils/types/isHTMLCollection.js","src/utils/types/isFragment.js","src/utils/types/isTextNode.js","src/utils/dom/createElement.js","src/utils/dom/setAttribute.js","src/utils/lang/easeInQuad.js","src/utils/dom/_getScrollElement.js","src/utils/dom/hasClass.js","src/utils/dom/addClass.js","src/utils/dom/removeClass.js","src/utils/lang/trim.js","src/utils/dom/offsetTop.js","src/utils/dom/getStyle.js","src/utils/dom/setProperty.js","src/utils/observer/_subscribers.js","src/utils/observer/_hasDirectSubscribersFor.js","src/utils/observer/has.js","src/utils/observer/_hasSubscribers.js","src/utils/observer/emit.js","src/utils/types/isTypedArray.js","src/chapters.js","src/_paintChapters.js","src/utils/dom/scrollTo.js","src/utils/dom/intersection.js","src/utils/event/stop.js"],"sourcesContent":["/**\r\n * 检测数据是否为 String 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} str\r\n * @returns {boolean}\r\n */\r\nconst isString = (str) => {\r\n return typeof str === 'string'\r\n}\r\n\r\nexport default isString\r\n","/**\r\n * 检测对象自身属性中是否具有指定的属性。\r\n * ========================================================================\r\n * @method hasOwn\r\n * @param {Object} obj - (必须)检测的目标对象\r\n * @param {String} prop - (必须)属性名\r\n * @returns {Boolean}\r\n */\r\nconst hasOwn = (obj, prop) => {\r\n const hasOwnProperty = Object.prototype.hasOwnProperty\r\n return obj && hasOwnProperty.call(obj, prop)\r\n}\r\n\r\nexport default hasOwn\r\n","/**\r\n * Object 对象原型上的 toString 方法\r\n * ========================================================================\r\n * @method toString\r\n * @param {*} val\r\n * @returns {string}\r\n */\r\nconst toString = (val) => {\r\n return Object.prototype.toString.apply(val)\r\n}\r\n\r\nexport default toString\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测测试数据是否为 Function 类型\r\n * ========================================================================\r\n * @method isFunction\r\n * @param {*} val - (必须)待检测的数据\r\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\r\n */\r\nconst isFunction = (val) => {\r\n return typeof val === 'function' || toString(val) === '[object Function]'\r\n}\r\n\r\nexport default isFunction\r\n","import toString from '../lang/toString'\r\nimport isFunction from '../types/isFunction'\r\n\r\n/**\r\n * 检测数据是否为 Object 类型\r\n * ========================================================================\r\n * @method isObject\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isObject = (o) => {\r\n return (\r\n (toString(o) === '[object Object]' ||\r\n typeof o === 'object' ||\r\n isFunction(o)) &&\r\n o !== null\r\n )\r\n}\r\n\r\nexport default isObject\r\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\r\n\r\n/**\r\n * 扩展对象\r\n * ========================================================================\r\n * @method extend\r\n * @param {Object} origin\r\n * @param {Object} source\r\n */\r\nconst extend = (origin, source) => {\r\n const keys = Object.keys(source)\r\n\r\n keys.forEach((prop) => {\r\n if (hasOwn(source, prop)) {\r\n origin[prop] = source[prop]\r\n }\r\n })\r\n}\r\n\r\nexport default extend\r\n","import isObject from './isObject'\r\n\r\n/**\r\n * 检测数据是否为 HTMLElement DOM 节点\r\n * ========================================================================\r\n * @method isElement\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isElement = (o) => {\r\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\r\n}\r\n\r\nexport default isElement\r\n","import isFunction from '../types/isFunction'\r\n\r\n/**\r\n * later - 延迟执行方法\r\n * ========================================================================\r\n * @method later\r\n * @param {Function} fn\r\n * @param {Number} [delay]\r\n * @returns {number|boolean}\r\n */\r\nconst later = (fn, delay = 300) => {\r\n if (!isFunction(fn)) {\r\n return false\r\n }\r\n\r\n return setTimeout(() => {\r\n fn()\r\n }, delay)\r\n}\r\n\r\nexport default later\r\n","export const CAPTURE_EVENTS = [\r\n 'focusout',\r\n 'blur',\r\n 'focusin',\r\n 'focus',\r\n 'load',\r\n 'unload',\r\n 'mouseenter',\r\n 'mouseleave'\r\n]\r\n","import { CAPTURE_EVENTS } from './enum'\r\nimport _delete from './_delete'\r\n\r\n/**\r\n * (私有方法)取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method _off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} fn - (必须)事件处理器回调函数\r\n * @private\r\n */\r\nconst _off = (el, type, fn) => {\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n /* istanbul ignore else */\r\n if (fn._delegateListener) {\r\n fn = fn._delegateListener\r\n delete fn._delegateListener\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n _delete(el, type, fn)\r\n\r\n el.removeEventListener(type, fn, capture)\r\n}\r\n\r\nexport default _off\r\n","/**\r\n * 删除 DOM 元素缓存的 _listeners 数据\r\n * ========================================================================\r\n * @method _delete\r\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\r\n * @param {String} type - 事件类型(名称)\r\n * @param {Function} [fn] - 事件处理器回调函数\r\n */\r\nconst _delete = function (el, type, fn) {\r\n const listeners = el._listeners\r\n let index = -1\r\n\r\n if (listeners.length < 1) {\r\n return false\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n listeners.forEach((listener, i) => {\r\n const handler = listener.fn\r\n\r\n if (type === listener.type) {\r\n index = i\r\n\r\n if (handler === fn) {\r\n index = i\r\n }\r\n }\r\n })\r\n\r\n /* istanbul ignore else */\r\n if (index > -1) {\r\n listeners.splice(index, 1)\r\n }\r\n}\r\n\r\nexport default _delete\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\nimport getListeners from './getListeners'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 销毁(type 类型的)代理事件绑定\r\n * ========================================================================\r\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\r\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\r\n * ========================================================================\r\n * @method purgeElement\r\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\r\n * @param {String|Boolean} type - (必须)事件类型\r\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\r\n */\r\nconst purgeElement = function (el, type, recurse = false) {\r\n const $element = isString(el) ? document.querySelector(el) : el\r\n const $children = $element.childNodes\r\n const listeners = getListeners($element, type)\r\n\r\n listeners.forEach((listener) => {\r\n _off($element, listener.type, listener.fn)\r\n })\r\n\r\n if (\r\n (recurse || type === true || arguments.length === 1) &&\r\n $element &&\r\n $children\r\n ) {\r\n $children.forEach(($child) => {\r\n if (isElement($child)) {\r\n purgeElement($child, type, recurse)\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default purgeElement\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 获取 DOM 元素(type 事件类型)事件绑定信息\r\n * ========================================================================\r\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\r\n * ========================================================================\r\n * @methods getListeners\r\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\r\n * @param {String} [type] - (可选)事件类型\r\n * @returns {Array} - 已绑定的事件信息\r\n */\r\nconst getListeners = (el, type) => {\r\n let listeners = el._listeners || []\r\n\r\n if (isString(type) && type) {\r\n listeners = listeners.filter((listener) => {\r\n return listener.type === type\r\n })\r\n }\r\n\r\n return listeners\r\n}\r\n\r\nexport default getListeners\r\n","import purgeElement from './purgeElement'\r\nimport isFunction from '../types/isFunction'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} [fn] - (可选)事件处理器回调函数\r\n */\r\nconst off = (el, type, fn) => {\r\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\r\n if (!isFunction(fn)) {\r\n return purgeElement(el, type)\r\n }\r\n\r\n _off(el, type, fn)\r\n}\r\n\r\nexport default off\r\n","import isFunction from '../types/isFunction'\r\nimport off from './off'\r\n\r\nimport { CAPTURE_EVENTS } from './enum'\r\n\r\n/**\r\n * 绑定事件\r\n * ========================================================================\r\n * @method at\r\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\r\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\r\n * @param {Function|Object} fn - (必须) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\r\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\r\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\r\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\r\n * @param {Boolean} once - (可选)是否仅触发一次\r\n */\r\nconst at = (el, type, fn, data, context, once = false) => {\r\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n const listener = function (evt) {\r\n let overrideContext = context || el\r\n\r\n // 当设置为 true 时,则事件处理器回调函数的\r\n // this 上下文指向为 data 对象\r\n if (context === true) {\r\n overrideContext = data\r\n }\r\n\r\n // 仅触发一次\r\n /* istanbul ignore else */\r\n if (once === true) {\r\n off(el, type, listener)\r\n }\r\n\r\n fn.call(overrideContext, evt, data)\r\n }\r\n\r\n if (!isFunction(fn)) {\r\n return false\r\n }\r\n\r\n if (!el._listeners) {\r\n el._listeners = []\r\n }\r\n\r\n // 缓存 options 元素绑定的事件处理器\r\n el._listeners.push({\r\n el,\r\n type,\r\n fn: listener,\r\n data,\r\n context,\r\n capture\r\n })\r\n\r\n // 缓存包装后的事件处理器\r\n fn._delegateListener = listener\r\n\r\n el.addEventListener(type, listener, capture)\r\n}\r\n\r\nexport default at\r\n","/**\r\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\r\n * ========================================================================\r\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\r\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\r\n * 标 DOM 元素是否为事件代理所期望触发的目标。\r\n * ========================================================================\r\n * @method matches\r\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\r\n * @returns {Boolean}\r\n */\r\nconst matches = (el, selector = '') => {\r\n const sel = selector.replace(/^>/i, '')\r\n\r\n if (!selector || !sel || !el) {\r\n return false\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el.matches) {\r\n return el.matches(sel)\r\n } else if (el.msMatchesSelector) {\r\n return el.msMatchesSelector(sel)\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nexport default matches\r\n","/**\r\n * 获取 DOM 元素的父节点\r\n * ========================================================================\r\n * @method getParentOrHost\r\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\r\n * @returns {*|HTMLElement}\r\n */\r\nconst getParentOrHost = (el) => {\r\n return el.host && el !== document && el.host.nodeType\r\n ? el.host\r\n : el.parentNode\r\n}\r\n\r\nexport default getParentOrHost\r\n","import closest from '../dom/closest'\r\nimport off from './off'\r\nimport getTarget from './getTarget'\r\n\r\nimport { CAPTURE_EVENTS } from './enum'\r\n\r\n/**\r\n * 绑定代理事件\r\n * ========================================================================\r\n * @method on\r\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\r\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\r\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\r\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\r\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\r\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\r\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\r\n * @param {Boolean} once - (可选)是否仅触发一次\r\n */\r\nconst on = (el, selector, type, fn, data, context, once = false) => {\r\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n const listener = function (evt) {\r\n const target = getTarget(evt)\r\n // 通过 Element.matches 方法获得点击的目标元素\r\n const delegateTarget = closest(target, selector, el)\r\n let overrideContext = context || el\r\n\r\n evt.delegateTarget = delegateTarget\r\n\r\n // 当设置为 true 时,则事件处理器回调函数的\r\n // this 上下文指向为 data 对象\r\n if (context === true) {\r\n overrideContext = data\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (delegateTarget) {\r\n // 仅触发一次\r\n /* istanbul ignore else */\r\n if (once === true) {\r\n off(el, type, listener)\r\n }\r\n\r\n fn.call(overrideContext, evt, data)\r\n }\r\n }\r\n\r\n if (!el._listeners) {\r\n el._listeners = []\r\n }\r\n\r\n // 缓存 options 元素绑定的事件处理器\r\n el._listeners.push({\r\n el,\r\n selector,\r\n type,\r\n fn: listener,\r\n data,\r\n context,\r\n capture\r\n })\r\n\r\n // 缓存包装后的事件处理器\r\n fn._delegateListener = listener\r\n\r\n el.addEventListener(type, listener, capture)\r\n}\r\n\r\nexport default on\r\n","import resolveTextNode from '../dom/resolveTextNode'\r\n\r\n/**\r\n * 返回触发事件的 target DOM 元素\r\n * ========================================================================\r\n * @method getTarget\r\n * @param {Event} evt - Event 对象\r\n * @return {HTMLElement} - Event 对象的 target DOM 元素\r\n */\r\nconst getTarget = function (evt) {\r\n const target = evt.target\r\n\r\n return resolveTextNode(target)\r\n}\r\n\r\nexport default getTarget\r\n","/**\r\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\r\n * resolveTextNode() 方法则会返回实际的目标节点。\r\n * ========================================================================\r\n * @method resolveTextNode\r\n * @param {HTMLElement|Text} el - 要解析的节点\r\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\r\n */\r\nconst resolveTextNode = function (el) {\r\n if (el && el.nodeType === 3) {\r\n return el.parentNode\r\n }\r\n\r\n return el\r\n}\r\n\r\nexport default resolveTextNode\r\n","import matches from './matches'\r\nimport getParentOrHost from './getParentOrHost'\r\n\r\n/**\r\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\r\n * ========================================================================\r\n * @method closest\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)DOM 元素的选择其\r\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\r\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\r\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\r\n */\r\nconst closest = (el, selector, ctx, includeCTX) => {\r\n const context = ctx || document\r\n\r\n if (!el) {\r\n return null\r\n }\r\n\r\n do {\r\n /* istanbul ignore else */\r\n if (\r\n (selector != null &&\r\n (selector.startsWith('>')\r\n ? el.parentNode === context && matches(el, selector)\r\n : matches(el, selector))) ||\r\n (includeCTX && el === context)\r\n ) {\r\n return el\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el === context) {\r\n break\r\n }\r\n\r\n /* jshint boss:true */\r\n } while ((el = getParentOrHost(el)))\r\n}\r\n\r\nexport default closest\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测数据是否为 Array 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isArray = (o) => {\r\n if (Array.isArray) {\r\n return Array.isArray(o)\r\n } else {\r\n return toString(o) === '[object Array]'\r\n }\r\n}\r\n\r\nexport default isArray\r\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isFragment = (fragment) => {\r\n return !!(\r\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\r\n )\r\n}\r\n\r\nexport default isFragment\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","import hasOwn from '../lang/hasOwn'\r\nimport isObject from '../types/isObject'\r\nimport isString from '../types/isString'\r\nimport isArray from '../types/isArray'\r\nimport isDOM from '../types/isDOM'\r\nimport setAttribute from './setAttribute'\r\n\r\n/**\r\n * 创建 DOM 节点,并添加属性和子节点\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} tagName - 标签名称\r\n * @param {Object|Array} attrs - 属性对象或者子节点\r\n * @param {Array} [children] - 子节点数组\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (tagName, attrs, children) => {\r\n const $fragment = document.createDocumentFragment()\r\n const $el = document.createElement(tagName)\r\n const isValidChild = (child) => {\r\n return isDOM(child) || isString(child)\r\n }\r\n const append = (child) => {\r\n let $child\r\n\r\n if (!isValidChild(child)) {\r\n return false\r\n }\r\n\r\n if (isDOM(child)) {\r\n $child = child\r\n } else if (isString(child)) {\r\n $child = document.createTextNode(child)\r\n }\r\n\r\n $fragment.appendChild($child)\r\n }\r\n\r\n if (isObject(attrs)) {\r\n Object.keys(attrs).forEach((attr) => {\r\n if (hasOwn(attrs, attr)) {\r\n setAttribute($el, attr, attrs[attr])\r\n }\r\n })\r\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\r\n attrs.forEach((child) => {\r\n append(child)\r\n })\r\n }\r\n\r\n if (isArray(children)) {\r\n children.forEach((child) => {\r\n append(child)\r\n })\r\n } else {\r\n append(children)\r\n }\r\n\r\n $el.appendChild($fragment)\r\n\r\n return $el\r\n}\r\n\r\nexport default createElement\r\n","/**\r\n * 给 DOM 节点设置属性/值\r\n * ========================================================================\r\n * @method setAttribute\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} attr - 属性名称\r\n * @param {String|Number|Boolean} value - 属性值\r\n */\r\nconst setAttribute = (el, attr, value) => {\r\n let tagName = el.tagName.toLowerCase()\r\n\r\n switch (attr) {\r\n case 'style':\r\n el.style.cssText = value\r\n break\r\n case 'value':\r\n if (tagName === 'input' || tagName === 'textarea') {\r\n el.value = value\r\n } else {\r\n el.setAttribute(attr, value)\r\n }\r\n break\r\n case 'className':\r\n el.className = value\r\n break\r\n default:\r\n el.setAttribute(attr, value)\r\n break\r\n }\r\n}\r\n\r\nexport default setAttribute\r\n","/**\r\n * 返回给定值的平方值\r\n * ========================================================================\r\n * @method easeInQuad\r\n * @param {Number} x\r\n * @returns {number}\r\n */\r\nconst easeInQuad = (x) => {\r\n return x * x\r\n}\r\n\r\nexport default easeInQuad\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\n\r\n/**\r\n * 通过给的 scrollElement 参数,获取滚动 DOM 元素\r\n * ========================================================================\r\n * @method _getScrollElement\r\n * @param {String|HTMLElement} scrollElement\r\n * @returns {Element}\r\n * @private\r\n */\r\nconst _getScrollElement = (scrollElement = null) => {\r\n let $rootElements\r\n let $scrollElement\r\n\r\n if (!scrollElement) {\r\n $rootElements = document.querySelectorAll('html,body')\r\n $scrollElement =\r\n $rootElements[0].scrollTop - $rootElements[1].scrollTop >= 0\r\n ? $rootElements[0]\r\n : $rootElements[1]\r\n } else {\r\n if (isString(scrollElement)) {\r\n $scrollElement = document.querySelector(scrollElement)\r\n } else if (isElement(scrollElement)) {\r\n $scrollElement = scrollElement\r\n }\r\n }\r\n\r\n return $scrollElement\r\n}\r\n\r\nexport default _getScrollElement\r\n","import isElement from '../types/isElement'\r\n/**\r\n * 检测 DOM 节点是否包含名为 className 的样式\r\n * ========================================================================\r\n * @method hasClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst hasClass = (el, className) => {\r\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\r\n let allClass\r\n let classList\r\n\r\n if (!isElement(el)) {\r\n return false\r\n }\r\n\r\n allClass = el.className\r\n\r\n if (!allClass) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.contains) {\r\n return el.classList.contains(className)\r\n }\r\n\r\n return !!pattern.exec(allClass)\r\n}\r\n\r\nexport default hasClass\r\n","import hasClass from './hasClass'\r\n\r\n/**\r\n * 给 DOM 节点添加名为 className 的样式\r\n * ========================================================================\r\n * @method addClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst addClass = (el, className) => {\r\n let classList\r\n let allClass\r\n\r\n if (hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.add) {\r\n classList.add(className)\r\n } else {\r\n allClass = el.className\r\n allClass += allClass.length > 0 ? ' ' + className : className\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default addClass\r\n","import trim from '../lang/trim'\r\nimport hasClass from './hasClass'\r\n\r\n/**\r\n * 移除 DOM 节点的 className 样式\r\n * ========================================================================\r\n * @method removeClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst removeClass = (el, className) => {\r\n let allClass = el.className\r\n let classList\r\n\r\n if (!allClass || !hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.remove) {\r\n classList.remove(className)\r\n } else {\r\n allClass = trim(allClass.replace(className, ''))\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default removeClass\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 清楚字符串起始位置所有的空格\r\n * ========================================================================\r\n * @method trim\r\n * @param {string} str\r\n * @returns {string|Boolean}\r\n */\r\nconst trim = (str) => {\r\n if (!isString(str)) {\r\n return false\r\n }\r\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\r\n}\r\n\r\nexport default trim\r\n","/**\r\n * 获取 DOM 节点相对于窗口的 left (纵坐标)值\r\n * ========================================================================\r\n * @method offsetTop\r\n * @param {HTMLElement} el - DOM 节点\r\n * @returns {Number}\r\n */\r\nconst offsetTop = (el) => {\r\n let top = el.offsetTop\r\n\r\n if (el.offsetParent !== null) {\r\n top += offsetTop(el.offsetParent)\r\n }\r\n\r\n return top\r\n}\r\n\r\nexport default offsetTop\r\n","/**\r\n * 获取HTML元素的某个CSS样式值\r\n * ====================================================\r\n * @param el\r\n * @param ruleName\r\n * @returns {*}\r\n */\r\nconst getStyle = (el, ruleName) => {\r\n return getComputedStyle(el)[ruleName]\r\n}\r\n\r\nexport default getStyle\r\n","const setProperty = (prop, value) => {\r\n const documentElement = document.documentElement\r\n documentElement.style.setProperty(prop, value)\r\n}\r\n\r\nexport default setProperty\r\n","/**\r\n * 存储订阅者(主题和处理器的)私有对象\r\n * ========================================================================\r\n * @type {{}}\r\n * @private\r\n */\r\nconst _subscribers = {}\r\n\r\nexport default _subscribers\r\n","import _subscribers from './_subscribers'\r\nimport hasOwn from '../lang/hasOwn'\r\n\r\n/**\r\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\r\n * ========================================================================\r\n * @method _hasDirectSubscribersFor\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasDirectSubscribersFor = (topic) => {\r\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\r\n}\r\n\r\nexport default _hasDirectSubscribersFor\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\nimport _hasSubscribers from './_hasSubscribers'\r\n\r\n/**\r\n * 判断是否存在包含 topic 指定的订阅者信息\r\n * ========================================================================\r\n * @method has\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\r\n * @returns {Boolean}\r\n */\r\nconst has = (topic, isDirect = true) => {\r\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\r\n}\r\n\r\nexport default has\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * 判断是否存在包含给定 topic 相关的订阅者信息\r\n * ========================================================================\r\n * @method _hasSubscribers\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasSubscribers = (topic) => {\r\n let found = _hasDirectSubscribersFor(topic)\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (!found && position !== -1) {\r\n topic = topic.substring(0, position)\r\n position = topic.lastIndexOf('.')\r\n found = _hasDirectSubscribersFor(topic)\r\n }\r\n\r\n return found\r\n}\r\n\r\nexport default _hasSubscribers\r\n","import isTypedArray from '../types/isTypedArray'\r\nimport _subscribers from './_subscribers'\r\nimport has from './has'\r\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * (异步)发布订阅主题信息\r\n * ========================================================================\r\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\r\n * ========================================================================\r\n * @method emit\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Object} data - (必须)数据对象\r\n * @param {Boolean} async - (可选) 是否异步发布\r\n */\r\nconst emit = (topic, data, async = true) => {\r\n const execute = (topic) => {\r\n if (!_hasDirectSubscribersFor(topic)) {\r\n return false\r\n }\r\n\r\n _subscribers[topic].forEach((subscriber) => {\r\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\r\n // 采用 toString() 方法转化为普通(JSON)字符串\r\n const message = isTypedArray(data) ? data.toString() : data\r\n\r\n subscriber.callback.call(subscriber.context || subscriber, message)\r\n })\r\n }\r\n const deliver = () => {\r\n let subscriber = topic\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (position !== -1) {\r\n subscriber = subscriber.substring(0, position)\r\n position = subscriber.lastIndexOf('.')\r\n\r\n execute(subscriber)\r\n }\r\n\r\n // 执行 topic 对应的处理器\r\n execute(topic)\r\n // 执行特殊 topic:'*'(监听全部消息的发布)\r\n execute('*')\r\n }\r\n\r\n if (!has(topic)) {\r\n return false\r\n }\r\n\r\n if (async) {\r\n setTimeout(deliver, 10)\r\n } else {\r\n deliver()\r\n }\r\n}\r\n\r\nexport default emit\r\n","import toString from '../lang/toString'\r\n/**\r\n * 判断检测数据是否为 Typed Arrays 类型的数据\r\n * ========================================================================\r\n * @param {*} val\r\n * @returns {boolean}\r\n */\r\nconst isTypedArray = (val) => {\r\n const TYPES = [\r\n '[object Int8Array]',\r\n '[object Uint8Array]',\r\n '[object Uint8ClampedArray]',\r\n '[object Int16Array]',\r\n '[object Uint16Array]',\r\n '[object Int32Array]',\r\n '[object Uint32Array]',\r\n '[object Float32Array]',\r\n '[object Float64Array]',\r\n '[object BigInt64Array]',\r\n '[object BigUint64Array]'\r\n ]\r\n\r\n return TYPES.indexOf(toString(val)) > -1\r\n}\r\n\r\nexport default isTypedArray\r\n","import Base from './base'\r\n\r\nimport isString from './utils/types/isString'\r\nimport isFunction from './utils/types/isFunction'\r\nimport isElement from './utils/types/isElement'\r\nimport later from './utils/lang/later'\r\nimport at from './utils/event/at'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\nimport stop from './utils/event/stop'\r\nimport createElement from './utils/dom/createElement'\r\nimport scrollTo from './utils/dom/scrollTo'\r\nimport addClass from './utils/dom/addClass'\r\nimport intersection from './utils/dom/intersection'\r\nimport removeClass from './utils/dom/removeClass'\r\nimport offsetTop from './utils/dom/offsetTop'\r\nimport getStyle from './utils/dom/getStyle'\r\nimport setProperty from './utils/dom/setProperty'\r\nimport publish from './utils/observer/emit'\r\n\r\nimport _getScrollElement from './utils/dom/_getScrollElement'\r\nimport _paintChapters from './_paintChapters'\r\n\r\nclass Chapters extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Chapters.DEFAULTS\r\n this.$el = null\r\n this.$title = null\r\n this.$main = null\r\n this.$list = null\r\n this.$placeholder = null\r\n this.$parentElement = null\r\n this.$scrollElement = null\r\n this.chapters = []\r\n this.closed = false\r\n this.active = 0\r\n this.offsetTop = 0\r\n this.offsetWidth = 0\r\n this.$active = null\r\n this.scrollTimer = null\r\n this.resizeTimer = null\r\n this.playing = false\r\n this.Observer = null\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n let parentElement\r\n let scrollElement\r\n let $parent\r\n\r\n this.attr(options)\r\n created = this.attr('created')\r\n parentElement = this.attr('parentElement')\r\n scrollElement = this.attr('scrollElement')\r\n\r\n if (isString(parentElement)) {\r\n $parent = document.querySelector(parentElement)\r\n } else if (isElement(parentElement)) {\r\n $parent = parentElement\r\n }\r\n this.$parentElement = $parent\r\n this.$scrollElement = _getScrollElement(scrollElement)\r\n\r\n this.chapters = this.attr('chapters')\r\n this.closed = this.attr('closed')\r\n this.active = this.attr('active')\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n if (this.chapters.length < 1) {\r\n return this\r\n }\r\n\r\n this.render().addListeners()\r\n\r\n this.$active = document.querySelector(`#chapter-${this.active}`)\r\n\r\n return this\r\n }\r\n\r\n isClosed() {\r\n return this.closed\r\n }\r\n\r\n isSticky() {\r\n const position = this.attr('position')\r\n return position === 'sticky'\r\n }\r\n\r\n isFixed() {\r\n const position = this.attr('position')\r\n return position === 'fixed'\r\n }\r\n\r\n isInside() {\r\n return this.isFixed() || this.isSticky()\r\n }\r\n\r\n isOutside() {\r\n return !this.isInside()\r\n }\r\n\r\n _paintEdge() {\r\n const $fragment = document.createDocumentFragment()\r\n const STICKY = 'outline-chapters_sticky'\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const title = this.attr('title')\r\n const customClass = this.attr('customClass')\r\n const $parentElement = this.$parentElement\r\n const contents = []\r\n let $title = null\r\n let $el\r\n let $main\r\n let $list\r\n let $placeholder\r\n\r\n if (!$parentElement) {\r\n return this\r\n }\r\n\r\n if (this.isInside()) {\r\n $title = createElement(\r\n 'h2',\r\n {\r\n className: 'outline-chapters__title'\r\n },\r\n [title]\r\n )\r\n this.$title = $title\r\n contents.push($title)\r\n }\r\n\r\n $list = createElement(\r\n 'ul',\r\n {\r\n // 为优化性能,添加了 _fixed 和 _hidden\r\n // fixed 为了让 $list 脱离流布局\r\n // hidden 让 $list 不可见\r\n className: `outline-chapters__list`\r\n },\r\n ['']\r\n )\r\n this.$list = $list\r\n\r\n $placeholder = createElement(\r\n 'div',\r\n {\r\n className: 'outline-chapters__placeholder'\r\n },\r\n ['']\r\n )\r\n this.$placeholder = $placeholder\r\n\r\n $main = createElement(\r\n 'div',\r\n {\r\n className: 'outline-chapters__main'\r\n },\r\n [$list, $placeholder]\r\n )\r\n this.$main = $main\r\n contents.push($main)\r\n\r\n $el = createElement(\r\n 'nav',\r\n {\r\n id: 'outline-chapters',\r\n className: `outline-chapters ${HIDDEN}`\r\n },\r\n contents\r\n )\r\n this.$el = $el\r\n\r\n if (this.isSticky()) {\r\n this.calculateStickyHeight()\r\n addClass($el, STICKY)\r\n }\r\n\r\n if (customClass) {\r\n addClass($el, customClass)\r\n }\r\n $fragment.appendChild($el)\r\n $parentElement.appendChild($fragment)\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const showCode = this.attr('showCode')\r\n const mounted = this.attr('mounted')\r\n const $parentElement = this.$parentElement\r\n const chapters = this.chapters\r\n let $el\r\n let $list\r\n\r\n if (!$parentElement || chapters.length < 1) {\r\n return this\r\n }\r\n\r\n this._paintEdge()\r\n\r\n $el = this.$el\r\n $list = this.$list\r\n _paintChapters($list, chapters, showCode)\r\n removeClass($el, HIDDEN)\r\n this.positionPlaceholder(this.active)\r\n\r\n this.offsetTop = offsetTop($el)\r\n this.offsetWidth = $el.offsetWidth\r\n\r\n if (this.isFixed()) {\r\n this.sticky()\r\n setProperty('--outline-chapters-width', `${this.offsetWidth}px`)\r\n }\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n this.onObserver()\r\n\r\n return this\r\n }\r\n\r\n positionPlaceholder(index) {\r\n const $main = this.$main\r\n const $list = this.$list\r\n const $placeholder = this.$placeholder\r\n const $anchor = $list.querySelector('.outline-chapters__anchor')\r\n const mainPaddingTop = parseInt(getStyle($main, 'padding-top'), 10)\r\n const mainBorderTop = parseInt(getStyle($main, 'border-top-width'), 10)\r\n const placeholderPaddingTop = parseInt(getStyle($list, 'padding-top'), 10)\r\n const placeholderMarginTop = parseInt(getStyle($list, 'margin-top'), 10)\r\n const placeholderBorderTop = parseInt(\r\n getStyle($list, 'border-top-width'),\r\n 10\r\n )\r\n let height = $anchor.offsetHeight\r\n let offsetTop = 0\r\n let top\r\n\r\n if (mainPaddingTop) {\r\n offsetTop += mainPaddingTop\r\n }\r\n\r\n if (placeholderPaddingTop) {\r\n offsetTop += placeholderPaddingTop\r\n }\r\n\r\n if (placeholderMarginTop) {\r\n offsetTop += placeholderMarginTop\r\n }\r\n\r\n if (mainBorderTop) {\r\n offsetTop += mainBorderTop\r\n }\r\n\r\n if (placeholderBorderTop) {\r\n offsetTop += placeholderBorderTop\r\n }\r\n\r\n top = height * index\r\n // top:calc(${offsetTop}px + ${top}px);\r\n $placeholder.style.cssText = `transform: translateY(${\r\n offsetTop + top\r\n }px);height:${height}px;`\r\n\r\n return this\r\n }\r\n\r\n highlight(id) {\r\n const $anchor = this.$el.querySelector(`#chapter__anchor-${id}`)\r\n const HIGHLIGHT = 'outline-chapters_active'\r\n\r\n if (!$anchor) {\r\n return this\r\n }\r\n\r\n if (this.$active) {\r\n removeClass(this.$active, HIGHLIGHT)\r\n }\r\n\r\n this.active = parseInt($anchor.getAttribute('data-id'), 10)\r\n this.$active = $anchor\r\n addClass(this.$active, HIGHLIGHT)\r\n\r\n this.positionPlaceholder(this.active)\r\n\r\n return this\r\n }\r\n\r\n sticky() {\r\n const afterSticky = this.attr('afterSticky')\r\n const FIXED = 'outline-chapters_fixed'\r\n const $el = this.$el\r\n const top = this.offsetTop\r\n const scrollTop = this.$scrollElement.scrollTop\r\n let isStickying\r\n\r\n if (!this.isFixed()) {\r\n return this\r\n }\r\n\r\n isStickying = scrollTop >= top\r\n\r\n if (isStickying) {\r\n addClass($el, FIXED)\r\n } else {\r\n removeClass($el, FIXED)\r\n }\r\n\r\n if (isFunction(afterSticky)) {\r\n afterSticky.call(this, this.isClosed(), isStickying)\r\n }\r\n\r\n return this\r\n }\r\n\r\n calculateStickyHeight() {\r\n const documentElement = document.documentElement\r\n const height = Math.max(\r\n documentElement.clientHeight || 0,\r\n window.innerHeight || 0\r\n )\r\n setProperty('--outline-sticky-height', `${height}px`)\r\n return this\r\n }\r\n\r\n scrollTo(top, after) {\r\n const el = this.$scrollElement\r\n\r\n scrollTo(el, top, after)\r\n\r\n return this\r\n }\r\n\r\n show() {\r\n const FOLDED = 'outline-chapters_folded'\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const opened = this.attr('afterOpened')\r\n const $el = this.$el\r\n const $parent = this.$parentElement\r\n\r\n if (this.isInside()) {\r\n removeClass($parent, HIDDEN)\r\n removeClass($el, HIDDEN)\r\n later(() => {\r\n removeClass($parent, FOLDED)\r\n removeClass($el, FOLDED)\r\n }, 30)\r\n } else {\r\n removeClass($el, HIDDEN)\r\n }\r\n this.closed = false\r\n\r\n if (isFunction(opened)) {\r\n opened.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n hide() {\r\n const FOLDED = 'outline-chapters_folded'\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const closed = this.attr('afterClosed')\r\n const $el = this.$el\r\n const $parent = this.$parentElement\r\n\r\n if (this.isInside()) {\r\n addClass($parent, FOLDED)\r\n addClass($el, FOLDED)\r\n later(() => {\r\n addClass($parent, HIDDEN)\r\n addClass($el, HIDDEN)\r\n })\r\n } else {\r\n addClass($el, HIDDEN)\r\n }\r\n this.closed = true\r\n\r\n if (isFunction(closed)) {\r\n closed.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n toggle() {\r\n const afterToggle = this.attr('afterToggle')\r\n const top = this.offsetTop\r\n const scrollTop = this.$scrollElement.scrollTop\r\n let isStickying\r\n\r\n if (this.isClosed()) {\r\n this.show()\r\n } else {\r\n this.hide()\r\n }\r\n\r\n if (isFunction(afterToggle)) {\r\n later(() => {\r\n isStickying = scrollTop >= top\r\n afterToggle.call(this, this.isClosed(), isStickying)\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n const afterDestroy = this.attr('afterDestroy')\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n this.$parentElement.removeChild(this.$el)\r\n\r\n this.attr(Chapters.DEFAULTS)\r\n this.$el = null\r\n this.$title = null\r\n this.$main = null\r\n this.$list = null\r\n this.$placeholder = null\r\n this.$parentElement = null\r\n this.$scrollElement = null\r\n this.chapters = []\r\n this.active = 0\r\n this.offsetTop = 0\r\n this.$active = null\r\n this.closed = false\r\n\r\n if (this.scrollTimer) {\r\n clearTimeout(this.scrollTimer)\r\n this.scrollTimer = null\r\n }\r\n\r\n if (this.resizeTimer) {\r\n clearTimeout(this.resizeTimer)\r\n this.resizeTimer = null\r\n }\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n if (this.Observer) {\r\n this.Observer = null\r\n }\r\n\r\n return this\r\n }\r\n\r\n onObserver() {\r\n const selector = this.attr('selector')\r\n let timer = null\r\n\r\n this.Observer = intersection(\r\n ($heading) => {\r\n const id = $heading.getAttribute('data-id')\r\n\r\n if (this.playing) {\r\n return false\r\n }\r\n\r\n if (timer) {\r\n clearTimeout(timer)\r\n }\r\n\r\n timer = later(() => {\r\n this.highlight(id)\r\n }, 100)\r\n },\r\n {\r\n selector,\r\n context: this\r\n }\r\n )\r\n\r\n return this\r\n }\r\n\r\n onSelect(evt) {\r\n const stickyHeight = this.attr('stickyHeight')\r\n const $anchor = evt.delegateTarget\r\n const id = $anchor.getAttribute('data-id')\r\n const headingId = $anchor.href.split('#')[1]\r\n const $heading = document.querySelector(`#${headingId}`)\r\n const top = offsetTop($heading) - (stickyHeight + 10)\r\n const min = 0\r\n const max = this.$scrollElement.scrollHeight\r\n const afterScroll = this.attr('afterScroll')\r\n const after = () => {\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(this, 'chapter')\r\n }\r\n\r\n later(() => {\r\n this.playing = false\r\n publish('toolbar:update', {\r\n top,\r\n min,\r\n max\r\n })\r\n })\r\n }\r\n\r\n this.playing = true\r\n if (this.isFixed()) {\r\n this.sticky()\r\n later(() => {\r\n this.scrollTo(top, after)\r\n this.highlight(id)\r\n }, 10)\r\n } else {\r\n this.scrollTo(top, after)\r\n this.highlight(id)\r\n }\r\n\r\n stop(evt)\r\n\r\n return this\r\n }\r\n\r\n onScroll() {\r\n const $scrollElement = this.$scrollElement\r\n\r\n if (this.scrollTimer) {\r\n clearTimeout(this.scrollTimer)\r\n }\r\n\r\n this.scrollTimer = later(() => {\r\n const top = $scrollElement.scrollTop\r\n const min = 0\r\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\r\n\r\n if (this.isFixed()) {\r\n this.sticky()\r\n }\r\n\r\n publish('toolbar:update', {\r\n top,\r\n min,\r\n max\r\n })\r\n }, 100)\r\n\r\n return this\r\n }\r\n\r\n onResize() {\r\n if (this.resizeTimer) {\r\n clearTimeout(this.resizeTimer)\r\n }\r\n\r\n this.resizeTimer = later(() => {\r\n this.calculateStickyHeight()\r\n })\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const $el = this.$el\r\n const $scrollElement = this.$scrollElement\r\n const tagName = $scrollElement.tagName.toLowerCase()\r\n let $element = $scrollElement\r\n\r\n if (tagName === 'html' || tagName === 'body') {\r\n $element = window\r\n }\r\n\r\n on($el, '.outline-chapters__anchor', 'click', this.onSelect, this, true)\r\n at($element, 'scroll', this.onScroll, this, true)\r\n if (this.isSticky()) {\r\n at($element, 'resize', this.onResize, this, true)\r\n }\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const selector = this.attr('selector')\r\n const $el = this.$el\r\n const $scrollElement = this.$scrollElement\r\n const tagName = $scrollElement.tagName.toLowerCase()\r\n let $element = $scrollElement\r\n\r\n if (tagName === 'html' || tagName === 'body') {\r\n $element = window\r\n }\r\n\r\n off($el, 'click', this.onSelect)\r\n off($element, 'scroll', this.onScroll)\r\n\r\n if (this.isSticky()) {\r\n at($element, 'resize', this.onResize)\r\n }\r\n\r\n if (this.Observer) {\r\n document.querySelectorAll(selector).forEach((section) => {\r\n this.Observer.unobserve(section)\r\n })\r\n }\r\n\r\n return this\r\n }\r\n}\r\n\r\nChapters.DEFAULTS = {\r\n parentElement: '',\r\n scrollElement: '',\r\n selector: '.outline-heading',\r\n active: 0,\r\n closed: false,\r\n showCode: true,\r\n position: 'relative',\r\n stickyHeight: 0,\r\n chapters: [],\r\n created: null,\r\n mounted: null,\r\n afterClosed: null,\r\n afterOpened: null,\r\n afterScroll: null,\r\n beforeDestroy: null,\r\n afterDestroy: null,\r\n afterSticky: null\r\n}\r\n\r\nexport default Chapters\r\n","import createElement from './utils/dom/createElement'\r\n\r\nconst _paintChapters = ($list, chapters, showCode = false) => {\r\n const byId = (id) => document.querySelector(`#${id}`)\r\n\r\n chapters.forEach((chapter) => {\r\n const pid = chapter.pid\r\n const id = chapter.id\r\n const rel = chapter.rel\r\n const $text = createElement(\r\n 'span',\r\n {\r\n className: 'outline-chapters__text'\r\n },\r\n [chapter.text]\r\n )\r\n const $link = createElement(\r\n 'a',\r\n {\r\n id: `chapter__anchor-${id}`,\r\n className: 'outline-chapters__anchor',\r\n href: '#' + rel,\r\n rel: rel,\r\n 'data-id': id\r\n },\r\n [$text]\r\n )\r\n let $code\r\n let $li\r\n let $ul\r\n let $parent\r\n\r\n if (showCode) {\r\n $code = createElement(\r\n 'span',\r\n {\r\n className: 'outline-chapters__code',\r\n 'data-id': id\r\n },\r\n [chapter.code]\r\n )\r\n\r\n $link.insertBefore($code, $link.firstChild)\r\n }\r\n\r\n $li = createElement(\r\n 'li',\r\n {\r\n id: `chapter-${id}`,\r\n className: 'outline-chapters__item',\r\n 'data-id': id\r\n },\r\n [$link]\r\n )\r\n\r\n if (pid === -1) {\r\n $list.appendChild($li)\r\n } else {\r\n $parent = byId(`chapter-${pid}`)\r\n $ul = byId(`subject-${pid}`)\r\n\r\n if (!$ul) {\r\n $ul = createElement(\r\n 'ul',\r\n {\r\n id: 'subject-' + pid,\r\n className: 'outline-chapters__subject'\r\n },\r\n [$li]\r\n )\r\n\r\n $parent.appendChild($ul)\r\n } else {\r\n $ul.appendChild($li)\r\n }\r\n }\r\n })\r\n}\r\n\r\nexport default _paintChapters\r\n","import easeInQuad from '../lang/easeInQuad'\r\nimport isFunction from '../types/isFunction'\r\nimport _getScrollElement from './_getScrollElement'\r\n\r\n/**\r\n * 指定 rootElement DOM 节点滚动到指定 top 位置\r\n * ========================================================================\r\n * @method scrollTo\r\n * @param {HTMLElement|Object} [scrollElement] - (必须)要滚动的 DOM 节点\r\n * @param {Number} top - (必须)滚动的 scrollTop 数值\r\n * @param {Function} [afterStop] - (可选)滚动完成的回调函数\r\n */\r\nconst scrollTo = (scrollElement, top, afterStop) => {\r\n const $scrollElement = _getScrollElement(scrollElement)\r\n let scrollTop = $scrollElement.scrollTop\r\n let step = 0\r\n const distance = top - scrollTop\r\n const MAX_HEIGHT = $scrollElement.scrollHeight\r\n const MAX_TOP = top - MAX_HEIGHT <= 0 ? top : MAX_HEIGHT\r\n const stop = (top) => {\r\n if (isFunction(afterStop)) {\r\n afterStop(top)\r\n }\r\n\r\n return false\r\n }\r\n const play = () => {\r\n step += 1\r\n\r\n // 向上滚动\r\n if (distance < 0) {\r\n scrollTop -= easeInQuad(step)\r\n $scrollElement.scrollTop = scrollTop\r\n\r\n if (scrollTop <= top) {\r\n $scrollElement.scrollTop = top\r\n return stop(top)\r\n }\r\n } else {\r\n scrollTop += easeInQuad(step)\r\n $scrollElement.scrollTop = scrollTop\r\n\r\n if (scrollTop >= MAX_TOP) {\r\n $scrollElement.scrollTop = MAX_TOP\r\n return stop(MAX_TOP)\r\n }\r\n }\r\n\r\n requestAnimationFrame(play)\r\n }\r\n\r\n requestAnimationFrame(play)\r\n}\r\n\r\nexport default scrollTo\r\n","import isFunction from '../types/isFunction'\r\nimport isElement from '../types/isElement'\r\n\r\n/**\r\n * 通用的 IntersectionObserver 观察者处理器\r\n * ========================================================================\r\n * @method intersection\r\n * @param {Function} fn\r\n * @param {Object} [props]\r\n * @param {Object|HTMLElement} [props.root]\r\n * @param {String} [props.selector]\r\n * @param {Object} [props.context]\r\n * @param {String} [props.attr]\r\n * @param {String} [props.rootMargin]\r\n */\r\nconst intersection = (fn, props = {}) => {\r\n const root = props.root || null\r\n const selector = props.selector || '.outline-heading'\r\n const context = props.context || null\r\n const rootMargin = props.rootMargin || '0px 0px -90% 0px'\r\n const options = {\r\n rootMargin: rootMargin\r\n }\r\n const Observer = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.intersectionRatio > 0) {\r\n if (isFunction(fn)) {\r\n fn.call(context || entry.target, entry.target)\r\n }\r\n }\r\n })\r\n }, options)\r\n const $root = isElement(root) ? root : document\r\n\r\n if (root) {\r\n options.root = root\r\n }\r\n\r\n $root.querySelectorAll(selector).forEach((section) => {\r\n Observer.observe(section)\r\n })\r\n\r\n return Observer\r\n}\r\n\r\nexport default intersection\r\n","/**\r\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\r\n * ========================================================================\r\n * @method stop\r\n * @param {Event} evt - 事件对象\r\n *\r\n * @example\r\n *
\r\n * Service\r\n * Help\r\n *
\r\n *\r\n * const $nav = document.querySelector('#nav')\r\n * const $service = document.querySelector('.anchor')\r\n *\r\n * on($nav, 'click', function(evt) {\r\n * console.log('你点击了导航栏')\r\n * })\r\n *\r\n * on($anchor, 'click', function(evt) {\r\n * console.log('tagName', this.tagName)\r\n *\r\n * // 工作台输出:'a'\r\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\r\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\r\n * stopEvent(evt)\r\n * })\r\n */\r\nconst stop = function (evt) {\r\n evt.stopPropagation()\r\n evt.preventDefault()\r\n}\r\n\r\nexport default stop\r\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isElement","nodeName","tagName","nodeType","later","fn","delay","setTimeout","CAPTURE_EVENTS","_off","el","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","document","querySelector","$children","childNodes","filter","getListeners","$child","off","at","data","context","once","evt","overrideContext","push","addEventListener","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","on","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","isArray","Array","isDOM","isHTMLCollection","fragment","isTextNode","createElement","children","$fragment","createDocumentFragment","$el","isValidChild","child","append","createTextNode","appendChild","toLowerCase","style","cssText","setAttribute","className","every","easeInQuad","x","_getScrollElement","scrollElement","$rootElements","$scrollElement","querySelectorAll","scrollTop","hasClass","pattern","RegExp","allClass","classList","contains","exec","addClass","add","removeClass","remove","offsetTop","top","offsetParent","getStyle","ruleName","getComputedStyle","setProperty","documentElement","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","Chapters","super","DEFAULTS","$title","$main","$list","$placeholder","$parentElement","chapters","closed","active","offsetWidth","$active","scrollTimer","resizeTimer","playing","Observer","created","parentElement","$parent","isClosed","isSticky","isFixed","isInside","isOutside","_paintEdge","title","customClass","contents","id","calculateStickyHeight","showCode","mounted","byId","chapter","pid","rel","$text","text","$link","href","$code","$li","$ul","code","insertBefore","firstChild","_paintChapters","positionPlaceholder","sticky","onObserver","$anchor","mainPaddingTop","parseInt","mainBorderTop","placeholderPaddingTop","placeholderMarginTop","placeholderBorderTop","height","offsetHeight","highlight","HIGHLIGHT","getAttribute","afterSticky","FIXED","isStickying","Math","max","clientHeight","window","innerHeight","scrollTo","after","afterStop","step","distance","MAX_HEIGHT","scrollHeight","MAX_TOP","stop","play","requestAnimationFrame","show","FOLDED","HIDDEN","opened","hide","toggle","afterToggle","beforeDestroy","afterDestroy","removeChild","clearTimeout","timer","props","root","rootMargin","IntersectionObserver","entries","entry","intersectionRatio","$root","section","observe","intersection","$heading","onSelect","stickyHeight","headingId","split","afterScroll","publish","min","stopPropagation","preventDefault","onScroll","onResize","unobserve","afterClosed","afterOpened"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"chapters.min.js","sources":["src/utils/types/isString.js","src/utils/lang/hasOwn.js","src/utils/lang/toString.js","src/utils/types/isFunction.js","src/utils/types/isObject.js","src/base.js","src/utils/lang/extend.js","src/utils/types/isElement.js","src/utils/lang/later.js","src/utils/event/enum.js","src/utils/event/_off.js","src/utils/event/_delete.js","src/utils/event/purgeElement.js","src/utils/event/getListeners.js","src/utils/event/off.js","src/utils/event/at.js","src/utils/dom/matches.js","src/utils/dom/getParentOrHost.js","src/utils/event/on.js","src/utils/event/getTarget.js","src/utils/dom/resolveTextNode.js","src/utils/dom/closest.js","src/utils/types/isArray.js","src/utils/types/isDOM.js","src/utils/types/isHTMLCollection.js","src/utils/types/isFragment.js","src/utils/types/isTextNode.js","src/utils/dom/createElement.js","src/utils/dom/setAttribute.js","src/utils/lang/easeInQuad.js","src/utils/dom/_getScrollElement.js","src/utils/dom/hasClass.js","src/utils/dom/addClass.js","src/utils/dom/removeClass.js","src/utils/lang/trim.js","src/utils/dom/offsetTop.js","src/utils/dom/getStyle.js","src/utils/dom/setProperty.js","src/utils/observer/_subscribers.js","src/utils/observer/_hasDirectSubscribersFor.js","src/utils/observer/has.js","src/utils/observer/_hasSubscribers.js","src/utils/observer/emit.js","src/utils/types/isTypedArray.js","src/chapters.js","src/_paintChapters.js","src/utils/dom/scrollTo.js","src/utils/dom/intersection.js","src/utils/event/stop.js"],"sourcesContent":["/**\n * 检测数据是否为 String 类型\n * ========================================================================\n * @method isArray\n * @param {*} str\n * @returns {boolean}\n */\nconst isString = (str) => {\n return typeof str === 'string'\n}\n\nexport default isString\n","/**\n * 检测对象自身属性中是否具有指定的属性。\n * ========================================================================\n * @method hasOwn\n * @param {Object} obj - (必须)检测的目标对象\n * @param {String} prop - (必须)属性名\n * @returns {Boolean}\n */\nconst hasOwn = (obj, prop) => {\n const hasOwnProperty = Object.prototype.hasOwnProperty\n return obj && hasOwnProperty.call(obj, prop)\n}\n\nexport default hasOwn\n","/**\n * Object 对象原型上的 toString 方法\n * ========================================================================\n * @method toString\n * @param {*} val\n * @returns {string}\n */\nconst toString = (val) => {\n return Object.prototype.toString.apply(val)\n}\n\nexport default toString\n","import toString from '../lang/toString'\n\n/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return typeof val === 'function' || toString(val) === '[object Function]'\n}\n\nexport default isFunction\n","import toString from '../lang/toString'\nimport isFunction from '../types/isFunction'\n\n/**\n * 检测数据是否为 Object 类型\n * ========================================================================\n * @method isObject\n * @param {*} o\n * @returns {boolean}\n */\nconst isObject = (o) => {\n return (\n (toString(o) === '[object Object]' ||\n typeof o === 'object' ||\n isFunction(o)) &&\n o !== null\n )\n}\n\nexport default isObject\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\n\n/**\n * 扩展对象\n * ========================================================================\n * @method extend\n * @param {Object} origin\n * @param {Object} source\n */\nconst extend = (origin, source) => {\n const keys = Object.keys(source)\n\n keys.forEach((prop) => {\n if (hasOwn(source, prop)) {\n origin[prop] = source[prop]\n }\n })\n}\n\nexport default extend\n","import isObject from './isObject'\n\n/**\n * 检测数据是否为 HTMLElement DOM 节点\n * ========================================================================\n * @method isElement\n * @param {*} o\n * @returns {boolean}\n */\nconst isElement = (o) => {\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\n}\n\nexport default isElement\n","import isFunction from '../types/isFunction'\n\n/**\n * later - 延迟执行方法\n * ========================================================================\n * @method later\n * @param {Function} fn\n * @param {Number} [delay]\n * @returns {number|boolean}\n */\nconst later = (fn, delay = 300) => {\n if (!isFunction(fn)) {\n return false\n }\n\n return setTimeout(() => {\n fn()\n }, delay)\n}\n\nexport default later\n","export const CAPTURE_EVENTS = [\n 'focusout',\n 'blur',\n 'focusin',\n 'focus',\n 'load',\n 'unload',\n 'mouseenter',\n 'mouseleave'\n]\n","import { CAPTURE_EVENTS } from './enum'\nimport _delete from './_delete'\n\n/**\n * (私有方法)取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method _off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须)事件处理器回调函数\n * @private\n */\nconst _off = (el, type, fn) => {\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n /* istanbul ignore else */\n if (fn._delegateListener) {\n fn = fn._delegateListener\n delete fn._delegateListener\n }\n\n // 移除缓存的 _listeners 数据\n _delete(el, type, fn)\n\n el.removeEventListener(type, fn, capture)\n}\n\nexport default _off\n","/**\n * 删除 DOM 元素缓存的 _listeners 数据\n * ========================================================================\n * @method _delete\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\n * @param {String} type - 事件类型(名称)\n * @param {Function} [fn] - 事件处理器回调函数\n */\nconst _delete = function (el, type, fn) {\n const listeners = el._listeners\n let index = -1\n\n if (listeners.length < 1) {\n return false\n }\n\n // 移除缓存的 _listeners 数据\n listeners.forEach((listener, i) => {\n const handler = listener.fn\n\n if (type === listener.type) {\n index = i\n\n if (handler === fn) {\n index = i\n }\n }\n })\n\n /* istanbul ignore else */\n if (index > -1) {\n listeners.splice(index, 1)\n }\n}\n\nexport default _delete\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\nimport getListeners from './getListeners'\nimport _off from './_off'\n\n/**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purgeElement\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\n * @param {String|Boolean} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n */\nconst purgeElement = function (el, type, recurse = false) {\n const $element = isString(el) ? document.querySelector(el) : el\n const $children = $element.childNodes\n const listeners = getListeners($element, type)\n\n listeners.forEach((listener) => {\n _off($element, listener.type, listener.fn)\n })\n\n if (\n (recurse || type === true || arguments.length === 1) &&\n $element &&\n $children\n ) {\n $children.forEach(($child) => {\n if (isElement($child)) {\n purgeElement($child, type, recurse)\n }\n })\n }\n}\n\nexport default purgeElement\n","import isString from '../types/isString'\n\n/**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @methods getListeners\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\nconst getListeners = (el, type) => {\n let listeners = el._listeners || []\n\n if (isString(type) && type) {\n listeners = listeners.filter((listener) => {\n return listener.type === type\n })\n }\n\n return listeners\n}\n\nexport default getListeners\n","import purgeElement from './purgeElement'\nimport isFunction from '../types/isFunction'\nimport _off from './_off'\n\n/**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} [fn] - (可选)事件处理器回调函数\n */\nconst off = (el, type, fn) => {\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\n if (!isFunction(fn)) {\n return purgeElement(el, type)\n }\n\n _off(el, type, fn)\n}\n\nexport default off\n","import isFunction from '../types/isFunction'\nimport off from './off'\n\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定事件\n * ========================================================================\n * @method at\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\n * @param {Function|Object} fn - (必须) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst at = (el, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n const listener = function (evt) {\n let overrideContext = context || el\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n\n if (!isFunction(fn)) {\n return false\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default at\n","/**\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\n * ========================================================================\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\n * 标 DOM 元素是否为事件代理所期望触发的目标。\n * ========================================================================\n * @method matches\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\n * @returns {Boolean}\n */\nconst matches = (el, selector = '') => {\n const sel = selector.replace(/^>/i, '')\n\n if (!selector || !sel || !el) {\n return false\n }\n\n /* istanbul ignore else */\n if (el.matches) {\n return el.matches(sel)\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(sel)\n } else {\n return false\n }\n}\n\nexport default matches\n","/**\n * 获取 DOM 元素的父节点\n * ========================================================================\n * @method getParentOrHost\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\n * @returns {*|HTMLElement}\n */\nconst getParentOrHost = (el) => {\n return el.host && el !== document && el.host.nodeType\n ? el.host\n : el.parentNode\n}\n\nexport default getParentOrHost\n","import closest from '../dom/closest'\nimport off from './off'\nimport getTarget from './getTarget'\n\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst on = (el, selector, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n const listener = function (evt) {\n const target = getTarget(evt)\n // 通过 Element.matches 方法获得点击的目标元素\n const delegateTarget = closest(target, selector, el)\n let overrideContext = context || el\n\n evt.delegateTarget = delegateTarget\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n /* istanbul ignore else */\n if (delegateTarget) {\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n selector,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default on\n","import resolveTextNode from '../dom/resolveTextNode'\n\n/**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\nconst getTarget = function (evt) {\n const target = evt.target\n\n return resolveTextNode(target)\n}\n\nexport default getTarget\n","/**\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\n * resolveTextNode() 方法则会返回实际的目标节点。\n * ========================================================================\n * @method resolveTextNode\n * @param {HTMLElement|Text} el - 要解析的节点\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\n */\nconst resolveTextNode = function (el) {\n if (el && el.nodeType === 3) {\n return el.parentNode\n }\n\n return el\n}\n\nexport default resolveTextNode\n","import matches from './matches'\nimport getParentOrHost from './getParentOrHost'\n\n/**\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\n * ========================================================================\n * @method closest\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)DOM 元素的选择其\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\n */\nconst closest = (el, selector, ctx, includeCTX) => {\n const context = ctx || document\n\n if (!el) {\n return null\n }\n\n do {\n /* istanbul ignore else */\n if (\n (selector != null &&\n (selector.startsWith('>')\n ? el.parentNode === context && matches(el, selector)\n : matches(el, selector))) ||\n (includeCTX && el === context)\n ) {\n return el\n }\n\n /* istanbul ignore else */\n if (el === context) {\n break\n }\n\n /* jshint boss:true */\n } while ((el = getParentOrHost(el)))\n}\n\nexport default closest\n","import toString from '../lang/toString'\n\n/**\n * 检测数据是否为 Array 类型\n * ========================================================================\n * @method isArray\n * @param {*} o\n * @returns {boolean}\n */\nconst isArray = (o) => {\n if (Array.isArray) {\n return Array.isArray(o)\n } else {\n return toString(o) === '[object Array]'\n }\n}\n\nexport default isArray\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\nimport isObject from './isObject'\n\nconst isFragment = (fragment) => {\n return !!(\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\n )\n}\n\nexport default isFragment\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","import hasOwn from '../lang/hasOwn'\nimport isObject from '../types/isObject'\nimport isString from '../types/isString'\nimport isArray from '../types/isArray'\nimport isDOM from '../types/isDOM'\nimport setAttribute from './setAttribute'\n\n/**\n * 创建 DOM 节点,并添加属性和子节点\n * ========================================================================\n * @method createElement\n * @param {String} tagName - 标签名称\n * @param {Object|Array} attrs - 属性对象或者子节点\n * @param {Array} [children] - 子节点数组\n * @returns {HTMLElement}\n */\nconst createElement = (tagName, attrs, children) => {\n const $fragment = document.createDocumentFragment()\n const $el = document.createElement(tagName)\n const isValidChild = (child) => {\n return isDOM(child) || isString(child)\n }\n const append = (child) => {\n let $child\n\n if (!isValidChild(child)) {\n return false\n }\n\n if (isDOM(child)) {\n $child = child\n } else if (isString(child)) {\n $child = document.createTextNode(child)\n }\n\n $fragment.appendChild($child)\n }\n\n if (isObject(attrs)) {\n Object.keys(attrs).forEach((attr) => {\n if (hasOwn(attrs, attr)) {\n setAttribute($el, attr, attrs[attr])\n }\n })\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\n attrs.forEach((child) => {\n append(child)\n })\n }\n\n if (isArray(children)) {\n children.forEach((child) => {\n append(child)\n })\n } else {\n append(children)\n }\n\n $el.appendChild($fragment)\n\n return $el\n}\n\nexport default createElement\n","/**\n * 给 DOM 节点设置属性/值\n * ========================================================================\n * @method setAttribute\n * @param {HTMLElement} el - DOM 节点\n * @param {String} attr - 属性名称\n * @param {String|Number|Boolean} value - 属性值\n */\nconst setAttribute = (el, attr, value) => {\n let tagName = el.tagName.toLowerCase()\n\n switch (attr) {\n case 'style':\n el.style.cssText = value\n break\n case 'value':\n if (tagName === 'input' || tagName === 'textarea') {\n el.value = value\n } else {\n el.setAttribute(attr, value)\n }\n break\n case 'className':\n el.className = value\n break\n default:\n el.setAttribute(attr, value)\n break\n }\n}\n\nexport default setAttribute\n","/**\n * 返回给定值的平方值\n * ========================================================================\n * @method easeInQuad\n * @param {Number} x\n * @returns {number}\n */\nconst easeInQuad = (x) => {\n return x * x\n}\n\nexport default easeInQuad\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\n\n/**\n * 通过给的 scrollElement 参数,获取滚动 DOM 元素\n * ========================================================================\n * @method _getScrollElement\n * @param {String|HTMLElement} scrollElement\n * @returns {Element}\n * @private\n */\nconst _getScrollElement = (scrollElement = null) => {\n let $rootElements\n let $scrollElement\n\n if (!scrollElement) {\n $rootElements = document.querySelectorAll('html,body')\n $scrollElement =\n $rootElements[0].scrollTop - $rootElements[1].scrollTop >= 0\n ? $rootElements[0]\n : $rootElements[1]\n } else {\n if (isString(scrollElement)) {\n $scrollElement = document.querySelector(scrollElement)\n } else if (isElement(scrollElement)) {\n $scrollElement = scrollElement\n }\n }\n\n return $scrollElement\n}\n\nexport default _getScrollElement\n","import isElement from '../types/isElement'\n/**\n * 检测 DOM 节点是否包含名为 className 的样式\n * ========================================================================\n * @method hasClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst hasClass = (el, className) => {\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\n let allClass\n let classList\n\n if (!isElement(el)) {\n return false\n }\n\n allClass = el.className\n\n if (!allClass) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.contains) {\n return el.classList.contains(className)\n }\n\n return !!pattern.exec(allClass)\n}\n\nexport default hasClass\n","import hasClass from './hasClass'\n\n/**\n * 给 DOM 节点添加名为 className 的样式\n * ========================================================================\n * @method addClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst addClass = (el, className) => {\n let classList\n let allClass\n\n if (hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.add) {\n classList.add(className)\n } else {\n allClass = el.className\n allClass += allClass.length > 0 ? ' ' + className : className\n el.className = allClass\n }\n}\n\nexport default addClass\n","import trim from '../lang/trim'\nimport hasClass from './hasClass'\n\n/**\n * 移除 DOM 节点的 className 样式\n * ========================================================================\n * @method removeClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst removeClass = (el, className) => {\n let allClass = el.className\n let classList\n\n if (!allClass || !hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.remove) {\n classList.remove(className)\n } else {\n allClass = trim(allClass.replace(className, ''))\n el.className = allClass\n }\n}\n\nexport default removeClass\n","import isString from '../types/isString'\n\n/**\n * 清楚字符串起始位置所有的空格\n * ========================================================================\n * @method trim\n * @param {string} str\n * @returns {string|Boolean}\n */\nconst trim = (str) => {\n if (!isString(str)) {\n return false\n }\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\n}\n\nexport default trim\n","/**\n * 获取 DOM 节点相对于窗口的 left (纵坐标)值\n * ========================================================================\n * @method offsetTop\n * @param {HTMLElement} el - DOM 节点\n * @returns {Number}\n */\nconst offsetTop = (el) => {\n let top = el.offsetTop\n\n if (el.offsetParent !== null) {\n top += offsetTop(el.offsetParent)\n }\n\n return top\n}\n\nexport default offsetTop\n","/**\r\n * 获取HTML元素的某个CSS样式值\r\n * ====================================================\r\n * @param el\r\n * @param ruleName\r\n * @returns {*}\r\n */\r\nconst getStyle = (el, ruleName) => {\r\n return getComputedStyle(el)[ruleName]\r\n}\r\n\r\nexport default getStyle\r\n","const setProperty = (prop, value) => {\r\n const documentElement = document.documentElement\r\n documentElement.style.setProperty(prop, value)\r\n}\r\n\r\nexport default setProperty\r\n","/**\n * 存储订阅者(主题和处理器的)私有对象\n * ========================================================================\n * @type {{}}\n * @private\n */\nconst _subscribers = {}\n\nexport default _subscribers\n","import _subscribers from './_subscribers'\nimport hasOwn from '../lang/hasOwn'\n\n/**\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\n * ========================================================================\n * @method _hasDirectSubscribersFor\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasDirectSubscribersFor = (topic) => {\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\n}\n\nexport default _hasDirectSubscribersFor\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\nimport _hasSubscribers from './_hasSubscribers'\n\n/**\n * 判断是否存在包含 topic 指定的订阅者信息\n * ========================================================================\n * @method has\n * @param {String} topic - (必须)主题名称\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\n * @returns {Boolean}\n */\nconst has = (topic, isDirect = true) => {\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\n}\n\nexport default has\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * 判断是否存在包含给定 topic 相关的订阅者信息\n * ========================================================================\n * @method _hasSubscribers\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasSubscribers = (topic) => {\n let found = _hasDirectSubscribersFor(topic)\n let position = topic.lastIndexOf('.')\n\n while (!found && position !== -1) {\n topic = topic.substring(0, position)\n position = topic.lastIndexOf('.')\n found = _hasDirectSubscribersFor(topic)\n }\n\n return found\n}\n\nexport default _hasSubscribers\n","import isTypedArray from '../types/isTypedArray'\nimport _subscribers from './_subscribers'\nimport has from './has'\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * (异步)发布订阅主题信息\n * ========================================================================\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\n * ========================================================================\n * @method emit\n * @param {String} topic - (必须)主题名称\n * @param {Object} data - (必须)数据对象\n * @param {Boolean} async - (可选) 是否异步发布\n */\nconst emit = (topic, data, async = true) => {\n const execute = (topic) => {\n if (!_hasDirectSubscribersFor(topic)) {\n return false\n }\n\n _subscribers[topic].forEach((subscriber) => {\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\n // 采用 toString() 方法转化为普通(JSON)字符串\n const message = isTypedArray(data) ? data.toString() : data\n\n subscriber.callback.call(subscriber.context || subscriber, message)\n })\n }\n const deliver = () => {\n let subscriber = topic\n let position = topic.lastIndexOf('.')\n\n while (position !== -1) {\n subscriber = subscriber.substring(0, position)\n position = subscriber.lastIndexOf('.')\n\n execute(subscriber)\n }\n\n // 执行 topic 对应的处理器\n execute(topic)\n // 执行特殊 topic:'*'(监听全部消息的发布)\n execute('*')\n }\n\n if (!has(topic)) {\n return false\n }\n\n if (async) {\n setTimeout(deliver, 10)\n } else {\n deliver()\n }\n}\n\nexport default emit\n","import toString from '../lang/toString'\n/**\n * 判断检测数据是否为 Typed Arrays 类型的数据\n * ========================================================================\n * @param {*} val\n * @returns {boolean}\n */\nconst isTypedArray = (val) => {\n const TYPES = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n '[object BigInt64Array]',\n '[object BigUint64Array]'\n ]\n\n return TYPES.indexOf(toString(val)) > -1\n}\n\nexport default isTypedArray\n","import Base from './base'\n\nimport isString from './utils/types/isString'\nimport isFunction from './utils/types/isFunction'\nimport isElement from './utils/types/isElement'\nimport later from './utils/lang/later'\nimport at from './utils/event/at'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\nimport stop from './utils/event/stop'\nimport createElement from './utils/dom/createElement'\nimport scrollTo from './utils/dom/scrollTo'\nimport addClass from './utils/dom/addClass'\nimport intersection from './utils/dom/intersection'\nimport removeClass from './utils/dom/removeClass'\nimport offsetTop from './utils/dom/offsetTop'\nimport getStyle from './utils/dom/getStyle'\nimport setProperty from './utils/dom/setProperty'\nimport publish from './utils/observer/emit'\n\nimport _getScrollElement from './utils/dom/_getScrollElement'\nimport _paintChapters from './_paintChapters'\n\nclass Chapters extends Base {\n constructor(options) {\n super()\n\n this.attrs = Chapters.DEFAULTS\n this.$el = null\n this.$title = null\n this.$main = null\n this.$list = null\n this.$placeholder = null\n this.$parentElement = null\n this.$scrollElement = null\n this.chapters = []\n this.closed = false\n this.active = 0\n this.offsetTop = 0\n this.offsetWidth = 0\n this.$active = null\n this.scrollTimer = null\n this.resizeTimer = null\n this.playing = false\n this.Observer = null\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n let parentElement\n let scrollElement\n let $parent\n\n this.attr(options)\n created = this.attr('created')\n parentElement = this.attr('parentElement')\n scrollElement = this.attr('scrollElement')\n\n if (isString(parentElement)) {\n $parent = document.querySelector(parentElement)\n } else if (isElement(parentElement)) {\n $parent = parentElement\n }\n this.$parentElement = $parent\n this.$scrollElement = _getScrollElement(scrollElement)\n\n this.chapters = this.attr('chapters')\n this.closed = this.attr('closed')\n this.active = this.attr('active')\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n if (this.chapters.length < 1) {\n return this\n }\n\n this.render().addListeners()\n\n this.$active = document.querySelector(`#chapter-${this.active}`)\n\n return this\n }\n\n isClosed() {\n return this.closed\n }\n\n isSticky() {\n const position = this.attr('position')\n return position === 'sticky'\n }\n\n isFixed() {\n const position = this.attr('position')\n return position === 'fixed'\n }\n\n isInside() {\n return this.isFixed() || this.isSticky()\n }\n\n isOutside() {\n return !this.isInside()\n }\n\n _paintEdge() {\n const $fragment = document.createDocumentFragment()\n const STICKY = 'outline-chapters_sticky'\n const HIDDEN = 'outline-chapters_hidden'\n const title = this.attr('title')\n const customClass = this.attr('customClass')\n const $parentElement = this.$parentElement\n const contents = []\n let $title = null\n let $el\n let $main\n let $list\n let $placeholder\n\n if (!$parentElement) {\n return this\n }\n\n if (this.isInside()) {\n $title = createElement(\n 'h2',\n {\n className: 'outline-chapters__title'\n },\n [title]\n )\n this.$title = $title\n contents.push($title)\n }\n\n $list = createElement(\n 'ul',\n {\n // 为优化性能,添加了 _fixed 和 _hidden\n // fixed 为了让 $list 脱离流布局\n // hidden 让 $list 不可见\n className: `outline-chapters__list`\n },\n ['']\n )\n this.$list = $list\n\n $placeholder = createElement(\n 'div',\n {\n className: 'outline-chapters__placeholder'\n },\n ['']\n )\n this.$placeholder = $placeholder\n\n $main = createElement(\n 'div',\n {\n className: 'outline-chapters__main'\n },\n [$list, $placeholder]\n )\n this.$main = $main\n contents.push($main)\n\n $el = createElement(\n 'nav',\n {\n id: 'outline-chapters',\n className: `outline-chapters ${HIDDEN}`\n },\n contents\n )\n this.$el = $el\n\n if (this.isSticky()) {\n this.calculateStickyHeight()\n addClass($el, STICKY)\n }\n\n if (customClass) {\n addClass($el, customClass)\n }\n $fragment.appendChild($el)\n $parentElement.appendChild($fragment)\n\n return this\n }\n\n render() {\n const HIDDEN = 'outline-chapters_hidden'\n const showCode = this.attr('showCode')\n const mounted = this.attr('mounted')\n const $parentElement = this.$parentElement\n const chapters = this.chapters\n let $el\n let $list\n\n if (!$parentElement || chapters.length < 1) {\n return this\n }\n\n this._paintEdge()\n\n $el = this.$el\n $list = this.$list\n _paintChapters($list, chapters, showCode)\n removeClass($el, HIDDEN)\n this.positionPlaceholder(this.active)\n\n this.offsetTop = offsetTop($el)\n this.offsetWidth = $el.offsetWidth\n\n if (this.isFixed()) {\n this.sticky()\n setProperty('--outline-chapters-width', `${this.offsetWidth}px`)\n }\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n this.onObserver()\n\n return this\n }\n\n positionPlaceholder(index) {\n const $main = this.$main\n const $list = this.$list\n const $placeholder = this.$placeholder\n const $anchor = $list.querySelector('.outline-chapters__anchor')\n const mainPaddingTop = parseInt(getStyle($main, 'padding-top'), 10)\n const mainBorderTop = parseInt(getStyle($main, 'border-top-width'), 10)\n const placeholderPaddingTop = parseInt(getStyle($list, 'padding-top'), 10)\n const placeholderMarginTop = parseInt(getStyle($list, 'margin-top'), 10)\n const placeholderBorderTop = parseInt(\n getStyle($list, 'border-top-width'),\n 10\n )\n let height = $anchor.offsetHeight\n let offsetTop = 0\n let top\n\n if (mainPaddingTop) {\n offsetTop += mainPaddingTop\n }\n\n if (placeholderPaddingTop) {\n offsetTop += placeholderPaddingTop\n }\n\n if (placeholderMarginTop) {\n offsetTop += placeholderMarginTop\n }\n\n if (mainBorderTop) {\n offsetTop += mainBorderTop\n }\n\n if (placeholderBorderTop) {\n offsetTop += placeholderBorderTop\n }\n\n top = height * index\n // top:calc(${offsetTop}px + ${top}px);\n $placeholder.style.cssText = `transform: translateY(${\n offsetTop + top\n }px);height:${height}px;`\n\n return this\n }\n\n highlight(id) {\n const $anchor = this.$el.querySelector(`#chapter__anchor-${id}`)\n const HIGHLIGHT = 'outline-chapters_active'\n\n if (!$anchor) {\n return this\n }\n\n if (this.$active) {\n removeClass(this.$active, HIGHLIGHT)\n }\n\n this.active = parseInt($anchor.getAttribute('data-id'), 10)\n this.$active = $anchor\n addClass(this.$active, HIGHLIGHT)\n\n this.positionPlaceholder(this.active)\n\n return this\n }\n\n sticky() {\n const afterSticky = this.attr('afterSticky')\n const FIXED = 'outline-chapters_fixed'\n const $el = this.$el\n const top = this.offsetTop\n const scrollTop = this.$scrollElement.scrollTop\n let isStickying\n\n if (!this.isFixed()) {\n return this\n }\n\n isStickying = scrollTop >= top\n\n if (isStickying) {\n addClass($el, FIXED)\n } else {\n removeClass($el, FIXED)\n }\n\n if (isFunction(afterSticky)) {\n afterSticky.call(this, this.isClosed(), isStickying)\n }\n\n return this\n }\n\n calculateStickyHeight() {\n const documentElement = document.documentElement\n const height = Math.max(\n documentElement.clientHeight || 0,\n window.innerHeight || 0\n )\n setProperty('--outline-sticky-height', `${height}px`)\n return this\n }\n\n scrollTo(top, after) {\n const el = this.$scrollElement\n\n scrollTo(el, top, after)\n\n return this\n }\n\n show() {\n const FOLDED = 'outline-chapters_folded'\n const HIDDEN = 'outline-chapters_hidden'\n const opened = this.attr('afterOpened')\n const $el = this.$el\n const $parent = this.$parentElement\n\n if (this.isInside()) {\n removeClass($parent, HIDDEN)\n removeClass($el, HIDDEN)\n later(() => {\n removeClass($parent, FOLDED)\n removeClass($el, FOLDED)\n }, 30)\n } else {\n removeClass($el, HIDDEN)\n }\n this.closed = false\n\n if (isFunction(opened)) {\n opened.call(this)\n }\n\n return this\n }\n\n hide() {\n const FOLDED = 'outline-chapters_folded'\n const HIDDEN = 'outline-chapters_hidden'\n const closed = this.attr('afterClosed')\n const $el = this.$el\n const $parent = this.$parentElement\n\n if (this.isInside()) {\n addClass($parent, FOLDED)\n addClass($el, FOLDED)\n later(() => {\n addClass($parent, HIDDEN)\n addClass($el, HIDDEN)\n })\n } else {\n addClass($el, HIDDEN)\n }\n this.closed = true\n\n if (isFunction(closed)) {\n closed.call(this)\n }\n\n return this\n }\n\n toggle() {\n const afterToggle = this.attr('afterToggle')\n const top = this.offsetTop\n const scrollTop = this.$scrollElement.scrollTop\n let isStickying\n\n if (this.isClosed()) {\n this.show()\n } else {\n this.hide()\n }\n\n if (isFunction(afterToggle)) {\n later(() => {\n isStickying = scrollTop >= top\n afterToggle.call(this, this.isClosed(), isStickying)\n })\n }\n\n return this\n }\n\n destroy() {\n const beforeDestroy = this.attr('beforeDestroy')\n const afterDestroy = this.attr('afterDestroy')\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n this.$parentElement.removeChild(this.$el)\n\n this.attr(Chapters.DEFAULTS)\n this.$el = null\n this.$title = null\n this.$main = null\n this.$list = null\n this.$placeholder = null\n this.$parentElement = null\n this.$scrollElement = null\n this.chapters = []\n this.active = 0\n this.offsetTop = 0\n this.$active = null\n this.closed = false\n\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer)\n this.scrollTimer = null\n }\n\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer)\n this.resizeTimer = null\n }\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n if (this.Observer) {\n this.Observer = null\n }\n\n return this\n }\n\n onObserver() {\n const selector = this.attr('selector')\n let timer = null\n\n this.Observer = intersection(\n ($heading) => {\n const id = $heading.getAttribute('data-id')\n\n if (this.playing) {\n return false\n }\n\n if (timer) {\n clearTimeout(timer)\n }\n\n timer = later(() => {\n this.highlight(id)\n }, 100)\n },\n {\n selector,\n context: this\n }\n )\n\n return this\n }\n\n onSelect(evt) {\n const stickyHeight = this.attr('stickyHeight')\n const $anchor = evt.delegateTarget\n const id = $anchor.getAttribute('data-id')\n const headingId = $anchor.href.split('#')[1]\n const $heading = document.querySelector(`#${headingId}`)\n const top = offsetTop($heading) - (stickyHeight + 10)\n const min = 0\n const max = this.$scrollElement.scrollHeight\n const afterScroll = this.attr('afterScroll')\n const after = () => {\n if (isFunction(afterScroll)) {\n afterScroll.call(this, 'chapter')\n }\n\n later(() => {\n this.playing = false\n publish('toolbar:update', {\n top,\n min,\n max\n })\n })\n }\n\n this.playing = true\n if (this.isFixed()) {\n this.sticky()\n later(() => {\n this.scrollTo(top, after)\n this.highlight(id)\n }, 10)\n } else {\n this.scrollTo(top, after)\n this.highlight(id)\n }\n\n stop(evt)\n\n return this\n }\n\n onScroll() {\n const $scrollElement = this.$scrollElement\n\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer)\n }\n\n this.scrollTimer = later(() => {\n const top = $scrollElement.scrollTop\n const min = 0\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\n\n if (this.isFixed()) {\n this.sticky()\n }\n\n publish('toolbar:update', {\n top,\n min,\n max\n })\n }, 100)\n\n return this\n }\n\n onResize() {\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer)\n }\n\n this.resizeTimer = later(() => {\n this.calculateStickyHeight()\n })\n\n return this\n }\n\n addListeners() {\n const $el = this.$el\n const $scrollElement = this.$scrollElement\n const tagName = $scrollElement.tagName.toLowerCase()\n let $element = $scrollElement\n\n if (tagName === 'html' || tagName === 'body') {\n $element = window\n }\n\n on($el, '.outline-chapters__anchor', 'click', this.onSelect, this, true)\n at($element, 'scroll', this.onScroll, this, true)\n if (this.isSticky()) {\n at($element, 'resize', this.onResize, this, true)\n }\n\n return this\n }\n\n removeListeners() {\n const selector = this.attr('selector')\n const $el = this.$el\n const $scrollElement = this.$scrollElement\n const tagName = $scrollElement.tagName.toLowerCase()\n let $element = $scrollElement\n\n if (tagName === 'html' || tagName === 'body') {\n $element = window\n }\n\n off($el, 'click', this.onSelect)\n off($element, 'scroll', this.onScroll)\n\n if (this.isSticky()) {\n at($element, 'resize', this.onResize)\n }\n\n if (this.Observer) {\n document.querySelectorAll(selector).forEach((section) => {\n this.Observer.unobserve(section)\n })\n }\n\n return this\n }\n}\n\nChapters.DEFAULTS = {\n parentElement: '',\n scrollElement: '',\n selector: '.outline-heading',\n active: 0,\n closed: false,\n showCode: true,\n position: 'relative',\n stickyHeight: 0,\n chapters: [],\n created: null,\n mounted: null,\n afterClosed: null,\n afterOpened: null,\n afterScroll: null,\n beforeDestroy: null,\n afterDestroy: null,\n afterSticky: null\n}\n\nexport default Chapters\n","import createElement from './utils/dom/createElement'\n\nconst _paintChapters = ($list, chapters, showCode = false) => {\n const byId = (id) => document.querySelector(`#${id}`)\n\n chapters.forEach((chapter) => {\n const pid = chapter.pid\n const id = chapter.id\n const rel = chapter.rel\n const $text = createElement(\n 'span',\n {\n className: 'outline-chapters__text'\n },\n [chapter.text]\n )\n const $link = createElement(\n 'a',\n {\n id: `chapter__anchor-${id}`,\n className: 'outline-chapters__anchor',\n href: '#' + rel,\n rel: rel,\n 'data-id': id\n },\n [$text]\n )\n let $code\n let $li\n let $ul\n let $parent\n\n if (showCode) {\n $code = createElement(\n 'span',\n {\n className: 'outline-chapters__code',\n 'data-id': id\n },\n [chapter.code]\n )\n\n $link.insertBefore($code, $link.firstChild)\n }\n\n $li = createElement(\n 'li',\n {\n id: `chapter-${id}`,\n className: 'outline-chapters__item',\n 'data-id': id\n },\n [$link]\n )\n\n if (pid === -1) {\n $list.appendChild($li)\n } else {\n $parent = byId(`chapter-${pid}`)\n $ul = byId(`subject-${pid}`)\n\n if (!$ul) {\n $ul = createElement(\n 'ul',\n {\n id: 'subject-' + pid,\n className: 'outline-chapters__subject'\n },\n [$li]\n )\n\n $parent.appendChild($ul)\n } else {\n $ul.appendChild($li)\n }\n }\n })\n}\n\nexport default _paintChapters\n","import easeInQuad from '../lang/easeInQuad'\nimport isFunction from '../types/isFunction'\nimport _getScrollElement from './_getScrollElement'\n\n/**\n * 指定 rootElement DOM 节点滚动到指定 top 位置\n * ========================================================================\n * @method scrollTo\n * @param {HTMLElement|Object} [scrollElement] - (必须)要滚动的 DOM 节点\n * @param {Number} top - (必须)滚动的 scrollTop 数值\n * @param {Function} [afterStop] - (可选)滚动完成的回调函数\n */\nconst scrollTo = (scrollElement, top, afterStop) => {\n const $scrollElement = _getScrollElement(scrollElement)\n let scrollTop = $scrollElement.scrollTop\n let step = 0\n const distance = top - scrollTop\n const MAX_HEIGHT = $scrollElement.scrollHeight\n const MAX_TOP = top - MAX_HEIGHT <= 0 ? top : MAX_HEIGHT\n const stop = (top) => {\n if (isFunction(afterStop)) {\n afterStop(top)\n }\n\n return false\n }\n const play = () => {\n step += 1\n\n // 向上滚动\n if (distance < 0) {\n scrollTop -= easeInQuad(step)\n $scrollElement.scrollTop = scrollTop\n\n if (scrollTop <= top) {\n $scrollElement.scrollTop = top\n return stop(top)\n }\n } else {\n scrollTop += easeInQuad(step)\n $scrollElement.scrollTop = scrollTop\n\n if (scrollTop >= MAX_TOP) {\n $scrollElement.scrollTop = MAX_TOP\n return stop(MAX_TOP)\n }\n }\n\n requestAnimationFrame(play)\n }\n\n requestAnimationFrame(play)\n}\n\nexport default scrollTo\n","import isFunction from '../types/isFunction'\nimport isElement from '../types/isElement'\n\n/**\n * 通用的 IntersectionObserver 观察者处理器\n * ========================================================================\n * @method intersection\n * @param {Function} fn\n * @param {Object} [props]\n * @param {Object|HTMLElement} [props.root]\n * @param {String} [props.selector]\n * @param {Object} [props.context]\n * @param {String} [props.attr]\n * @param {String} [props.rootMargin]\n */\nconst intersection = (fn, props = {}) => {\n const root = props.root || null\n const selector = props.selector || '.outline-heading'\n const context = props.context || null\n const rootMargin = props.rootMargin || '0px 0px -90% 0px'\n const options = {\n rootMargin: rootMargin\n }\n const Observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio > 0) {\n if (isFunction(fn)) {\n fn.call(context || entry.target, entry.target)\n }\n }\n })\n }, options)\n const $root = isElement(root) ? root : document\n\n if (root) {\n options.root = root\n }\n\n $root.querySelectorAll(selector).forEach((section) => {\n Observer.observe(section)\n })\n\n return Observer\n}\n\nexport default intersection\n","/**\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\n * ========================================================================\n * @method stop\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 工作台输出:'a'\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\n * stopEvent(evt)\n * })\n */\nconst stop = function (evt) {\n evt.stopPropagation()\n evt.preventDefault()\n}\n\nexport default stop\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isElement","nodeName","tagName","nodeType","later","fn","delay","setTimeout","CAPTURE_EVENTS","_off","el","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","document","querySelector","$children","childNodes","filter","getListeners","$child","off","at","data","context","once","evt","overrideContext","push","addEventListener","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","on","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","isArray","Array","isDOM","isHTMLCollection","fragment","isTextNode","createElement","children","$fragment","createDocumentFragment","$el","isValidChild","child","append","createTextNode","appendChild","toLowerCase","style","cssText","setAttribute","className","every","easeInQuad","x","_getScrollElement","scrollElement","$rootElements","$scrollElement","querySelectorAll","scrollTop","hasClass","pattern","RegExp","allClass","classList","contains","exec","addClass","add","removeClass","remove","offsetTop","top","offsetParent","getStyle","ruleName","getComputedStyle","setProperty","documentElement","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","Chapters","super","DEFAULTS","$title","$main","$list","$placeholder","$parentElement","chapters","closed","active","offsetWidth","$active","scrollTimer","resizeTimer","playing","Observer","created","parentElement","$parent","isClosed","isSticky","isFixed","isInside","isOutside","_paintEdge","title","customClass","contents","id","calculateStickyHeight","showCode","mounted","byId","chapter","pid","rel","$text","text","$link","href","$code","$li","$ul","code","insertBefore","firstChild","_paintChapters","positionPlaceholder","sticky","onObserver","$anchor","mainPaddingTop","parseInt","mainBorderTop","placeholderPaddingTop","placeholderMarginTop","placeholderBorderTop","height","offsetHeight","highlight","HIGHLIGHT","getAttribute","afterSticky","FIXED","isStickying","Math","max","clientHeight","window","innerHeight","scrollTo","after","afterStop","step","distance","MAX_HEIGHT","scrollHeight","MAX_TOP","stop","play","requestAnimationFrame","show","FOLDED","HIDDEN","opened","hide","toggle","afterToggle","beforeDestroy","afterDestroy","removeChild","clearTimeout","timer","props","root","rootMargin","IntersectionObserver","entries","entry","intersectionRatio","$root","section","observe","intersection","$heading","onSelect","stickyHeight","headingId","split","afterScroll","publish","min","stopPropagation","preventDefault","onScroll","onResize","unobserve","afterClosed","afterOpened"],"mappings":"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"} \ No newline at end of file diff --git a/docs/css/docs.css b/docs/css/docs.css index 005bb98e..b22576c2 100644 --- a/docs/css/docs.css +++ b/docs/css/docs.css @@ -764,4 +764,4 @@ code { overflow: hidden; } -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLzxpbnB1dCBjc3MgMT4iLCJub3JtYWxpemUubGVzcyIsImJhc2UubGVzcyIsInNjcm9sbGJhci5sZXNzIiwibGF5b3V0Lmxlc3MiLCJhc2lkZS5sZXNzIiwibWFpbi5sZXNzIiwic2VjdGlvbi5sZXNzIiwiY2FzZS5sZXNzIiwiYnV0dG9ucy5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRFQUE0RTtBQUM1RTtnRkFDZ0Y7QUFDaEY7OztHQUdHO0FDSUg7RUFDRSxrQkFBQTtFREZBLE9BQU87RUNHUCwrQkFBQTtFRERBLE9BQU87Q0FDUjtBQUNEO2dGQUNnRjtBQUNoRjs7R0FFRztBQ0tIO0VBQ0UsVUFBQTtDREhEO0FBQ0Q7O0dBRUc7QUNPSDtFQUNFLGVBQUE7Q0RMRDtBQUNEOzs7R0FHRztBQ1NIO0VBQ0UsZUFBQTtFQUNBLGlCQUFBO0NEUEQ7QUFDRDtnRkFDZ0Y7QUFDaEY7OztHQUdHO0FDWUg7RUFDRSxnQ0FBQTtVQUFBLHdCQUFBO0VEVkEsT0FBTztFQ1dQLFVBQUE7RURUQSxPQUFPO0VDVVAsa0JBQUE7RURSQSxPQUFPO0NBQ1I7QUFDRDs7O0dBR0c7QUNXSDtFQUNFLGtDQUFBO0VEVEEsT0FBTztFQ1VQLGVBQUE7RURSQSxPQUFPO0NBQ1I7QUFDRDtnRkFDZ0Y7QUFDaEY7O0dBRUc7QUNZSDtFQUNFLDhCQUFBO0NEVkQ7QUFDRDs7O0dBR0c7QUNjSDtFQUNFLG9CQUFBO0VEWkEsT0FBTztFQ2FQLDJCQUFBO0VEWEEsT0FBTztFQ1lQLDBDQUFBO1VBQUEsa0NBQUE7RURWQSxPQUFPO0NBQ1I7QUFDRDs7R0FFRztBQ2FIOztFQUVFLG9CQUFBO0NEWEQ7QUFDRDs7O0dBR0c7QUNlSDs7O0VBR0Usa0NBQUE7RURiQSxPQUFPO0VDY1AsZUFBQTtFRFpBLE9BQU87Q0FDUjtBQUNEOztHQUVHO0FDZUg7RUFDRSxlQUFBO0NEYkQ7QUFDRDs7O0dBR0c7QUNpQkg7O0VBRUUsZUFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtFQUNB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LGVBQUE7Q1JzakJIO0FRbmpCQzs7RUFFRSxVQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VBQ0EsaUJBQUE7Q1JxakJIO0FRbGpCQztFQUNFLGNBQUE7RUFDQSwyQkFBQTtFQUNBLDhCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0NSb2pCSDtBUWpqQkM7RUFDRSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0NSbWpCSDtBUWpqQkc7RUFDRSwwQkFBQTtDUm1qQkw7QVN2cUJEO0VBQ0UsZ0JBQUE7RUFDQSxXQUFBO0VBQ0EsU0FBQTtFQUNBLFlBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtFQUNBLG9DQUFBO1VBQUEsNEJBQUE7RUFDQSxpQkFBQTtDVHlxQkQ7QVN2cUJDO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsYUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFQUNBLGlDQUFBO1VBQUEseUJBQUE7RUFDQSwrQkFBQTtVQUFBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLGlCQUFBO0NUeXFCSDtBU3ZxQkc7RUFDRSxlQUFBO0NUeXFCTDtBU3RxQkc7RUFDRSxjQUFBO0NUd3FCTDtBU25xQkc7OztFQUdFLFlBQUE7Q1RxcUJMO0FTbHFCRztFQUNFLGVBQUE7Q1RvcUJMO0FTaHFCQztFQUNFLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSx5Q0FBQTtVQUFBLGlDQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtDVGtxQkgiLCJmaWxlIjoiZG9jcy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgbm9ybWFsaXplLmNzcyB2OC4wLjEgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG4vKiBEb2N1bWVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgbGluZSBoZWlnaHQgaW4gYWxsIGJyb3dzZXJzLlxuICogMi4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpbiBpT1MuXG4gKi9cbmh0bWwge1xuICBsaW5lLWhlaWdodDogMS4xNTtcbiAgLyogMSAqL1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC8qIDIgKi9cbn1cbi8qIFNlY3Rpb25zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG4vKipcbiAqIFJlbmRlciB0aGUgYG1haW5gIGVsZW1lbnQgY29uc2lzdGVudGx5IGluIElFLlxuICovXG5tYWluIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4vKipcbiAqIENvcnJlY3QgdGhlIGZvbnQgc2l6ZSBhbmQgbWFyZ2luIG9uIGBoMWAgZWxlbWVudHMgd2l0aGluIGBzZWN0aW9uYCBhbmRcbiAqIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG4gKi9cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBGaXJlZm94LlxuICogMi4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZSBhbmQgSUUuXG4gKi9cbmhyIHtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIC8qIDEgKi9cbiAgaGVpZ2h0OiAwO1xuICAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICAvKiAyICovXG59XG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnByZSB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTtcbiAgLyogMiAqL1xufVxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqL1xuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLyoqXG4gKiAxLiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgaW4gQ2hyb21lIDU3LVxuICogMi4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBDaHJvbWUsIEVkZ2UsIElFLCBPcGVyYSwgYW5kIFNhZmFyaS5cbiAqL1xuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lO1xuICAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAvKiAyICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcbiAgLyogMiAqL1xufVxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCB3ZWlnaHQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICovXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuY29kZSxcbmtiZCxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIC8qIDEgKi9cbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG4vKipcbiAqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGVsZW1lbnRzIGZyb20gYWZmZWN0aW5nIHRoZSBsaW5lIGhlaWdodCBpblxuICogYWxsIGJyb3dzZXJzLlxuICovXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG4vKiBFbWJlZGRlZCBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuICovXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQ2hhbmdlIHRoZSBmb250IHN0eWxlcyBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gKi9cbmJ1dHRvbixcbmlucHV0LFxub3B0Z3JvdXAsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAvKiAxICovXG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgLyogMSAqL1xuICBsaW5lLWhlaWdodDogMS4xNTtcbiAgLyogMSAqL1xuICBtYXJnaW46IDA7XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKiAxLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLlxuICovXG5idXR0b24sXG5pbnB1dCB7XG4gIC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4vKipcbiAqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLlxuICogMS4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBGaXJlZm94LlxuICovXG5idXR0b24sXG5zZWxlY3Qge1xuICAvKiAxICovXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLyoqXG4gKiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICovXG5idXR0b24sXG5bdHlwZT1cImJ1dHRvblwiXSxcblt0eXBlPVwicmVzZXRcIl0sXG5bdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xufVxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwicmVzZXRcIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cbi8qKlxuICogUmVzdG9yZSB0aGUgZm9jdXMgc3R5bGVzIHVuc2V0IGJ5IHRoZSBwcmV2aW91cyBydWxlLlxuICovXG5idXR0b246LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZyB7XG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbn1cbi8qKlxuICogQ29ycmVjdCB0aGUgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5maWVsZHNldCB7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjc1ZW0gMC42MjVlbTtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cbiAqIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXRcbiAqICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5sZWdlbmQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvKiAxICovXG4gIGNvbG9yOiBpbmhlcml0O1xuICAvKiAyICovXG4gIGRpc3BsYXk6IHRhYmxlO1xuICAvKiAxICovXG4gIG1heC13aWR0aDogMTAwJTtcbiAgLyogMSAqL1xuICBwYWRkaW5nOiAwO1xuICAvKiAzICovXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIC8qIDEgKi9cbn1cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cbiAqL1xucHJvZ3Jlc3Mge1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG4vKipcbiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgMTArLlxuICovXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLyoqXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBJRSAxMC5cbiAqIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC5cbiAqL1xuW3R5cGU9XCJjaGVja2JveFwiXSxcblt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvKiAxICovXG4gIHBhZGRpbmc6IDA7XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuICovXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUgYW5kIFNhZmFyaS5cbiAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICovXG5bdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICAvKiAxICovXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuICAvKiAyICovXG59XG4vKipcbiAqIFJlbW92ZSB0aGUgaW5uZXIgcGFkZGluZyBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBtYWNPUy5cbiAqL1xuW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKiAyLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBTYWZhcmkuXG4gKi9cbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbiAgLyogMSAqL1xuICBmb250OiBpbmhlcml0O1xuICAvKiAyICovXG59XG4vKiBJbnRlcmFjdGl2ZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSAxMCssIGFuZCBGaXJlZm94LlxuICovXG5kZXRhaWxzIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4vKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xufVxuLyogTWlzY1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxuICovXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDEwLlxuICovXG5baGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4vKiA9PT09PSBCYXNlID09PT09ICovXG5odG1sLFxuYm9keSB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgY29sb3I6ICMzMzM7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIGZvbnQtZmFtaWx5OiBcIk1pY3Jvc29mdCBZYUhlaSBVSVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbmE6bGluayxcbmE6dmlzaXRlZCxcbmE6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuY29kZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlNvdXJjZSBDb2RlIFByb1wiLCBDb25zb2xhcywgR2VvcmdpYSwgTW9uYWNvLCBtb25vc3BhY2UsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLyogPT09PT0gU2Nyb2xsYmFyID09PT09ICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDdweDtcbiAgaGVpZ2h0OiA3cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuLyogTGF5b3V0ICovXG4uZG9jcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi8qIEFzaWRlICovXG4uYXNpZGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXNocmluazogMDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIHdpZHRoOiAyNjBweDtcbiAgbWFyZ2luOiAwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gIGNvbG9yOiAjZGRkO1xuICBib3gtc2hhZG93OiAwIDAgNXB4IDJweCAjZGRkO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi8qIE1haW4gKi9cbi5tYWluIHtcbiAgZmxleDogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmFzaWRlIHtcbiAgZm9udC1mYW1pbHk6IFwiU291cmNlIENvZGUgUHJvXCIsIENvbnNvbGFzLCBHZW9yZ2lhLCBNb25hY28sIG1vbm9zcGFjZSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG4uYXNpZGVfX2hlYWRlciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBmbGV4LXNocmluazogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9fbmF2IHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uYXNpZGVfX2gyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogNTRweDtcbiAgbGluZS1oZWlnaHQ6IDU0cHg7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1mYW1pbHk6IEdlb3JnaWEsIENvbnNvbGFzLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmFzaWRlX19oMyB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwIDIwcHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMTBweCAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmFzaWRlX19pdGVtIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBsaW5lLWhlaWdodDogMzJweDtcbiAgcGFkZGluZzogMCAzMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9faXRlbS5hY3RpdmUsXG4uYXNpZGVfX2l0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU1O1xufVxuLmFzaWRlX19pdGVtLmFjdGl2ZSB7XG4gIGJvcmRlci1sZWZ0OiAzcHggc29saWQgI2ZmZjtcbn1cbi5hc2lkZV9fYW5jaG9yOmxpbmsge1xuICBjb2xvcjogI2RkZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmFzaWRlX19hbmNob3I6dmlzaXRlZCB7XG4gIGNvbG9yOiAjZGRkO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYXNpZGVfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjZGRkO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5tYWluX19oZWFkZXIsXG4ubWFpbl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDFlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX2gxIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmctdG9wOiAxZW07XG4gIGZvbnQtc2l6ZTogNWVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX25hbWUge1xuICBjb2xvcjogIzFmOGRkNjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cbi5tYWluX190YWdsaW5lIHtcbiAgbWFyZ2luOiAxZW0gYXV0bztcbiAgbWF4LXdpZHRoOiA2NjBweDtcbiAgbGluZS1oZWlnaHQ6IDEuM2VtO1xuICBmb250LXNpemU6IDJlbTtcbiAgY29sb3I6ICM5OTk7XG4gIGZvbnQtd2VpZ2h0OiAxMDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWFpbl9fY2RuIHtcbiAgbWFyZ2luOiAyZW0gMDtcbiAgcGFkZGluZzogMmVtO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgY29sb3I6ICM2NjY7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWFpbl9fZG93bmxvYWQge1xuICBtYXJnaW46IDFlbSBhdXRvO1xuICB3aWR0aDogMjAwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tYWluX19idXR0b24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgcGFkZGluZzogMTRweCAyOXB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtZmFtaWx5OiBcIlNvdXJjZSBDb2RlIFByb1wiLCBDb25zb2xhcywgR2VvcmdpYSwgTW9uYWNvLCBtb25vc3BhY2UsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDU4OTQyO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX2J1dHRvbjpsaW5rLFxuLm1haW5fX2J1dHRvbjp2aXNpdGVkLFxuLm1haW5fX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ubWFpbl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIDNlbTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG59XG4uc2VjdGlvbiB7XG4gIG1hcmdpbjogMWVtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9faGVhZGVyLFxuLnNlY3Rpb25fX2NvbnRlbnQsXG4uc2VjdGlvbl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIDNlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWN0aW9uX190aXRsZSB7XG4gIGNvbG9yOiAjNjY2O1xufVxuLnNlY3Rpb25fX2gzIHtcbiAgY29sb3I6ICMxZjhkZDY7XG4gIGZvbnQtc2l6ZTogMS4zNWVtO1xufVxuLnNlY3Rpb25fX2g0IHtcbiAgZm9udC1zaXplOiAxLjFlbTtcbiAgY29sb3I6ICM2NjY7XG59XG4uc2VjdGlvbl9faDUge1xuICBmb250LXNpemU6IDFlbTtcbiAgY29sb3I6ICM5OTk7XG59XG4uc2VjdGlvbl9fZGwsXG4uc2VjdGlvbl9fZHQsXG4uc2VjdGlvbl9fZGQge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fZGwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG59XG4uc2VjdGlvbl9fZHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uc2VjdGlvbl9fZGQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLnNlY3Rpb25fX3ByZSB7XG4gIG1hcmdpbjogMmVtIDA7XG4gIHBhZGRpbmc6IDFlbTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTUwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjb2xvcjogIzY2NjtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uc2VjdGlvbl9fY29kZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgYXV0bztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWN0aW9uX19mb290ZXIge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgbWFyZ2luLXRvcDogM2VtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBjb2xvcjogIzk5OTtcbn1cbi5jYXNlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICBnYXA6IDQwcHg7XG4gIHBhZGRpbmc6IDFlbTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2U6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDUwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX3ByZSxcbi5jYXNlX190ZXh0YXJlYSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG59XG4uY2FzZV9fcHJlLFxuLmNhc2VfX2NvZGUsXG4uY2FzZV9fdGV4dGFyZWEge1xuICBmb250LWZhbWlseTogXCJDb3VyaWVyIE5ld1wiLCBDb25zb2xhcywgR2VvcmdpYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG4uY2FzZV9fcHJlIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5jYXNlX190b29sYmFyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogMzZweDtcbiAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcGFkZGluZzogMCAxNnB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlX19hY3Rpb24sXG4uY2FzZV9fcmVtb3ZlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogIzA1ODk0MjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uY2FzZV9fYWN0aW9uIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG4uY2FzZV9fYWN0aW9uOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLmNhc2VfX3JlbW92ZSB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi5jYXNlX19jb25zb2xlIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogMTgwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY2FzZV9fdGV4dGFyZWEge1xuICBtYXJnaW46IDAgYXV0bztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmNhc2VfX2xpc3QsXG4uY2FzZV9faXRlbSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX2xpc3Qge1xuICBoZWlnaHQ6IDM2MHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uY2FzZV9faXRlbSB7XG4gIGhlaWdodDogMzZweDtcbiAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZzogMCAxNnB4O1xufVxuLmNhc2VfX2l0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGY5O1xufVxuLmJ1dHRvbnMge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogNTZweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmJ1dHRvbnNfX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMTBweDtcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3gtc2hhZG93OiAwIDAgNnB4ICNkZGQ7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzk5OTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5idXR0b25zX19pdGVtOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4uYnV0dG9uc19faXRlbS5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5idXR0b25zX19hbmNob3I6bGluayxcbi5idXR0b25zX19hbmNob3I6dmlzaXRlZCxcbi5idXR0b25zX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5idXR0b25zX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5idXR0b25zX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgZmlsbDogY3VycmVudGNvbG9yO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuIiwiLyohIG5vcm1hbGl6ZS5jc3MgdjguMC4xIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xyXG5cclxuLyogRG9jdW1lbnRcclxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcbi8qKlxyXG4gKiAxLiBDb3JyZWN0IHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuXHJcbiAqIDIuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLlxyXG4gKi9cclxuXHJcbmh0bWwge1xyXG4gIGxpbmUtaGVpZ2h0OiAxLjE1OyAvKiAxICovXHJcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAyICovXHJcbn1cclxuXHJcbi8qIFNlY3Rpb25zXHJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcblxyXG4vKipcclxuICogUmVtb3ZlIHRoZSBtYXJnaW4gaW4gYWxsIGJyb3dzZXJzLlxyXG4gKi9cclxuXHJcbmJvZHkge1xyXG4gIG1hcmdpbjogMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbmRlciB0aGUgYG1haW5gIGVsZW1lbnQgY29uc2lzdGVudGx5IGluIElFLlxyXG4gKi9cclxuXHJcbm1haW4ge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcblxyXG4vKipcclxuICogQ29ycmVjdCB0aGUgZm9udCBzaXplIGFuZCBtYXJnaW4gb24gYGgxYCBlbGVtZW50cyB3aXRoaW4gYHNlY3Rpb25gIGFuZFxyXG4gKiBgYXJ0aWNsZWAgY29udGV4dHMgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgU2FmYXJpLlxyXG4gKi9cclxuXHJcbmgxIHtcclxuICBmb250LXNpemU6IDJlbTtcclxuICBtYXJnaW46IDAuNjdlbSAwO1xyXG59XHJcblxyXG4vKiBHcm91cGluZyBjb250ZW50XHJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcblxyXG4vKipcclxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cclxuICogMi4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZSBhbmQgSUUuXHJcbiAqL1xyXG5cclxuaHIge1xyXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiAxICovXHJcbiAgaGVpZ2h0OiAwOyAvKiAxICovXHJcbiAgb3ZlcmZsb3c6IHZpc2libGU7IC8qIDIgKi9cclxufVxyXG5cclxuLyoqXHJcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXHJcbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cclxuICovXHJcblxyXG5wcmUge1xyXG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xyXG4gIGZvbnQtc2l6ZTogMWVtOyAvKiAyICovXHJcbn1cclxuXHJcbi8qIFRleHQtbGV2ZWwgc2VtYW50aWNzXHJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcblxyXG4vKipcclxuICogUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgb24gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxyXG4gKi9cclxuXHJcbmEge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xyXG59XHJcblxyXG4vKipcclxuICogMS4gUmVtb3ZlIHRoZSBib3R0b20gYm9yZGVyIGluIENocm9tZSA1Ny1cclxuICogMi4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBDaHJvbWUsIEVkZ2UsIElFLCBPcGVyYSwgYW5kIFNhZmFyaS5cclxuICovXHJcblxyXG5hYmJyW3RpdGxlXSB7XHJcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTsgLyogMSAqL1xyXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKiAyICovXHJcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkOyAvKiAyICovXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCB3ZWlnaHQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxyXG4gKi9cclxuXHJcbmIsXHJcbnN0cm9uZyB7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXHJcbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cclxuICovXHJcblxyXG5jb2RlLFxyXG5rYmQsXHJcbnNhbXAge1xyXG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTsgLyogMSAqL1xyXG4gIGZvbnQtc2l6ZTogMWVtOyAvKiAyICovXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cclxuICovXHJcblxyXG5zbWFsbCB7XHJcbiAgZm9udC1zaXplOiA4MCU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcmV2ZW50IGBzdWJgIGFuZCBgc3VwYCBlbGVtZW50cyBmcm9tIGFmZmVjdGluZyB0aGUgbGluZSBoZWlnaHQgaW5cclxuICogYWxsIGJyb3dzZXJzLlxyXG4gKi9cclxuXHJcbnN1Yixcclxuc3VwIHtcclxuICBmb250LXNpemU6IDc1JTtcclxuICBsaW5lLWhlaWdodDogMDtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xyXG59XHJcblxyXG5zdWIge1xyXG4gIGJvdHRvbTogLTAuMjVlbTtcclxufVxyXG5cclxuc3VwIHtcclxuICB0b3A6IC0wLjVlbTtcclxufVxyXG5cclxuLyogRW1iZWRkZWQgY29udGVudFxyXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgYm9yZGVyIG9uIGltYWdlcyBpbnNpZGUgbGlua3MgaW4gSUUgMTAuXHJcbiAqL1xyXG5cclxuaW1nIHtcclxuICBib3JkZXItc3R5bGU6IG5vbmU7XHJcbn1cclxuXHJcbi8qIEZvcm1zXHJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcblxyXG4vKipcclxuICogMS4gQ2hhbmdlIHRoZSBmb250IHN0eWxlcyBpbiBhbGwgYnJvd3NlcnMuXHJcbiAqIDIuIFJlbW92ZSB0aGUgbWFyZ2luIGluIEZpcmVmb3ggYW5kIFNhZmFyaS5cclxuICovXHJcblxyXG5idXR0b24sXHJcbmlucHV0LFxyXG5vcHRncm91cCxcclxuc2VsZWN0LFxyXG50ZXh0YXJlYSB7XHJcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7IC8qIDEgKi9cclxuICBmb250LXNpemU6IDEwMCU7IC8qIDEgKi9cclxuICBsaW5lLWhlaWdodDogMS4xNTsgLyogMSAqL1xyXG4gIG1hcmdpbjogMDsgLyogMiAqL1xyXG59XHJcblxyXG4vKipcclxuICogU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXHJcbiAqIDEuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UuXHJcbiAqL1xyXG5cclxuYnV0dG9uLFxyXG5pbnB1dCB7IC8qIDEgKi9cclxuICBvdmVyZmxvdzogdmlzaWJsZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLlxyXG4gKiAxLiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3guXHJcbiAqL1xyXG5cclxuYnV0dG9uLFxyXG5zZWxlY3QgeyAvKiAxICovXHJcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxyXG4gKi9cclxuXHJcbmJ1dHRvbixcclxuW3R5cGU9XCJidXR0b25cIl0sXHJcblt0eXBlPVwicmVzZXRcIl0sXHJcblt0eXBlPVwic3VibWl0XCJdIHtcclxuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgaW5uZXIgYm9yZGVyIGFuZCBwYWRkaW5nIGluIEZpcmVmb3guXHJcbiAqL1xyXG5cclxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxyXG5bdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixcclxuW3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcclxuW3R5cGU9XCJzdWJtaXRcIl06Oi1tb3otZm9jdXMtaW5uZXIge1xyXG4gIGJvcmRlci1zdHlsZTogbm9uZTtcclxuICBwYWRkaW5nOiAwO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzdG9yZSB0aGUgZm9jdXMgc3R5bGVzIHVuc2V0IGJ5IHRoZSBwcmV2aW91cyBydWxlLlxyXG4gKi9cclxuXHJcbmJ1dHRvbjotbW96LWZvY3VzcmluZyxcclxuW3R5cGU9XCJidXR0b25cIl06LW1vei1mb2N1c3JpbmcsXHJcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXHJcblt0eXBlPVwic3VibWl0XCJdOi1tb3otZm9jdXNyaW5nIHtcclxuICBvdXRsaW5lOiAxcHggZG90dGVkIEJ1dHRvblRleHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb3JyZWN0IHRoZSBwYWRkaW5nIGluIEZpcmVmb3guXHJcbiAqL1xyXG5cclxuZmllbGRzZXQge1xyXG4gIHBhZGRpbmc6IDAuMzVlbSAwLjc1ZW0gMC42MjVlbTtcclxufVxyXG5cclxuLyoqXHJcbiAqIDEuIENvcnJlY3QgdGhlIHRleHQgd3JhcHBpbmcgaW4gRWRnZSBhbmQgSUUuXHJcbiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cclxuICogMy4gUmVtb3ZlIHRoZSBwYWRkaW5nIHNvIGRldmVsb3BlcnMgYXJlIG5vdCBjYXVnaHQgb3V0IHdoZW4gdGhleSB6ZXJvIG91dFxyXG4gKiAgICBgZmllbGRzZXRgIGVsZW1lbnRzIGluIGFsbCBicm93c2Vycy5cclxuICovXHJcblxyXG5sZWdlbmQge1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8qIDEgKi9cclxuICBjb2xvcjogaW5oZXJpdDsgLyogMiAqL1xyXG4gIGRpc3BsYXk6IHRhYmxlOyAvKiAxICovXHJcbiAgbWF4LXdpZHRoOiAxMDAlOyAvKiAxICovXHJcbiAgcGFkZGluZzogMDsgLyogMyAqL1xyXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7IC8qIDEgKi9cclxufVxyXG5cclxuLyoqXHJcbiAqIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXHJcbiAqL1xyXG5cclxucHJvZ3Jlc3Mge1xyXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgMTArLlxyXG4gKi9cclxuXHJcbnRleHRhcmVhIHtcclxuICBvdmVyZmxvdzogYXV0bztcclxufVxyXG5cclxuLyoqXHJcbiAqIDEuIEFkZCB0aGUgY29ycmVjdCBib3ggc2l6aW5nIGluIElFIDEwLlxyXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAuXHJcbiAqL1xyXG5cclxuW3R5cGU9XCJjaGVja2JveFwiXSxcclxuW3R5cGU9XCJyYWRpb1wiXSB7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDsgLyogMSAqL1xyXG4gIHBhZGRpbmc6IDA7IC8qIDIgKi9cclxufVxyXG5cclxuLyoqXHJcbiAqIENvcnJlY3QgdGhlIGN1cnNvciBzdHlsZSBvZiBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBidXR0b25zIGluIENocm9tZS5cclxuICovXHJcblxyXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcclxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xyXG4gIGhlaWdodDogYXV0bztcclxufVxyXG5cclxuLyoqXHJcbiAqIDEuIENvcnJlY3QgdGhlIG9kZCBhcHBlYXJhbmNlIGluIENocm9tZSBhbmQgU2FmYXJpLlxyXG4gKiAyLiBDb3JyZWN0IHRoZSBvdXRsaW5lIHN0eWxlIGluIFNhZmFyaS5cclxuICovXHJcblxyXG5bdHlwZT1cInNlYXJjaFwiXSB7XHJcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8qIDEgKi9cclxuICBvdXRsaW5lLW9mZnNldDogLTJweDsgLyogMiAqL1xyXG59XHJcblxyXG4vKipcclxuICogUmVtb3ZlIHRoZSBpbm5lciBwYWRkaW5nIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIG1hY09TLlxyXG4gKi9cclxuXHJcblt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHtcclxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiAxLiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxyXG4gKiAyLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBTYWZhcmkuXHJcbiAqL1xyXG5cclxuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XHJcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247IC8qIDEgKi9cclxuICBmb250OiBpbmhlcml0OyAvKiAyICovXHJcbn1cclxuXHJcbi8qIEludGVyYWN0aXZlXHJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcblxyXG4vKlxyXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSAxMCssIGFuZCBGaXJlZm94LlxyXG4gKi9cclxuXHJcbmRldGFpbHMge1xyXG4gIGRpc3BsYXk6IGJsb2NrO1xyXG59XHJcblxyXG4vKlxyXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBhbGwgYnJvd3NlcnMuXHJcbiAqL1xyXG5cclxuc3VtbWFyeSB7XHJcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xyXG59XHJcblxyXG4vKiBNaXNjXHJcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXHJcblxyXG4vKipcclxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxyXG4gKi9cclxuXHJcbnRlbXBsYXRlIHtcclxuICBkaXNwbGF5OiBub25lO1xyXG59XHJcblxyXG4vKipcclxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAuXHJcbiAqL1xyXG5cclxuW2hpZGRlbl0ge1xyXG4gIGRpc3BsYXk6IG5vbmU7XHJcbn1cclxuIiwiQGltcG9ydCAnY29sb3JzJztcclxuXHJcbi8qID09PT09IEJhc2UgPT09PT0gKi9cclxuaHRtbCxcclxuYm9keSB7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGJhY2tncm91bmQ6IEBiZ19jb2xvcjtcclxuICBjb2xvcjogQHByaW1hcnlfdGV4dF9jb2xvcjtcclxuICBmb250LXNpemU6IDE0cHg7XHJcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XHJcbiAgZm9udC1mYW1pbHk6IFwiTWljcm9zb2Z0IFlhSGVpIFVJXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbn1cclxuXHJcbmEge1xyXG4gICY6bGluayxcclxuICAmOnZpc2l0ZWQsXHJcbiAgJjpob3ZlciB7XHJcbiAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgfVxyXG5cclxuICAmOmhvdmVyIHtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gIH1cclxufVxyXG5cclxuY29kZSB7XHJcbiAgZm9udC1mYW1pbHk6IFwiU291cmNlIENvZGUgUHJvXCIsIENvbnNvbGFzLCBHZW9yZ2lhLCBNb25hY28sIG1vbm9zcGFjZSwgQXJpYWwsIHNhbnMtc2VyaWY7XHJcbn1cclxuIiwiLyogPT09PT0gU2Nyb2xsYmFyID09PT09ICovXHJcbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xyXG4gIHdpZHRoOiA3cHg7XHJcbiAgaGVpZ2h0OiA3cHg7XHJcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XHJcbn1cclxuXHJcbjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2Uge1xyXG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xyXG59XHJcblxyXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOnZlcnRpY2FsIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xyXG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xyXG59XHJcblxyXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvcml6b250YWwge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XHJcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XHJcbn1cclxuXHJcbjo6LXdlYmtpdC1zY3JvbGxiYXI6aG92ZXIge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xNSk7XHJcbn1cclxuXHJcbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zNSk7XHJcbn1cclxuIiwiQGltcG9ydCAnY29sb3JzJztcclxuXHJcbi8qIExheW91dCAqL1xyXG4uZG9jcyB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gIGZsZXgtd3JhcDogbm93cmFwO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAxO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICB3aWR0aDogMTAwJTtcclxuICBtYXJnaW46IDA7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxufVxyXG5cclxuLyogQXNpZGUgKi9cclxuLmFzaWRlIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtc2hyaW5rOiAwO1xyXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgd2lkdGg6IDI2MHB4O1xyXG4gIG1hcmdpbjogMDtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQHByaW1hcnlfdGV4dF9jb2xvcjtcclxuICBjb2xvcjogQGJvcmRlcl9jb2xvcjtcclxuICBib3gtc2hhZG93OiAwIDAgNXB4IDJweCBAYm9yZGVyX2NvbG9yO1xyXG4gIG92ZXJmbG93OiBhdXRvO1xyXG59XHJcblxyXG4vKiBNYWluICovXHJcbi5tYWluIHtcclxuICBmbGV4OiAxO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAxO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2hpdGU7XHJcbiAgb3ZlcmZsb3c6IGF1dG87XHJcbn1cclxuIiwiQGltcG9ydCAnY29sb3JzJztcclxuXHJcbi5hc2lkZSB7XHJcbiAgZm9udC1mYW1pbHk6IFwiU291cmNlIENvZGUgUHJvXCIsIENvbnNvbGFzLCBHZW9yZ2lhLCBNb25hY28sIG1vbm9zcGFjZSwgQXJpYWwsIHNhbnMtc2VyaWY7XHJcblxyXG4gICZfX2hlYWRlciB7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX25hdiB7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgfVxyXG5cclxuICAmX19oMiB7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIGhlaWdodDogNTRweDtcclxuICAgIGxpbmUtaGVpZ2h0OiA1NHB4O1xyXG4gICAgZm9udC1zaXplOiAyMHB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICAgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBDb25zb2xhcywgQXJpYWwsIHNhbnMtc2VyaWY7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9faDMge1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBwYWRkaW5nOiAwIDIwcHg7XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fbGlzdCB7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAxMHB4IDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9faXRlbSB7XHJcbiAgICBoZWlnaHQ6IDMycHg7XHJcbiAgICBsaW5lLWhlaWdodDogMzJweDtcclxuICAgIHBhZGRpbmc6IDAgMzBweDtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICAgJi5hY3RpdmUsXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHNlY29uZGFyeV90ZXh0X2NvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgICYuYWN0aXZlIHtcclxuICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCBAd2hpdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX19hbmNob3I6bGluayB7XHJcbiAgICBjb2xvcjogQGJvcmRlcl9jb2xvcjtcclxuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICB9XHJcblxyXG4gICZfX2FuY2hvcjp2aXNpdGVkIHtcclxuICAgIGNvbG9yOiBAYm9yZGVyX2NvbG9yO1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gIH1cclxuXHJcbiAgJl9fYW5jaG9yOmhvdmVyIHtcclxuICAgIGNvbG9yOiBAYm9yZGVyX2NvbG9yO1xyXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XHJcbiAgfVxyXG59XHJcbiIsIkBpbXBvcnQgJ2NvbG9ycyc7XHJcblxyXG4ubWFpbiB7XHJcbiAgJl9faGVhZGVyLFxyXG4gICZfX2Zvb3RlciB7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIHBhZGRpbmc6IDFlbTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19oMSB7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIHBhZGRpbmctdG9wOiAxZW07XHJcbiAgICBmb250LXNpemU6IDVlbTtcclxuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgICBsaW5lLWhlaWdodDogMi4wZW07XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fbmFtZSB7XHJcbiAgICBjb2xvcjogQHByaW1hcnlfY29sb3I7XHJcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xyXG4gIH1cclxuXHJcbiAgJl9fdGFnbGluZSB7XHJcbiAgICBtYXJnaW46IDFlbSBhdXRvO1xyXG4gICAgbWF4LXdpZHRoOiA2NjBweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjNlbTtcclxuICAgIGZvbnQtc2l6ZTogMmVtO1xyXG4gICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuICAgIGZvbnQtd2VpZ2h0OiAxMDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fY2RuIHtcclxuICAgIG1hcmdpbjogMmVtIDA7XHJcbiAgICBwYWRkaW5nOiAyZW07XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICBsaW5lLWhlaWdodDogMTUwJTtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEBiZ19jb2xvcjtcclxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgICBjb2xvcjogQHRoaXJkX3RleHRfY29sb3I7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fZG93bmxvYWR7XHJcbiAgICBtYXJnaW46IDFlbSBhdXRvO1xyXG4gICAgd2lkdGg6IDIwMHB4O1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX2J1dHRvbiB7XHJcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICBwYWRkaW5nOiAxNHB4IDI5cHg7XHJcbiAgICBmb250LXNpemU6IDE4cHg7XHJcbiAgICBmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgQ29uc29sYXMsIEdlb3JnaWEsIE1vbmFjbywgbW9ub3NwYWNlLCBBcmlhbCwgc2Fucy1zZXJpZjtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgICAmOmxpbmssXHJcbiAgICAmOnZpc2l0ZWQsXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgY29sb3I6IEB3aGl0ZTtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9fZm9vdGVyIHtcclxuICAgIG1hcmdpbjogMCAzZW07XHJcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcclxuICB9XHJcbn1cclxuIiwiQGltcG9ydCAnY29sb3JzJztcclxuXHJcbi5zZWN0aW9uIHtcclxuICBtYXJnaW46IDFlbSAwO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICZfX2hlYWRlcixcclxuICAmX19jb250ZW50LFxyXG4gICZfX2Zvb3RlciB7XHJcbiAgICBtYXJnaW46IDAgM2VtO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX3RpdGxlIHtcclxuICAgIGNvbG9yOiBAdGhpcmRfdGV4dF9jb2xvcjtcclxuICB9XHJcblxyXG4gICZfX2gzIHtcclxuICAgIGNvbG9yOiBAcHJpbWFyeV9jb2xvcjtcclxuICAgIGZvbnQtc2l6ZTogMS4zNWVtO1xyXG4gIH1cclxuXHJcbiAgJl9faDQge1xyXG4gICAgZm9udC1zaXplOiAxLjFlbTtcclxuICAgIGNvbG9yOiBAdGhpcmRfdGV4dF9jb2xvcjtcclxuICB9XHJcblxyXG4gICZfX2g1IHtcclxuICAgIGZvbnQtc2l6ZTogMWVtO1xyXG4gICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuICB9XHJcblxyXG4gICZfX2RsLFxyXG4gICZfX2R0LFxyXG4gICZfX2RkIHtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fZGwge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogMTtcclxuICB9XHJcblxyXG4gICZfX2R0IHtcclxuICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrO1xyXG4gIH1cclxuXHJcbiAgJl9fZGQge1xyXG4gICAgZGlzcGxheTppbmxpbmUtYmxvY2s7XHJcbiAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgfVxyXG5cclxuICAmX19wcmUge1xyXG4gICAgbWFyZ2luOiAyZW0gMDtcclxuICAgIHBhZGRpbmc6IDFlbTtcclxuICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxNTAlO1xyXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEBiZ19jb2xvcjtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICBjb2xvcjogQHRoaXJkX3RleHRfY29sb3I7XHJcbiAgICBvdmVyZmxvdzogYXV0bztcclxuICB9XHJcblxyXG4gICZfX2NvZGUge1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19mb290ZXIge1xyXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgICBtYXJnaW4tdG9wOiAzZW07XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmdfY29sb3I7XHJcbiAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xyXG4gIH1cclxufVxyXG4iLCJAaW1wb3J0ICcuL2NvbG9ycyc7XHJcblxyXG4uY2FzZSB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHotaW5kZXg6IDE7XHJcbiAgZGlzcGxheTogZ3JpZDtcclxuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xyXG4gIGdhcDogNDBweDtcclxuICBwYWRkaW5nOiAxZW07XHJcbiAgYm9yZGVyLXRvcDoxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcclxuICBib3JkZXItYm90dG9tOjFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICY6YWZ0ZXIge1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB6LWluZGV4OiAyO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fcHJlLFxyXG4gICZfX3RleHRhcmVhIHtcclxuICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxNTAlO1xyXG4gIH1cclxuXHJcbiAgJl9fcHJlLFxyXG4gICZfX2NvZGUsXHJcbiAgJl9fdGV4dGFyZWEge1xyXG4gICAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ29uc29sYXMsIEdlb3JnaWEsIEFyaWFsLCBzYW5zLXNlcmlmO1xyXG4gIH1cclxuXHJcbiAgJl9fcHJlIHtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDFlbTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEBiZ19jb2xvcjtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBvdmVyZmxvdzogYXV0bztcclxuICB9XHJcblxyXG4gICZfX3Rvb2xiYXIge1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBoZWlnaHQ6IDM2cHg7XHJcbiAgICBsaW5lLWhlaWdodDogMzZweDtcclxuICAgIGZvbnQtc2l6ZTogMTRweDtcclxuICAgIHBhZGRpbmc6IDAgMTZweDtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX2FjdGlvbixcclxuICAmX19yZW1vdmUge1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xyXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgfVxyXG5cclxuICAmX19hY3Rpb24ge1xyXG4gICAgZm9udC1zaXplOiAxM3B4O1xyXG4gICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xyXG5cclxuICAgICY6Zmlyc3QtY2hpbGQge1xyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX19yZW1vdmUge1xyXG4gICAgZmxvYXQ6IHJpZ2h0O1xyXG4gIH1cclxuXHJcbiAgJl9fY29uc29sZSB7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIGhlaWdodDogMTgwcHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX3RleHRhcmVhIHtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgcGFkZGluZzogMWVtO1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gIH1cclxuXHJcbiAgJl9fbGlzdCxcclxuICAmX19pdGVtIHtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fbGlzdCB7XHJcbiAgICBoZWlnaHQ6IDM2MHB4O1xyXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcclxuICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gIH1cclxuXHJcbiAgJl9faXRlbSB7XHJcbiAgICBoZWlnaHQ6IDM2cHg7XHJcbiAgICBsaW5lLWhlaWdodDogMzZweDtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIHBhZGRpbmc6IDAgMTZweDtcclxuXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGhvdmVyX2JnX2NvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJAaW1wb3J0ICcuL2NvbG9ycyc7XHJcblxyXG4uYnV0dG9ucyB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHotaW5kZXg6IDI7XHJcbiAgdG9wOiA1MCU7XHJcbiAgcmlnaHQ6IDEycHg7XHJcbiAgbWFyZ2luOiAwO1xyXG4gIHdpZHRoOiA1NnB4O1xyXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAmX19pdGVtIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHotaW5kZXg6IDE7XHJcbiAgICBtYXJnaW46IDEwcHg7XHJcbiAgICB3aWR0aDogMzZweDtcclxuICAgIGhlaWdodDogMzZweDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICBib3gtc2hhZG93OiAwIDAgNnB4IEBib3JkZXJfY29sb3I7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICAmLmhpZGUge1xyXG4gICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9fYW5jaG9yIHtcclxuICAgICY6bGluayxcclxuICAgICY6dmlzaXRlZCxcclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX19pY29uIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbiAgICBmaWxsOiBjdXJyZW50Y29sb3I7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxufVxyXG4iXX0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLzxpbnB1dCBjc3MgMT4iLCJub3JtYWxpemUubGVzcyIsImJhc2UubGVzcyIsInNjcm9sbGJhci5sZXNzIiwibGF5b3V0Lmxlc3MiLCJhc2lkZS5sZXNzIiwibWFpbi5sZXNzIiwic2VjdGlvbi5sZXNzIiwiY2FzZS5sZXNzIiwiYnV0dG9ucy5sZXNzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRFQUE0RTtBQUM1RTtnRkFDZ0Y7QUFDaEY7OztHQUdHO0FDSUg7RUFDRSxrQkFBQTtFREZBLE9BQU87RUNHUCwrQkFBQTtFRERBLE9BQU87Q0FDUjtBQUNEO2dGQUNnRjtBQUNoRjs7R0FFRztBQ0tIO0VBQ0UsVUFBQTtDREhEO0FBQ0Q7O0dBRUc7QUNPSDtFQUNFLGVBQUE7Q0RMRDtBQUNEOzs7R0FHRztBQ1NIO0VBQ0UsZUFBQTtFQUNBLGlCQUFBO0NEUEQ7QUFDRDtnRkFDZ0Y7QUFDaEY7OztHQUdHO0FDWUg7RUFDRSxnQ0FBQTtVQUFBLHdCQUFBO0VEVkEsT0FBTztFQ1dQLFVBQUE7RURUQSxPQUFPO0VDVVAsa0JBQUE7RURSQSxPQUFPO0NBQ1I7QUFDRDs7O0dBR0c7QUNXSDtFQUNFLGtDQUFBO0VEVEEsT0FBTztFQ1VQLGVBQUE7RURSQSxPQUFPO0NBQ1I7QUFDRDtnRkFDZ0Y7QUFDaEY7O0dBRUc7QUNZSDtFQUNFLDhCQUFBO0NEVkQ7QUFDRDs7O0dBR0c7QUNjSDtFQUNFLG9CQUFBO0VEWkEsT0FBTztFQ2FQLDJCQUFBO0VEWEEsT0FBTztFQ1lQLDBDQUFBO1VBQUEsa0NBQUE7RURWQSxPQUFPO0NBQ1I7QUFDRDs7R0FFRztBQ2FIOztFQUVFLG9CQUFBO0NEWEQ7QUFDRDs7O0dBR0c7QUNlSDs7O0VBR0Usa0NBQUE7RURiQSxPQUFPO0VDY1AsZUFBQTtFRFpBLE9BQU87Q0FDUjtBQUNEOztHQUVHO0FDZUg7RUFDRSxlQUFBO0NEYkQ7QUFDRDs7O0dBR0c7QUNpQkg7O0VBRUUsZUFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtFQUNB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LGVBQUE7Q1JzakJIO0FRbmpCQzs7RUFFRSxVQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VBQ0EsaUJBQUE7Q1JxakJIO0FRbGpCQztFQUNFLGNBQUE7RUFDQSwyQkFBQTtFQUNBLDhCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0NSb2pCSDtBUWpqQkM7RUFDRSxhQUFBO0VBQ0Esa0JBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0NSbWpCSDtBUWpqQkc7RUFDRSwwQkFBQTtDUm1qQkw7QVN2cUJEO0VBQ0UsZ0JBQUE7RUFDQSxXQUFBO0VBQ0EsU0FBQTtFQUNBLFlBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtFQUNBLG9DQUFBO1VBQUEsNEJBQUE7RUFDQSxpQkFBQTtDVHlxQkQ7QVN2cUJDO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsYUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFQUNBLGlDQUFBO1VBQUEseUJBQUE7RUFDQSwrQkFBQTtVQUFBLHVCQUFBO0VBQ0EsdUJBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLGlCQUFBO0NUeXFCSDtBU3ZxQkc7RUFDRSxlQUFBO0NUeXFCTDtBU3RxQkc7RUFDRSxjQUFBO0NUd3FCTDtBU25xQkc7OztFQUdFLFlBQUE7Q1RxcUJMO0FTbHFCRztFQUNFLGVBQUE7Q1RvcUJMO0FTaHFCQztFQUNFLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSx5Q0FBQTtVQUFBLGlDQUFBO0VBQ0EsbUJBQUE7RUFDQSxpQkFBQTtDVGtxQkgiLCJmaWxlIjoiZG9jcy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgbm9ybWFsaXplLmNzcyB2OC4wLjEgfCBNSVQgTGljZW5zZSB8IGdpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzICovXG4vKiBEb2N1bWVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgbGluZSBoZWlnaHQgaW4gYWxsIGJyb3dzZXJzLlxuICogMi4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpbiBpT1MuXG4gKi9cbmh0bWwge1xuICBsaW5lLWhlaWdodDogMS4xNTtcbiAgLyogMSAqL1xuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gIC8qIDIgKi9cbn1cbi8qIFNlY3Rpb25zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbmJvZHkge1xuICBtYXJnaW46IDA7XG59XG4vKipcbiAqIFJlbmRlciB0aGUgYG1haW5gIGVsZW1lbnQgY29uc2lzdGVudGx5IGluIElFLlxuICovXG5tYWluIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4vKipcbiAqIENvcnJlY3QgdGhlIGZvbnQgc2l6ZSBhbmQgbWFyZ2luIG9uIGBoMWAgZWxlbWVudHMgd2l0aGluIGBzZWN0aW9uYCBhbmRcbiAqIGBhcnRpY2xlYCBjb250ZXh0cyBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBTYWZhcmkuXG4gKi9cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG4vKiBHcm91cGluZyBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBGaXJlZm94LlxuICogMi4gU2hvdyB0aGUgb3ZlcmZsb3cgaW4gRWRnZSBhbmQgSUUuXG4gKi9cbmhyIHtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIC8qIDEgKi9cbiAgaGVpZ2h0OiAwO1xuICAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICAvKiAyICovXG59XG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnByZSB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTtcbiAgLyogMiAqL1xufVxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqL1xuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLyoqXG4gKiAxLiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgaW4gQ2hyb21lIDU3LVxuICogMi4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBDaHJvbWUsIEVkZ2UsIElFLCBPcGVyYSwgYW5kIFNhZmFyaS5cbiAqL1xuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lO1xuICAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAvKiAyICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcbiAgLyogMiAqL1xufVxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCB3ZWlnaHQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICovXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuY29kZSxcbmtiZCxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIC8qIDEgKi9cbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG4vKipcbiAqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGVsZW1lbnRzIGZyb20gYWZmZWN0aW5nIHRoZSBsaW5lIGhlaWdodCBpblxuICogYWxsIGJyb3dzZXJzLlxuICovXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG4vKiBFbWJlZGRlZCBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuICovXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQ2hhbmdlIHRoZSBmb250IHN0eWxlcyBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gKi9cbmJ1dHRvbixcbmlucHV0LFxub3B0Z3JvdXAsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAvKiAxICovXG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgLyogMSAqL1xuICBsaW5lLWhlaWdodDogMS4xNTtcbiAgLyogMSAqL1xuICBtYXJnaW46IDA7XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKiAxLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLlxuICovXG5idXR0b24sXG5pbnB1dCB7XG4gIC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4vKipcbiAqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLlxuICogMS4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBGaXJlZm94LlxuICovXG5idXR0b24sXG5zZWxlY3Qge1xuICAvKiAxICovXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLyoqXG4gKiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICovXG5idXR0b24sXG5bdHlwZT1cImJ1dHRvblwiXSxcblt0eXBlPVwicmVzZXRcIl0sXG5bdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xufVxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwicmVzZXRcIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cbi8qKlxuICogUmVzdG9yZSB0aGUgZm9jdXMgc3R5bGVzIHVuc2V0IGJ5IHRoZSBwcmV2aW91cyBydWxlLlxuICovXG5idXR0b246LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZyB7XG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbn1cbi8qKlxuICogQ29ycmVjdCB0aGUgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5maWVsZHNldCB7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjc1ZW0gMC42MjVlbTtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cbiAqIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXRcbiAqICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5sZWdlbmQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvKiAxICovXG4gIGNvbG9yOiBpbmhlcml0O1xuICAvKiAyICovXG4gIGRpc3BsYXk6IHRhYmxlO1xuICAvKiAxICovXG4gIG1heC13aWR0aDogMTAwJTtcbiAgLyogMSAqL1xuICBwYWRkaW5nOiAwO1xuICAvKiAzICovXG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gIC8qIDEgKi9cbn1cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cbiAqL1xucHJvZ3Jlc3Mge1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG4vKipcbiAqIFJlbW92ZSB0aGUgZGVmYXVsdCB2ZXJ0aWNhbCBzY3JvbGxiYXIgaW4gSUUgMTArLlxuICovXG50ZXh0YXJlYSB7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLyoqXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBJRSAxMC5cbiAqIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC5cbiAqL1xuW3R5cGU9XCJjaGVja2JveFwiXSxcblt0eXBlPVwicmFkaW9cIl0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAvKiAxICovXG4gIHBhZGRpbmc6IDA7XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogQ29ycmVjdCB0aGUgY3Vyc29yIHN0eWxlIG9mIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGJ1dHRvbnMgaW4gQ2hyb21lLlxuICovXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBvZGQgYXBwZWFyYW5jZSBpbiBDaHJvbWUgYW5kIFNhZmFyaS5cbiAqIDIuIENvcnJlY3QgdGhlIG91dGxpbmUgc3R5bGUgaW4gU2FmYXJpLlxuICovXG5bdHlwZT1cInNlYXJjaFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xuICAvKiAxICovXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xuICAvKiAyICovXG59XG4vKipcbiAqIFJlbW92ZSB0aGUgaW5uZXIgcGFkZGluZyBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBtYWNPUy5cbiAqL1xuW3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKiAyLiBDaGFuZ2UgZm9udCBwcm9wZXJ0aWVzIHRvIGBpbmhlcml0YCBpbiBTYWZhcmkuXG4gKi9cbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbiAgLyogMSAqL1xuICBmb250OiBpbmhlcml0O1xuICAvKiAyICovXG59XG4vKiBJbnRlcmFjdGl2ZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBFZGdlLCBJRSAxMCssIGFuZCBGaXJlZm94LlxuICovXG5kZXRhaWxzIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG4vKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5zdW1tYXJ5IHtcbiAgZGlzcGxheTogbGlzdC1pdGVtO1xufVxuLyogTWlzY1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTArLlxuICovXG50ZW1wbGF0ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDEwLlxuICovXG5baGlkZGVuXSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4vKiA9PT09PSBCYXNlID09PT09ICovXG5odG1sLFxuYm9keSB7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZDogI2ZhZmFmYTtcbiAgY29sb3I6ICMzMzM7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIGZvbnQtZmFtaWx5OiBcIk1pY3Jvc29mdCBZYUhlaSBVSVwiLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbmE6bGluayxcbmE6dmlzaXRlZCxcbmE6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuY29kZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlNvdXJjZSBDb2RlIFByb1wiLCBDb25zb2xhcywgR2VvcmdpYSwgTW9uYWNvLCBtb25vc3BhY2UsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLyogPT09PT0gU2Nyb2xsYmFyID09PT09ICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDdweDtcbiAgaGVpZ2h0OiA3cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuLyogTGF5b3V0ICovXG4uZG9jcyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi8qIEFzaWRlICovXG4uYXNpZGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXNocmluazogMDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIHdpZHRoOiAyNjBweDtcbiAgbWFyZ2luOiAwO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gIGNvbG9yOiAjZGRkO1xuICBib3gtc2hhZG93OiAwIDAgNXB4IDJweCAjZGRkO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi8qIE1haW4gKi9cbi5tYWluIHtcbiAgZmxleDogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmFzaWRlIHtcbiAgZm9udC1mYW1pbHk6IFwiU291cmNlIENvZGUgUHJvXCIsIENvbnNvbGFzLCBHZW9yZ2lhLCBNb25hY28sIG1vbm9zcGFjZSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG4uYXNpZGVfX2hlYWRlciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBmbGV4LXNocmluazogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9fbmF2IHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uYXNpZGVfX2gyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogNTRweDtcbiAgbGluZS1oZWlnaHQ6IDU0cHg7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgZm9udC1mYW1pbHk6IEdlb3JnaWEsIENvbnNvbGFzLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmFzaWRlX19oMyB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAwIDIwcHg7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9fbGlzdCB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMTBweCAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmFzaWRlX19pdGVtIHtcbiAgaGVpZ2h0OiAzMnB4O1xuICBsaW5lLWhlaWdodDogMzJweDtcbiAgcGFkZGluZzogMCAzMHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9faXRlbS5hY3RpdmUsXG4uYXNpZGVfX2l0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU1O1xufVxuLmFzaWRlX19pdGVtLmFjdGl2ZSB7XG4gIGJvcmRlci1sZWZ0OiAzcHggc29saWQgI2ZmZjtcbn1cbi5hc2lkZV9fYW5jaG9yOmxpbmsge1xuICBjb2xvcjogI2RkZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmFzaWRlX19hbmNob3I6dmlzaXRlZCB7XG4gIGNvbG9yOiAjZGRkO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4uYXNpZGVfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjZGRkO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbi5tYWluX19oZWFkZXIsXG4ubWFpbl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDFlbTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX2gxIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmctdG9wOiAxZW07XG4gIGZvbnQtc2l6ZTogNWVtO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMmVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX25hbWUge1xuICBjb2xvcjogIzFmOGRkNjtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbn1cbi5tYWluX190YWdsaW5lIHtcbiAgbWFyZ2luOiAxZW0gYXV0bztcbiAgbWF4LXdpZHRoOiA2NjBweDtcbiAgbGluZS1oZWlnaHQ6IDEuM2VtO1xuICBmb250LXNpemU6IDJlbTtcbiAgY29sb3I6ICM5OTk7XG4gIGZvbnQtd2VpZ2h0OiAxMDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWFpbl9fY2RuIHtcbiAgbWFyZ2luOiAyZW0gMDtcbiAgcGFkZGluZzogMmVtO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgY29sb3I6ICM2NjY7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWFpbl9fZG93bmxvYWQge1xuICBtYXJnaW46IDFlbSBhdXRvO1xuICB3aWR0aDogMjAwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tYWluX19idXR0b24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgcGFkZGluZzogMTRweCAyOXB4O1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtZmFtaWx5OiBcIlNvdXJjZSBDb2RlIFByb1wiLCBDb25zb2xhcywgR2VvcmdpYSwgTW9uYWNvLCBtb25vc3BhY2UsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDU4OTQyO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX2J1dHRvbjpsaW5rLFxuLm1haW5fX2J1dHRvbjp2aXNpdGVkLFxuLm1haW5fX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ubWFpbl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIDNlbTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG59XG4uc2VjdGlvbiB7XG4gIG1hcmdpbjogMWVtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9faGVhZGVyLFxuLnNlY3Rpb25fX2NvbnRlbnQsXG4uc2VjdGlvbl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIDNlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWN0aW9uX190aXRsZSB7XG4gIGNvbG9yOiAjNjY2O1xufVxuLnNlY3Rpb25fX2gzIHtcbiAgY29sb3I6ICMxZjhkZDY7XG4gIGZvbnQtc2l6ZTogMS4zNWVtO1xufVxuLnNlY3Rpb25fX2g0IHtcbiAgZm9udC1zaXplOiAxLjFlbTtcbiAgY29sb3I6ICM2NjY7XG59XG4uc2VjdGlvbl9faDUge1xuICBmb250LXNpemU6IDFlbTtcbiAgY29sb3I6ICM5OTk7XG59XG4uc2VjdGlvbl9fZGwsXG4uc2VjdGlvbl9fZHQsXG4uc2VjdGlvbl9fZGQge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fZGwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG59XG4uc2VjdGlvbl9fZHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uc2VjdGlvbl9fZGQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLnNlY3Rpb25fX3ByZSB7XG4gIG1hcmdpbjogMmVtIDA7XG4gIHBhZGRpbmc6IDFlbTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTUwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjb2xvcjogIzY2NjtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uc2VjdGlvbl9fY29kZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgYXV0bztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWN0aW9uX19mb290ZXIge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgbWFyZ2luLXRvcDogM2VtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBjb2xvcjogIzk5OTtcbn1cbi5jYXNlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICBnYXA6IDQwcHg7XG4gIHBhZGRpbmc6IDFlbTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2U6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDUwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX3ByZSxcbi5jYXNlX190ZXh0YXJlYSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG59XG4uY2FzZV9fcHJlLFxuLmNhc2VfX2NvZGUsXG4uY2FzZV9fdGV4dGFyZWEge1xuICBmb250LWZhbWlseTogXCJDb3VyaWVyIE5ld1wiLCBDb25zb2xhcywgR2VvcmdpYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG4uY2FzZV9fcHJlIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5jYXNlX190b29sYmFyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogMzZweDtcbiAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcGFkZGluZzogMCAxNnB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlX19hY3Rpb24sXG4uY2FzZV9fcmVtb3ZlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogIzA1ODk0MjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uY2FzZV9fYWN0aW9uIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG4uY2FzZV9fYWN0aW9uOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLmNhc2VfX3JlbW92ZSB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi5jYXNlX19jb25zb2xlIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogMTgwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY2FzZV9fdGV4dGFyZWEge1xuICBtYXJnaW46IDAgYXV0bztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmNhc2VfX2xpc3QsXG4uY2FzZV9faXRlbSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX2xpc3Qge1xuICBoZWlnaHQ6IDM2MHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uY2FzZV9faXRlbSB7XG4gIGhlaWdodDogMzZweDtcbiAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZzogMCAxNnB4O1xufVxuLmNhc2VfX2l0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGY5O1xufVxuLmJ1dHRvbnMge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogNTZweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmJ1dHRvbnNfX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMTBweDtcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3gtc2hhZG93OiAwIDAgNnB4ICNkZGQ7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzk5OTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5idXR0b25zX19pdGVtOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4uYnV0dG9uc19faXRlbS5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5idXR0b25zX19hbmNob3I6bGluayxcbi5idXR0b25zX19hbmNob3I6dmlzaXRlZCxcbi5idXR0b25zX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5idXR0b25zX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5idXR0b25zX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgZmlsbDogY3VycmVudGNvbG9yO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuIiwiLyohIG5vcm1hbGl6ZS5jc3MgdjguMC4xIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuXG4vKiBEb2N1bWVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBsaW5lIGhlaWdodCBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBQcmV2ZW50IGFkanVzdG1lbnRzIG9mIGZvbnQgc2l6ZSBhZnRlciBvcmllbnRhdGlvbiBjaGFuZ2VzIGluIGlPUy5cbiAqL1xuXG5odG1sIHtcbiAgbGluZS1oZWlnaHQ6IDEuMTU7IC8qIDEgKi9cbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAvKiAyICovXG59XG5cbi8qIFNlY3Rpb25zXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgbWFyZ2luIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuXG4vKipcbiAqIFJlbmRlciB0aGUgYG1haW5gIGVsZW1lbnQgY29uc2lzdGVudGx5IGluIElFLlxuICovXG5cbm1haW4ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kXG4gKiBgYXJ0aWNsZWAgY29udGV4dHMgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgU2FmYXJpLlxuICovXG5cbmgxIHtcbiAgZm9udC1zaXplOiAyZW07XG4gIG1hcmdpbjogMC42N2VtIDA7XG59XG5cbi8qIEdyb3VwaW5nIGNvbnRlbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cbiAqIDIuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UgYW5kIElFLlxuICovXG5cbmhyIHtcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7IC8qIDEgKi9cbiAgaGVpZ2h0OiAwOyAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlOyAvKiAyICovXG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuXG5wcmUge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7IC8qIDEgKi9cbiAgZm9udC1zaXplOiAxZW07IC8qIDIgKi9cbn1cblxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogUmVtb3ZlIHRoZSBncmF5IGJhY2tncm91bmQgb24gYWN0aXZlIGxpbmtzIGluIElFIDEwLlxuICovXG5cbmEge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLyoqXG4gKiAxLiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgaW4gQ2hyb21lIDU3LVxuICogMi4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBDaHJvbWUsIEVkZ2UsIElFLCBPcGVyYSwgYW5kIFNhZmFyaS5cbiAqL1xuXG5hYmJyW3RpdGxlXSB7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7IC8qIDEgKi9cbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IC8qIDIgKi9cbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkOyAvKiAyICovXG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgd2VpZ2h0IGluIENocm9tZSwgRWRnZSwgYW5kIFNhZmFyaS5cbiAqL1xuXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBpbmhlcml0YW5jZSBhbmQgc2NhbGluZyBvZiBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzLlxuICogMi4gQ29ycmVjdCB0aGUgb2RkIGBlbWAgZm9udCBzaXppbmcgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbmNvZGUsXG5rYmQsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgbW9ub3NwYWNlOyAvKiAxICovXG4gIGZvbnQtc2l6ZTogMWVtOyAvKiAyICovXG59XG5cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc21hbGwge1xuICBmb250LXNpemU6IDgwJTtcbn1cblxuLyoqXG4gKiBQcmV2ZW50IGBzdWJgIGFuZCBgc3VwYCBlbGVtZW50cyBmcm9tIGFmZmVjdGluZyB0aGUgbGluZSBoZWlnaHQgaW5cbiAqIGFsbCBicm93c2Vycy5cbiAqL1xuXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdWIge1xuICBib3R0b206IC0wLjI1ZW07XG59XG5cbnN1cCB7XG4gIHRvcDogLTAuNWVtO1xufVxuXG4vKiBFbWJlZGRlZCBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgYm9yZGVyIG9uIGltYWdlcyBpbnNpZGUgbGlua3MgaW4gSUUgMTAuXG4gKi9cblxuaW1nIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuXG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiAxLiBDaGFuZ2UgdGhlIGZvbnQgc3R5bGVzIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIFJlbW92ZSB0aGUgbWFyZ2luIGluIEZpcmVmb3ggYW5kIFNhZmFyaS5cbiAqL1xuXG5idXR0b24sXG5pbnB1dCxcbm9wdGdyb3VwLFxuc2VsZWN0LFxudGV4dGFyZWEge1xuICBmb250LWZhbWlseTogaW5oZXJpdDsgLyogMSAqL1xuICBmb250LXNpemU6IDEwMCU7IC8qIDEgKi9cbiAgbGluZS1oZWlnaHQ6IDEuMTU7IC8qIDEgKi9cbiAgbWFyZ2luOiAwOyAvKiAyICovXG59XG5cbi8qKlxuICogU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKiAxLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLlxuICovXG5cbmJ1dHRvbixcbmlucHV0IHsgLyogMSAqL1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEVkZ2UsIEZpcmVmb3gsIGFuZCBJRS5cbiAqIDEuIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRmlyZWZveC5cbiAqL1xuXG5idXR0b24sXG5zZWxlY3QgeyAvKiAxICovXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG4gKi9cblxuYnV0dG9uLFxuW3R5cGU9XCJidXR0b25cIl0sXG5bdHlwZT1cInJlc2V0XCJdLFxuW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5cbmJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwiYnV0dG9uXCJdOjotbW96LWZvY3VzLWlubmVyLFxuW3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwic3VibWl0XCJdOjotbW96LWZvY3VzLWlubmVyIHtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKipcbiAqIFJlc3RvcmUgdGhlIGZvY3VzIHN0eWxlcyB1bnNldCBieSB0aGUgcHJldmlvdXMgcnVsZS5cbiAqL1xuXG5idXR0b246LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZyB7XG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbn1cblxuLyoqXG4gKiBDb3JyZWN0IHRoZSBwYWRkaW5nIGluIEZpcmVmb3guXG4gKi9cblxuZmllbGRzZXQge1xuICBwYWRkaW5nOiAwLjM1ZW0gMC43NWVtIDAuNjI1ZW07XG59XG5cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cbiAqIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXRcbiAqICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5cbmxlZ2VuZCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8qIDEgKi9cbiAgY29sb3I6IGluaGVyaXQ7IC8qIDIgKi9cbiAgZGlzcGxheTogdGFibGU7IC8qIDEgKi9cbiAgbWF4LXdpZHRoOiAxMDAlOyAvKiAxICovXG4gIHBhZGRpbmc6IDA7IC8qIDMgKi9cbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDsgLyogMSAqL1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4gKi9cblxucHJvZ3Jlc3Mge1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBkZWZhdWx0IHZlcnRpY2FsIHNjcm9sbGJhciBpbiBJRSAxMCsuXG4gKi9cblxudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bztcbn1cblxuLyoqXG4gKiAxLiBBZGQgdGhlIGNvcnJlY3QgYm94IHNpemluZyBpbiBJRSAxMC5cbiAqIDIuIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBJRSAxMC5cbiAqL1xuXG5bdHlwZT1cImNoZWNrYm94XCJdLFxuW3R5cGU9XCJyYWRpb1wiXSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8qIDEgKi9cbiAgcGFkZGluZzogMDsgLyogMiAqL1xufVxuXG4vKipcbiAqIENvcnJlY3QgdGhlIGN1cnNvciBzdHlsZSBvZiBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBidXR0b25zIGluIENocm9tZS5cbiAqL1xuXG5bdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgaGVpZ2h0OiBhdXRvO1xufVxuXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIG9kZCBhcHBlYXJhbmNlIGluIENocm9tZSBhbmQgU2FmYXJpLlxuICogMi4gQ29ycmVjdCB0aGUgb3V0bGluZSBzdHlsZSBpbiBTYWZhcmkuXG4gKi9cblxuW3R5cGU9XCJzZWFyY2hcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDsgLyogMSAqL1xuICBvdXRsaW5lLW9mZnNldDogLTJweDsgLyogMiAqL1xufVxuXG4vKipcbiAqIFJlbW92ZSB0aGUgaW5uZXIgcGFkZGluZyBpbiBDaHJvbWUgYW5kIFNhZmFyaSBvbiBtYWNPUy5cbiAqL1xuXG5bdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLyoqXG4gKiAxLiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICogMi4gQ2hhbmdlIGZvbnQgcHJvcGVydGllcyB0byBgaW5oZXJpdGAgaW4gU2FmYXJpLlxuICovXG5cbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLyogMSAqL1xuICBmb250OiBpbmhlcml0OyAvKiAyICovXG59XG5cbi8qIEludGVyYWN0aXZlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gRWRnZSwgSUUgMTArLCBhbmQgRmlyZWZveC5cbiAqL1xuXG5kZXRhaWxzIHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cblxuc3VtbWFyeSB7XG4gIGRpc3BsYXk6IGxpc3QtaXRlbTtcbn1cblxuLyogTWlzY1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSAxMCsuXG4gKi9cblxudGVtcGxhdGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIElFIDEwLlxuICovXG5cbltoaWRkZW5dIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiIsIkBpbXBvcnQgJ2NvbG9ycyc7XG5cbi8qID09PT09IEJhc2UgPT09PT0gKi9cbmh0bWwsXG5ib2R5IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiBAYmdfY29sb3I7XG4gIGNvbG9yOiBAcHJpbWFyeV90ZXh0X2NvbG9yO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xuICBmb250LWZhbWlseTogXCJNaWNyb3NvZnQgWWFIZWkgVUlcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbmEge1xuICAmOmxpbmssXG4gICY6dmlzaXRlZCxcbiAgJjpob3ZlciB7XG4gICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG59XG5cbmNvZGUge1xuICBmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgQ29uc29sYXMsIEdlb3JnaWEsIE1vbmFjbywgbW9ub3NwYWNlLCBBcmlhbCwgc2Fucy1zZXJpZjtcbn1cbiIsIi8qID09PT09IFNjcm9sbGJhciA9PT09PSAqL1xuOjotd2Via2l0LXNjcm9sbGJhciB7XG4gIHdpZHRoOiA3cHg7XG4gIGhlaWdodDogN3B4O1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOnZlcnRpY2FsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG9yaXpvbnRhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zNSk7XG59XG4iLCJAaW1wb3J0ICdjb2xvcnMnO1xuXG4vKiBMYXlvdXQgKi9cbi5kb2NzIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4vKiBBc2lkZSAqL1xuLmFzaWRlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1zaHJpbms6IDA7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICB3aWR0aDogMjYwcHg7XG4gIG1hcmdpbjogMDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBAcHJpbWFyeV90ZXh0X2NvbG9yO1xuICBjb2xvcjogQGJvcmRlcl9jb2xvcjtcbiAgYm94LXNoYWRvdzogMCAwIDVweCAycHggQGJvcmRlcl9jb2xvcjtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG5cbi8qIE1haW4gKi9cbi5tYWluIHtcbiAgZmxleDogMTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4iLCJAaW1wb3J0ICdjb2xvcnMnO1xuXG4uYXNpZGUge1xuICBmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgQ29uc29sYXMsIEdlb3JnaWEsIE1vbmFjbywgbW9ub3NwYWNlLCBBcmlhbCwgc2Fucy1zZXJpZjtcblxuICAmX19oZWFkZXIge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19uYXYge1xuICAgIGZsZXg6IDE7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cblxuICAmX19oMiB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgaGVpZ2h0OiA1NHB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1NHB4O1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBDb25zb2xhcywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19oMyB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgcGFkZGluZzogMCAyMHB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fbGlzdCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9faXRlbSB7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgIHBhZGRpbmc6IDAgMzBweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmLmFjdGl2ZSxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBzZWNvbmRhcnlfdGV4dF9jb2xvcjtcbiAgICB9XG5cbiAgICAmLmFjdGl2ZSB7XG4gICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIEB3aGl0ZTtcbiAgICB9XG4gIH1cblxuICAmX19hbmNob3I6bGluayB7XG4gICAgY29sb3I6IEBib3JkZXJfY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICB9XG5cbiAgJl9fYW5jaG9yOnZpc2l0ZWQge1xuICAgIGNvbG9yOiBAYm9yZGVyX2NvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gICZfX2FuY2hvcjpob3ZlciB7XG4gICAgY29sb3I6IEBib3JkZXJfY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cbn1cbiIsIkBpbXBvcnQgJ2NvbG9ycyc7XG5cbi5tYWluIHtcbiAgJl9faGVhZGVyLFxuICAmX19mb290ZXIge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDFlbTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX2gxIHtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBwYWRkaW5nLXRvcDogMWVtO1xuICAgIGZvbnQtc2l6ZTogNWVtO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgbGluZS1oZWlnaHQ6IDIuMGVtO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19uYW1lIHtcbiAgICBjb2xvcjogQHByaW1hcnlfY29sb3I7XG4gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgfVxuXG4gICZfX3RhZ2xpbmUge1xuICAgIG1hcmdpbjogMWVtIGF1dG87XG4gICAgbWF4LXdpZHRoOiA2NjBweDtcbiAgICBsaW5lLWhlaWdodDogMS4zZW07XG4gICAgZm9udC1zaXplOiAyZW07XG4gICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcbiAgICBmb250LXdlaWdodDogMTAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19jZG4ge1xuICAgIG1hcmdpbjogMmVtIDA7XG4gICAgcGFkZGluZzogMmVtO1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMTUwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGJnX2NvbG9yO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICAgIGNvbG9yOiBAdGhpcmRfdGV4dF9jb2xvcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fZG93bmxvYWR7XG4gICAgbWFyZ2luOiAxZW0gYXV0bztcbiAgICB3aWR0aDogMjAwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19idXR0b24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgcGFkZGluZzogMTRweCAyOXB4O1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgQ29uc29sYXMsIEdlb3JnaWEsIE1vbmFjbywgbW9ub3NwYWNlLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgJjpsaW5rLFxuICAgICY6dmlzaXRlZCxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAd2hpdGU7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJl9fZm9vdGVyIHtcbiAgICBtYXJnaW46IDAgM2VtO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICB9XG59XG4iLCJAaW1wb3J0ICdjb2xvcnMnO1xuXG4uc2VjdGlvbiB7XG4gIG1hcmdpbjogMWVtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJl9faGVhZGVyLFxuICAmX19jb250ZW50LFxuICAmX19mb290ZXIge1xuICAgIG1hcmdpbjogMCAzZW07XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX3RpdGxlIHtcbiAgICBjb2xvcjogQHRoaXJkX3RleHRfY29sb3I7XG4gIH1cblxuICAmX19oMyB7XG4gICAgY29sb3I6IEBwcmltYXJ5X2NvbG9yO1xuICAgIGZvbnQtc2l6ZTogMS4zNWVtO1xuICB9XG5cbiAgJl9faDQge1xuICAgIGZvbnQtc2l6ZTogMS4xZW07XG4gICAgY29sb3I6IEB0aGlyZF90ZXh0X2NvbG9yO1xuICB9XG5cbiAgJl9faDUge1xuICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XG4gIH1cblxuICAmX19kbCxcbiAgJl9fZHQsXG4gICZfX2RkIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fZGwge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICB9XG5cbiAgJl9fZHQge1xuICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrO1xuICB9XG5cbiAgJl9fZGQge1xuICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrO1xuICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcbiAgfVxuXG4gICZfX3ByZSB7XG4gICAgbWFyZ2luOiAyZW0gMDtcbiAgICBwYWRkaW5nOiAxZW07XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxNTAlO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGJnX2NvbG9yO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGNvbG9yOiBAdGhpcmRfdGV4dF9jb2xvcjtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gICZfX2NvZGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19mb290ZXIge1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICAgIG1hcmdpbi10b3A6IDNlbTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmdfY29sb3I7XG4gICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcbiAgfVxufVxuIiwiQGltcG9ydCAnLi9jb2xvcnMnO1xuXG4uY2FzZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgZ2FwOiA0MHB4O1xuICBwYWRkaW5nOiAxZW07XG4gIGJvcmRlci10b3A6MXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XG4gIGJvcmRlci1ib3R0b206MXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDA7XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19wcmUsXG4gICZfX3RleHRhcmVhIHtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIH1cblxuICAmX19wcmUsXG4gICZfX2NvZGUsXG4gICZfX3RleHRhcmVhIHtcbiAgICBmb250LWZhbWlseTogXCJDb3VyaWVyIE5ld1wiLCBDb25zb2xhcywgR2VvcmdpYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIH1cblxuICAmX19wcmUge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAxZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGJnX2NvbG9yO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gICZfX3Rvb2xiYXIge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGhlaWdodDogMzZweDtcbiAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgcGFkZGluZzogMCAxNnB4O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19hY3Rpb24sXG4gICZfX3JlbW92ZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgfVxuXG4gICZfX2FjdGlvbiB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIHBhZGRpbmctbGVmdDogMTBweDtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIH1cbiAgfVxuXG4gICZfX3JlbW92ZSB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICB9XG5cbiAgJl9fY29uc29sZSB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgaGVpZ2h0OiAxODBweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX190ZXh0YXJlYSB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIHBhZGRpbmc6IDFlbTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgJl9fbGlzdCxcbiAgJl9faXRlbSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19saXN0IHtcbiAgICBoZWlnaHQ6IDM2MHB4O1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gICZfX2l0ZW0ge1xuICAgIGhlaWdodDogMzZweDtcbiAgICBsaW5lLWhlaWdodDogMzZweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcGFkZGluZzogMCAxNnB4O1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAaG92ZXJfYmdfY29sb3I7XG4gICAgfVxuICB9XG59XG4iLCJAaW1wb3J0ICcuL2NvbG9ycyc7XG5cbi5idXR0b25zIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDEycHg7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDU2cHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmX19pdGVtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBtYXJnaW46IDEwcHg7XG4gICAgd2lkdGg6IDM2cHg7XG4gICAgaGVpZ2h0OiAzNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJveC1zaGFkb3c6IDAgMCA2cHggQGJvcmRlcl9jb2xvcjtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xuICAgIH1cblxuICAgICYuaGlkZSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gICZfX2FuY2hvciB7XG4gICAgJjpsaW5rLFxuICAgICY6dmlzaXRlZCxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG4gICAgfVxuICB9XG5cbiAgJl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxufVxuIl19 */ diff --git a/docs/css/docs.min.css b/docs/css/docs.min.css index 332d551c..29aaf90a 100644 --- a/docs/css/docs.min.css +++ b/docs/css/docs.min.css @@ -1,2 +1,2 @@ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */button,hr,input{overflow:visible}progress,sub,sup{vertical-align:baseline}.aside,.main,textarea{overflow:auto}.buttons__item.hide,[hidden],template{display:none}.case,.docs,.main,.section__dl{position:relative;z-index:1}.case,.docs,.main,.section__dl,sub,sup{position:relative}html{-webkit-text-size-adjust:100%}body{margin:0}details,main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{font-size:75%;line-height:0}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}.case,.main__cdn{border-bottom:1px solid #ddd}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}.docs,body,html{overflow:hidden}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}.aside,.docs{display:-webkit-box;-webkit-box-direction:normal;margin:0;height:100%}body,html{height:100%;background:#fafafa;color:#333;font-size:14px;line-height:150%;font-family:"Microsoft YaHei UI",Arial,sans-serif}.aside,code{font-family:"Source Code Pro",Consolas,Georgia,Monaco,monospace,Arial,sans-serif}a:hover,a:link,a:visited{color:#058942;text-decoration:none}a:hover{text-decoration:underline}::-webkit-scrollbar{width:7px;height:7px;-webkit-border-radius:5px}::-webkit-scrollbar-track-piece{-webkit-border-radius:5px}::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.25);-webkit-border-radius:5px}::-webkit-scrollbar-thumb:horizontal{background-color:rgba(0,0,0,.25);-webkit-border-radius:5px}::-webkit-scrollbar:hover{background-color:rgba(0,0,0,.15)}::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.35)}.docs{display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:100%}.aside{display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:260px;background-color:#333;color:#ddd;-webkit-box-shadow:0 0 5px 2px #ddd;box-shadow:0 0 5px 2px #ddd}.main__button,.section__dd,.section__dt{display:inline-block}.main{-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%;background-color:#fff}.aside__header{margin:0 auto;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.aside__nav{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.aside__h2{margin:0 auto;height:54px;line-height:54px;font-size:20px;font-weight:400;font-family:Georgia,Consolas,Arial,sans-serif;text-align:center;overflow:hidden}.aside__h3{margin:0 auto;padding:0 20px;font-size:16px;overflow:hidden}.aside__list{margin:0;padding:10px 0;overflow:hidden}.aside__item{height:32px;line-height:32px;padding:0 30px;cursor:pointer;font-size:13px;overflow:hidden}.aside__item.active,.aside__item:hover{background-color:#555}.aside__item.active{border-left:3px solid #fff}.aside__anchor:link,.aside__anchor:visited{color:#ddd;text-decoration:none}.aside__anchor:hover{color:#ddd;text-decoration:underline}.main__footer,.main__header{margin:0 auto;padding:1em;text-align:center;overflow:hidden}.main__h1{margin:0 auto;padding-top:1em;font-size:5em;font-weight:400;line-height:2em;overflow:hidden}.main__name{color:#1f8dd6;font-weight:400}.main__tagline{margin:1em auto;max-width:660px;line-height:1.3em;font-size:2em;color:#999;font-weight:100;overflow:hidden}.main__cdn{margin:2em 0;padding:2em;font-size:16px;line-height:150%;text-align:center;background-color:#fafafa;border-top:1px solid #ddd;color:#666;overflow:hidden}.main__download{margin:1em auto;width:200px;text-align:center;overflow:hidden}.main__button{border-radius:4px;padding:14px 29px;font-size:18px;font-family:"Source Code Pro",Consolas,Georgia,Monaco,monospace,Arial,sans-serif;background-color:#058942;overflow:hidden}.main__button:hover,.main__button:link,.main__button:visited{color:#fff;text-decoration:none}.main__footer{margin:0 3em;border-top:1px solid #ddd}.section{margin:1em 0;overflow:hidden}.section__content,.section__footer,.section__header{margin:0 3em;overflow:hidden}.section__title{color:#666}.section__h3{color:#1f8dd6;font-size:1.35em}.section__h4{font-size:1.1em;color:#666}.section__h5{font-size:1em;color:#999}.section__dd,.section__dl,.section__dt{margin:0;padding:0;overflow:hidden}.section__dd{color:#058942}.section__pre{margin:2em 0;padding:1em;font-size:14px;line-height:150%;text-align:left;background-color:#fafafa;border:1px solid #ddd;border-radius:4px;color:#666;overflow:auto}.section__code{display:block;margin:0 auto;overflow:hidden}.section__footer{border-top:1px solid #ddd;margin-top:3em;background-color:#fafafa;color:#999}.case{display:grid;grid-template-columns:repeat(2,1fr);gap:40px;padding:1em;border-top:1px solid #ddd;overflow:hidden}.case:after{content:'';position:absolute;z-index:2;top:0;left:50%;height:100%;width:0;border-left:1px solid #ddd;overflow:hidden}.case__pre,.case__textarea{font-size:13px;line-height:150%}.case__code,.case__pre,.case__textarea{font-family:"Courier New",Consolas,Georgia,Arial,sans-serif}.case__pre{margin:0;padding:1em;background-color:#fafafa;height:100%;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto}.case__toolbar{margin:0 auto;height:36px;line-height:36px;font-size:14px;padding:0 16px;text-align:right;overflow:hidden}.case__action,.case__remove{cursor:pointer;color:#058942;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.case__action{font-size:13px;padding-left:10px}.case__action:first-child{padding-left:0}.case__remove{float:right}.case__console{margin:0 auto;height:180px;border:1px solid #ddd;overflow:hidden}.case__textarea{margin:0 auto;width:100%;height:100%;border:none;outline:0;padding:1em;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto}.case__item,.case__list{margin:0;padding:0;list-style-type:none;overflow:hidden}.case__list{height:360px;border-top:1px solid #ddd;border-bottom:1px solid #ddd;font-size:13px;overflow:auto}.buttons__item,.case__item{height:36px;cursor:pointer}.case__item{line-height:36px;padding:0 16px}.case__item:hover{background-color:#f7f8f9}.buttons{position:fixed;z-index:2;top:50%;right:12px;margin:0;width:56px;-webkit-transform:translateY(-50%);transform:translateY(-50%);overflow:hidden}.buttons__item{position:relative;z-index:1;margin:10px;width:36px;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 0 6px #ddd;box-shadow:0 0 6px #ddd;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;text-align:center;color:#999;overflow:hidden}.buttons__item:hover{color:#058942}.buttons__anchor:hover,.buttons__anchor:link,.buttons__anchor:visited{color:#999}.buttons__anchor:hover{color:#058942}.buttons__icon{position:absolute;z-index:2;top:50%;left:50%;width:20px;height:20px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);fill:currentcolor;overflow:hidden} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJjc3MvZG9jcy5jc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLyohIG5vcm1hbGl6ZS5jc3MgdjguMC4xIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuLyogRG9jdW1lbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGxpbmUgaGVpZ2h0IGluIGFsbCBicm93c2Vycy5cbiAqIDIuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLlxuICovXG5odG1sIHtcbiAgbGluZS1oZWlnaHQ6IDEuMTU7XG4gIC8qIDEgKi9cbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAvKiAyICovXG59XG4vKiBTZWN0aW9uc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogUmVtb3ZlIHRoZSBtYXJnaW4gaW4gYWxsIGJyb3dzZXJzLlxuICovXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuLyoqXG4gKiBSZW5kZXIgdGhlIGBtYWluYCBlbGVtZW50IGNvbnNpc3RlbnRseSBpbiBJRS5cbiAqL1xubWFpbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLyoqXG4gKiBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kXG4gKiBgYXJ0aWNsZWAgY29udGV4dHMgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgU2FmYXJpLlxuICovXG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxuLyogR3JvdXBpbmcgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cbiAqIDIuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UgYW5kIElFLlxuICovXG5ociB7XG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIC8qIDEgKi9cbiAgaGVpZ2h0OiAwO1xuICAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICAvKiAyICovXG59XG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnByZSB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTtcbiAgLyogMiAqL1xufVxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqL1xuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLyoqXG4gKiAxLiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgaW4gQ2hyb21lIDU3LVxuICogMi4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBDaHJvbWUsIEVkZ2UsIElFLCBPcGVyYSwgYW5kIFNhZmFyaS5cbiAqL1xuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lO1xuICAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAvKiAyICovXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcbiAgLyogMiAqL1xufVxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCB3ZWlnaHQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICovXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuY29kZSxcbmtiZCxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIC8qIDEgKi9cbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG4vKipcbiAqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGVsZW1lbnRzIGZyb20gYWZmZWN0aW5nIHRoZSBsaW5lIGhlaWdodCBpblxuICogYWxsIGJyb3dzZXJzLlxuICovXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG4vKiBFbWJlZGRlZCBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuICovXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQ2hhbmdlIHRoZSBmb250IHN0eWxlcyBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gKi9cbmJ1dHRvbixcbmlucHV0LFxub3B0Z3JvdXAsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAvKiAxICovXG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgLyogMSAqL1xuICBsaW5lLWhlaWdodDogMS4xNTtcbiAgLyogMSAqL1xuICBtYXJnaW46IDA7XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKiAxLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLlxuICovXG5idXR0b24sXG5pbnB1dCB7XG4gIC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4vKipcbiAqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLlxuICogMS4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBGaXJlZm94LlxuICovXG5idXR0b24sXG5zZWxlY3Qge1xuICAvKiAxICovXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLyoqXG4gKiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICovXG5idXR0b24sXG5bdHlwZT1cImJ1dHRvblwiXSxcblt0eXBlPVwicmVzZXRcIl0sXG5bdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xufVxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwicmVzZXRcIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cbi8qKlxuICogUmVzdG9yZSB0aGUgZm9jdXMgc3R5bGVzIHVuc2V0IGJ5IHRoZSBwcmV2aW91cyBydWxlLlxuICovXG5idXR0b246LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZyB7XG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbn1cbi8qKlxuICogQ29ycmVjdCB0aGUgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5maWVsZHNldCB7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjc1ZW0gMC42MjVlbTtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cbiAqIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXRcbiAqICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5sZWdlbmQge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLyogMSAqL1xuICBjb2xvcjogaW5oZXJpdDtcbiAgLyogMiAqL1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgLyogMSAqL1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8qIDEgKi9cbiAgcGFkZGluZzogMDtcbiAgLyogMyAqL1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAvKiAxICovXG59XG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4gKi9cbnByb2dyZXNzIHtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuLyoqXG4gKiBSZW1vdmUgdGhlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFIDEwKy5cbiAqL1xudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAuXG4gKi9cblt0eXBlPVwiY2hlY2tib3hcIl0sXG5bdHlwZT1cInJhZGlvXCJdIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8qIDEgKi9cbiAgcGFkZGluZzogMDtcbiAgLyogMiAqL1xufVxuLyoqXG4gKiBDb3JyZWN0IHRoZSBjdXJzb3Igc3R5bGUgb2YgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucyBpbiBDaHJvbWUuXG4gKi9cblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIG9kZCBhcHBlYXJhbmNlIGluIENocm9tZSBhbmQgU2FmYXJpLlxuICogMi4gQ29ycmVjdCB0aGUgb3V0bGluZSBzdHlsZSBpbiBTYWZhcmkuXG4gKi9cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIC8qIDEgKi9cbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBwYWRkaW5nIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIG1hY09TLlxuICovXG5bdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbiAqIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cbiAqL1xuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICAvKiAxICovXG4gIGZvbnQ6IGluaGVyaXQ7XG4gIC8qIDIgKi9cbn1cbi8qIEludGVyYWN0aXZlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLypcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIEVkZ2UsIElFIDEwKywgYW5kIEZpcmVmb3guXG4gKi9cbmRldGFpbHMge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi8qXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnN1bW1hcnkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG4vKiBNaXNjXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSAxMCsuXG4gKi9cbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAuXG4gKi9cbltoaWRkZW5dIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qID09PT09IEJhc2UgPT09PT0gKi9cbmh0bWwsXG5ib2R5IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuICBjb2xvcjogIzMzMztcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTUwJTtcbiAgZm9udC1mYW1pbHk6IFwiTWljcm9zb2Z0IFlhSGVpIFVJXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuYTpsaW5rLFxuYTp2aXNpdGVkLFxuYTpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5hOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5jb2RlIHtcbiAgZm9udC1mYW1pbHk6IFwiU291cmNlIENvZGUgUHJvXCIsIENvbnNvbGFzLCBHZW9yZ2lhLCBNb25hY28sIG1vbm9zcGFjZSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG4vKiA9PT09PSBTY3JvbGxiYXIgPT09PT0gKi9cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogN3B4O1xuICBoZWlnaHQ6IDdweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOnZlcnRpY2FsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zNSk7XG59XG4vKiBMYXlvdXQgKi9cbi5kb2NzIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLyogQXNpZGUgKi9cbi5hc2lkZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgd2lkdGg6IDI2MHB4O1xuICBtYXJnaW46IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcbiAgY29sb3I6ICNkZGQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDVweCAycHggI2RkZDtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNXB4IDJweCAjZGRkO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi8qIE1haW4gKi9cbi5tYWluIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5hc2lkZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlNvdXJjZSBDb2RlIFByb1wiLCBDb25zb2xhcywgR2VvcmdpYSwgTW9uYWNvLCBtb25vc3BhY2UsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLmFzaWRlX19oZWFkZXIge1xuICBtYXJnaW46IDAgYXV0bztcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9fbmF2IHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmFzaWRlX19oMiB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDU0cHg7XG4gIGxpbmUtaGVpZ2h0OiA1NHB4O1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBDb25zb2xhcywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9faDMge1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMCAyMHB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYXNpZGVfX2xpc3Qge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHggMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9faXRlbSB7XG4gIGhlaWdodDogMzJweDtcbiAgbGluZS1oZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmc6IDAgMzBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDEzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYXNpZGVfX2l0ZW0uYWN0aXZlLFxuLmFzaWRlX19pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU1NTtcbn1cbi5hc2lkZV9faXRlbS5hY3RpdmUge1xuICBib3JkZXItbGVmdDogM3B4IHNvbGlkICNmZmY7XG59XG4uYXNpZGVfX2FuY2hvcjpsaW5rIHtcbiAgY29sb3I6ICNkZGQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5hc2lkZV9fYW5jaG9yOnZpc2l0ZWQge1xuICBjb2xvcjogI2RkZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmFzaWRlX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogI2RkZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4ubWFpbl9faGVhZGVyLFxuLm1haW5fX2Zvb3RlciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAxZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tYWluX19oMSB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nLXRvcDogMWVtO1xuICBmb250LXNpemU6IDVlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDJlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tYWluX19uYW1lIHtcbiAgY29sb3I6ICMxZjhkZDY7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG4ubWFpbl9fdGFnbGluZSB7XG4gIG1hcmdpbjogMWVtIGF1dG87XG4gIG1heC13aWR0aDogNjYwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjNlbTtcbiAgZm9udC1zaXplOiAyZW07XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXdlaWdodDogMTAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX2NkbiB7XG4gIG1hcmdpbjogMmVtIDA7XG4gIHBhZGRpbmc6IDJlbTtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMTUwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gIGNvbG9yOiAjNjY2O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX2Rvd25sb2FkIHtcbiAgbWFyZ2luOiAxZW0gYXV0bztcbiAgd2lkdGg6IDIwMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWFpbl9fYnV0dG9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHBhZGRpbmc6IDE0cHggMjlweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgQ29uc29sYXMsIEdlb3JnaWEsIE1vbmFjbywgbW9ub3NwYWNlLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA1ODk0MjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tYWluX19idXR0b246bGluayxcbi5tYWluX19idXR0b246dmlzaXRlZCxcbi5tYWluX19idXR0b246aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLm1haW5fX2Zvb3RlciB7XG4gIG1hcmdpbjogMCAzZW07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xufVxuLnNlY3Rpb24ge1xuICBtYXJnaW46IDFlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2hlYWRlcixcbi5zZWN0aW9uX19jb250ZW50LFxuLnNlY3Rpb25fX2Zvb3RlciB7XG4gIG1hcmdpbjogMCAzZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fdGl0bGUge1xuICBjb2xvcjogIzY2Njtcbn1cbi5zZWN0aW9uX19oMyB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xuICBmb250LXNpemU6IDEuMzVlbTtcbn1cbi5zZWN0aW9uX19oNCB7XG4gIGZvbnQtc2l6ZTogMS4xZW07XG4gIGNvbG9yOiAjNjY2O1xufVxuLnNlY3Rpb25fX2g1IHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGNvbG9yOiAjOTk5O1xufVxuLnNlY3Rpb25fX2RsLFxuLnNlY3Rpb25fX2R0LFxuLnNlY3Rpb25fX2RkIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2RsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xufVxuLnNlY3Rpb25fX2R0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnNlY3Rpb25fX2RkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5zZWN0aW9uX19wcmUge1xuICBtYXJnaW46IDJlbSAwO1xuICBwYWRkaW5nOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29sb3I6ICM2NjY7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLnNlY3Rpb25fX2NvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIG1hcmdpbi10b3A6IDNlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgY29sb3I6ICM5OTk7XG59XG4uY2FzZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgZ2FwOiA0MHB4O1xuICBwYWRkaW5nOiAxZW07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlOmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlX19wcmUsXG4uY2FzZV9fdGV4dGFyZWEge1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xufVxuLmNhc2VfX3ByZSxcbi5jYXNlX19jb2RlLFxuLmNhc2VfX3RleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ29uc29sYXMsIEdlb3JnaWEsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLmNhc2VfX3ByZSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmNhc2VfX3Rvb2xiYXIge1xuICBtYXJnaW46IDAgYXV0bztcbiAgaGVpZ2h0OiAzNnB4O1xuICBsaW5lLWhlaWdodDogMzZweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBwYWRkaW5nOiAwIDE2cHg7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX2FjdGlvbixcbi5jYXNlX19yZW1vdmUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuLmNhc2VfX2FjdGlvbiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xufVxuLmNhc2VfX2FjdGlvbjpmaXJzdC1jaGlsZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbn1cbi5jYXNlX19yZW1vdmUge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uY2FzZV9fY29uc29sZSB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDE4MHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX3RleHRhcmVhIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogMWVtO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uY2FzZV9fbGlzdCxcbi5jYXNlX19pdGVtIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY2FzZV9fbGlzdCB7XG4gIGhlaWdodDogMzYwcHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5jYXNlX19pdGVtIHtcbiAgaGVpZ2h0OiAzNnB4O1xuICBsaW5lLWhlaWdodDogMzZweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4uY2FzZV9faXRlbTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y4Zjk7XG59XG4uYnV0dG9ucyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxMnB4O1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiA1NnB4O1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYnV0dG9uc19faXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAxMHB4O1xuICB3aWR0aDogMzZweDtcbiAgaGVpZ2h0OiAzNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAjZGRkO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggI2RkZDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzk5OTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5idXR0b25zX19pdGVtOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4uYnV0dG9uc19faXRlbS5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5idXR0b25zX19hbmNob3I6bGluayxcbi5idXR0b25zX19hbmNob3I6dmlzaXRlZCxcbi5idXR0b25zX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5idXR0b25zX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5idXR0b25zX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zjg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMenhwYm5CMWRDQmpjM01nTVQ0aUxDSnViM0p0WVd4cGVtVXViR1Z6Y3lJc0ltSmhjMlV1YkdWemN5SXNJbk5qY205c2JHSmhjaTVzWlhOeklpd2liR0Y1YjNWMExteGxjM01pTENKaGMybGtaUzVzWlhOeklpd2liV0ZwYmk1c1pYTnpJaXdpYzJWamRHbHZiaTVzWlhOeklpd2lZMkZ6WlM1c1pYTnpJaXdpWW5WMGRHOXVjeTVzWlhOeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRFJGUVVFMFJUdEJRVU0xUlR0blJrRkRaMFk3UVVGRGFFWTdPenRIUVVkSE8wRkRTVWc3UlVGRFJTeHJRa0ZCUVR0RlJFWkJMRTlCUVU4N1JVTkhVQ3dyUWtGQlFUdEZSRVJCTEU5QlFVODdRMEZEVWp0QlFVTkVPMmRHUVVOblJqdEJRVU5vUmpzN1IwRkZSenRCUTB0SU8wVkJRMFVzVlVGQlFUdERSRWhFTzBGQlEwUTdPMGRCUlVjN1FVTlBTRHRGUVVORkxHVkJRVUU3UTBSTVJEdEJRVU5FT3pzN1IwRkhSenRCUTFOSU8wVkJRMFVzWlVGQlFUdEZRVU5CTEdsQ1FVRkJPME5FVUVRN1FVRkRSRHRuUmtGRFowWTdRVUZEYUVZN096dEhRVWRITzBGRFdVZzdSVUZEUlN4blEwRkJRVHRWUVVGQkxIZENRVUZCTzBWRVZrRXNUMEZCVHp0RlExZFFMRlZCUVVFN1JVUlVRU3hQUVVGUE8wVkRWVkFzYTBKQlFVRTdSVVJTUVN4UFFVRlBPME5CUTFJN1FVRkRSRHM3TzBkQlIwYzdRVU5YU0R0RlFVTkZMR3REUVVGQk8wVkVWRUVzVDBGQlR6dEZRMVZRTEdWQlFVRTdSVVJTUVN4UFFVRlBPME5CUTFJN1FVRkRSRHRuUmtGRFowWTdRVUZEYUVZN08wZEJSVWM3UVVOWlNEdEZRVU5GTERoQ1FVRkJPME5FVmtRN1FVRkRSRHM3TzBkQlIwYzdRVU5qU0R0RlFVTkZMRzlDUVVGQk8wVkVXa0VzVDBGQlR6dEZRMkZRTERKQ1FVRkJPMFZFV0VFc1QwRkJUenRGUTFsUUxEQkRRVUZCTzFWQlFVRXNhME5CUVVFN1JVUldRU3hQUVVGUE8wTkJRMUk3UVVGRFJEczdSMEZGUnp0QlEyRklPenRGUVVWRkxHOUNRVUZCTzBORVdFUTdRVUZEUkRzN08wZEJSMGM3UVVObFNEczdPMFZCUjBVc2EwTkJRVUU3UlVSaVFTeFBRVUZQTzBWRFkxQXNaVUZCUVR0RlJGcEJMRTlCUVU4N1EwRkRVanRCUVVORU96dEhRVVZITzBGRFpVZzdSVUZEUlN4bFFVRkJPME5FWWtRN1FVRkRSRHM3TzBkQlIwYzdRVU5wUWtnN08wVkJSVVVzWlVGQlFUdEZRVU5CTEdWQlFVRTdSVUZEUVN4dFFrRkJRVHRGUVVOQkxIbENRVUZCTzBORVprUTdRVU5yUWtRN1JVRkRSU3huUWtGQlFUdERSR2hDUkR0QlEyMUNSRHRGUVVORkxGbEJRVUU3UTBScVFrUTdRVUZEUkR0blJrRkRaMFk3UVVGRGFFWTdPMGRCUlVjN1FVTnpRa2c3UlVGRFJTeHRRa0ZCUVR0RFJIQkNSRHRCUVVORU8yZEdRVU5uUmp0QlFVTm9SanM3TzBkQlIwYzdRVU41UWtnN096czdPMFZCUzBVc2NVSkJRVUU3UlVSMlFrRXNUMEZCVHp0RlEzZENVQ3huUWtGQlFUdEZSSFJDUVN4UFFVRlBPMFZEZFVKUUxHdENRVUZCTzBWRWNrSkJMRTlCUVU4N1JVTnpRbEFzVlVGQlFUdEZSSEJDUVN4UFFVRlBPME5CUTFJN1FVRkRSRHM3TzBkQlIwYzdRVU4xUWtnN08wVkVjRUpGTEU5QlFVODdSVU56UWxBc2EwSkJRVUU3UTBSd1FrUTdRVUZEUkRzN08wZEJSMGM3UVVOM1FrZzdPMFZFY2tKRkxFOUJRVTg3UlVOMVFsQXNjVUpCUVVFN1EwUnlRa1E3UVVGRFJEczdSMEZGUnp0QlEzbENTRHM3T3p0RlFVbEZMREpDUVVGQk8wTkVka0pFTzBGQlEwUTdPMGRCUlVjN1FVTXlRa2c3T3pzN1JVRkpSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdRMFI2UWtRN1FVRkRSRHM3UjBGRlJ6dEJRelpDU0RzN096dEZRVWxGTEN0Q1FVRkJPME5FTTBKRU8wRkJRMFE3TzBkQlJVYzdRVU1yUWtnN1JVRkRSU3dyUWtGQlFUdERSRGRDUkR0QlFVTkVPenM3T3p0SFFVdEhPMEZEYVVOSU8wVkJRMFVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHRGUkM5Q1FTeFBRVUZQTzBWRFowTlFMR1ZCUVVFN1JVUTVRa0VzVDBGQlR6dEZReXRDVUN4bFFVRkJPMFZFTjBKQkxFOUJRVTg3UlVNNFFsQXNaMEpCUVVFN1JVUTFRa0VzVDBGQlR6dEZRelpDVUN4WFFVRkJPMFZFTTBKQkxFOUJRVTg3UlVNMFFsQXNiMEpCUVVFN1JVUXhRa0VzVDBGQlR6dERRVU5TTzBGQlEwUTdPMGRCUlVjN1FVTTJRa2c3UlVGRFJTeDVRa0ZCUVR0RFJETkNSRHRCUVVORU96dEhRVVZITzBGREswSklPMFZCUTBVc1pVRkJRVHREUkRkQ1JEdEJRVU5FT3pzN1IwRkhSenRCUTJsRFNEczdSVUZGUlN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWRUwwSkJMRTlCUVU4N1JVTm5RMUFzVjBGQlFUdEZSRGxDUVN4UFFVRlBPME5CUTFJN1FVRkRSRHM3UjBGRlJ6dEJRMmxEU0RzN1JVRkZSU3hoUVVGQk8wTkVMMEpFTzBGQlEwUTdPenRIUVVkSE8wRkRiVU5JTzBWQlEwVXNPRUpCUVVFN1JVUnFRMEVzVDBGQlR6dEZRMnREVUN4eFFrRkJRVHRGUkdoRFFTeFBRVUZQTzBOQlExSTdRVUZEUkRzN1IwRkZSenRCUTIxRFNEdEZRVU5GTEhsQ1FVRkJPME5FYWtORU8wRkJRMFE3T3p0SFFVZEhPMEZEY1VOSU8wVkJRMFVzTWtKQlFVRTdSVVJ1UTBFc1QwRkJUenRGUTI5RFVDeGpRVUZCTzBWRWJFTkJMRTlCUVU4N1EwRkRVanRCUVVORU8yZEdRVU5uUmp0QlFVTm9SanM3UjBGRlJ6dEJRM05EU0R0RlFVTkZMR1ZCUVVFN1EwUndRMFE3UVVGRFJEczdSMEZGUnp0QlEzZERTRHRGUVVORkxHMUNRVUZCTzBORWRFTkVPMEZCUTBRN1owWkJRMmRHTzBGQlEyaEdPenRIUVVWSE8wRkRNa05JTzBWQlEwVXNZMEZCUVR0RFJIcERSRHRCUVVORU96dEhRVVZITzBGRE5rTklPMFZCUTBVc1kwRkJRVHREUkRORFJEdEJRVU5FTEhOQ1FVRnpRanRCUlRsVGRFSTdPMFZCUlVVc1lVRkJRVHRGUVVOQkxHOUNRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzYTBKQlFVRTdSVUZEUVN4eFJFRkJRVHRGUVVOQkxHbENRVUZCTzBOR1oxUkVPMEZGTlZORE96czdSVUZIUlN4bFFVRkJPMFZCUTBFc2MwSkJRVUU3UTBZNFUwZzdRVVV6VTBNN1JVRkRSU3d5UWtGQlFUdERSalpUU0R0QlJYcFRSRHRGUVVORkxIZEdRVUZCTzBOR01sTkVPMEZCUTBRc01rSkJRVEpDTzBGSGRsVXpRanRGUVVORkxGZEJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNNa0pCUVVFN1EwaDVWVVE3UVVkMFZVUTdSVUZEUlN3eVFrRkJRVHREU0hkVlJEdEJSM0pWUkR0RlFVTkZMSE5EUVVGQk8wVkJRMEVzTWtKQlFVRTdRMGgxVlVRN1FVZHdWVVE3UlVGRFJTeHpRMEZCUVR0RlFVTkJMREpDUVVGQk8wTkljMVZFTzBGSGJsVkVPMFZCUTBVc2MwTkJRVUU3UTBoeFZVUTdRVWRzVlVRN1JVRkRSU3h6UTBGQlFUdERTRzlWUkR0QlFVTkVMRmxCUVZrN1FVazFWbG83UlVGRFJTeHhRa0ZCUVR0RlFVRkJMSEZDUVVGQk8wVkJRVUVzWTBGQlFUdEZRVU5CTEN0Q1FVRkJPMFZCUVVFc09FSkJRVUU3VFVGQlFTeDNRa0ZCUVR0VlFVRkJMRzlDUVVGQk8wVkJRMEVzYzBKQlFVRTdUVUZCUVN4clFrRkJRVHRGUVVOQkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzVlVGQlFUdEZRVU5CTEdsQ1FVRkJPME5LT0ZaRU8wRkJRMFFzVjBGQlZ6dEJTVE5XV0R0RlFVTkZMSEZDUVVGQk8wVkJRVUVzY1VKQlFVRTdSVUZCUVN4alFVRkJPMFZCUTBFc2NVSkJRVUU3VFVGQlFTeGxRVUZCTzBWQlEwRXNOa0pCUVVFN1JVRkJRU3c0UWtGQlFUdE5RVUZCTERKQ1FVRkJPMVZCUVVFc2RVSkJRVUU3UlVGRFFTeHpRa0ZCUVR0TlFVRkJMR3RDUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEZWQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc2RVSkJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNjVU5CUVVFN1ZVRkJRU3cyUWtGQlFUdEZRVU5CTEdWQlFVRTdRMG8yVmtRN1FVRkRSQ3hWUVVGVk8wRkpNVlpXTzBWQlEwVXNiMEpCUVVFN1RVRkJRU3haUVVGQk8xVkJRVUVzVVVGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTeDFRa0ZCUVR0RlFVTkJMR1ZCUVVFN1EwbzBWa1E3UVVzdldFUTdSVUZEUlN4M1JrRkJRVHREVEdsWlJEdEJTeTlZUXp0RlFVTkZMR1ZCUVVFN1JVRkRRU3h4UWtGQlFUdE5RVUZCTEdWQlFVRTdSVUZEUVN4cFFrRkJRVHREVEdsWlNEdEJTemxZUXp0RlFVTkZMRzlDUVVGQk8wMUJRVUVzV1VGQlFUdFZRVUZCTEZGQlFVRTdSVUZEUVN4bFFVRkJPME5NWjFsSU8wRkxOMWhETzBWQlEwVXNaVUZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3hyUWtGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2IwSkJRVUU3UlVGRFFTeHJSRUZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMHdyV0VnN1FVczFXRU03UlVGRFJTeGxRVUZCTzBWQlEwRXNaMEpCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5NT0ZoSU8wRkxNMWhETzBWQlEwVXNWVUZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMHcyV0VnN1FVc3hXRU03UlVGRFJTeGhRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc1owSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFREUllTRHRCU3pGWVJ6czdSVUZGUlN4MVFrRkJRVHREVERSWVREdEJTM3BZUnp0RlFVTkZMRFJDUVVGQk8wTk1NbGhNTzBGTGRsaERPMFZCUTBVc1dVRkJRVHRGUVVOQkxITkNRVUZCTzBOTWVWaElPMEZMZEZoRE8wVkJRMFVzV1VGQlFUdEZRVU5CTEhOQ1FVRkJPME5NZDFoSU8wRkxjbGhETzBWQlEwVXNXVUZCUVR0RlFVTkJMREpDUVVGQk8wTk1kVmhJTzBGTk1XSkRPenRGUVVWRkxHVkJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNiVUpCUVVFN1JVRkRRU3hwUWtGQlFUdERUalJpU0R0QlRYcGlRenRGUVVORkxHVkJRVUU3UlVGRFFTeHBRa0ZCUVR0RlFVTkJMR1ZCUVVFN1JVRkRRU3h2UWtGQlFUdEZRVU5CTEdsQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UTA0eVlrZzdRVTE0WWtNN1JVRkRSU3hsUVVGQk8wVkJRMEVzYjBKQlFVRTdRMDR3WWtnN1FVMTJZa003UlVGRFJTeHBRa0ZCUVR0RlFVTkJMR2xDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4bFFVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHbENRVUZCTzBWQlEwRXNhVUpCUVVFN1EwNTVZa2c3UVUxMFlrTTdSVUZEUlN4alFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxHZENRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3h0UWtGQlFUdEZRVU5CTERCQ1FVRkJPMFZCUTBFc01rSkJRVUU3UlVGRFFTdzRRa0ZCUVR0RlFVTkJMRmxCUVVFN1JVRkRRU3hwUWtGQlFUdERUbmRpU0R0QlRYSmlRenRGUVVORkxHbENRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMDUxWWtnN1FVMXdZa003UlVGRFJTeHpRa0ZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4blFrRkJRVHRGUVVOQkxIZEdRVUZCTzBWQlEwRXNNRUpCUVVFN1JVRkRRU3hwUWtGQlFUdERUbk5pU0R0QlRYQmlSenM3TzBWQlIwVXNXVUZCUVR0RlFVTkJMSE5DUVVGQk8wTk9jMkpNTzBGTmJHSkRPMFZCUTBVc1kwRkJRVHRGUVVOQkxESkNRVUZCTzBOT2IySklPMEZQTldaRU8wVkJRMFVzWTBGQlFUdEZRVU5CTEdsQ1FVRkJPME5RT0daRU8wRlBOV1pET3pzN1JVRkhSU3hqUVVGQk8wVkJRMEVzYVVKQlFVRTdRMUE0WmtnN1FVOHpaa003UlVGRFJTeFpRVUZCTzBOUU5tWklPMEZQTVdaRE8wVkJRMFVzWlVGQlFUdEZRVU5CTEd0Q1FVRkJPME5RTkdaSU8wRlBlbVpETzBWQlEwVXNhVUpCUVVFN1JVRkRRU3haUVVGQk8wTlFNbVpJTzBGUGVHWkRPMFZCUTBVc1pVRkJRVHRGUVVOQkxGbEJRVUU3UTFBd1prZzdRVTkyWmtNN096dEZRVWRGTEZWQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc2FVSkJRVUU3UTFCNVprZzdRVTkwWmtNN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdRMUIzWmtnN1FVOXlaa003UlVGRFJTeHpRa0ZCUVR0RFVIVm1TRHRCVDNCbVF6dEZRVU5GTEhOQ1FVRkJPMFZCUTBFc1pVRkJRVHREVUhObVNEdEJUMjVtUXp0RlFVTkZMR05CUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzWjBKQlFVRTdSVUZEUVN4clFrRkJRVHRGUVVOQkxHbENRVUZCTzBWQlEwRXNNRUpCUVVFN1JVRkRRU3gxUWtGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHVkJRVUU3UTFCeFprZzdRVTlzWmtNN1JVRkRSU3hsUVVGQk8wVkJRMEVzWlVGQlFUdEZRVU5CTEdsQ1FVRkJPME5RYjJaSU8wRlBhbVpETzBWQlEwVXNNa0pCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTERCQ1FVRkJPMFZCUTBFc1dVRkJRVHREVUcxbVNEdEJVVGxxUWtRN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4alFVRkJPMFZCUTBFc2MwTkJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMREpDUVVGQk8wVkJRMEVzT0VKQlFVRTdSVUZEUVN4cFFrRkJRVHREVW1kclFrUTdRVkU1YWtKRE8wVkJRMFVzV1VGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxFOUJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMRk5CUVVFN1JVRkRRU3cwUWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5TWjJ0Q1NEdEJVVGRxUWtNN08wVkJSVVVzWjBKQlFVRTdSVUZEUVN4clFrRkJRVHREVWl0cVFrZzdRVkUxYWtKRE96czdSVUZIUlN4cFJVRkJRVHREVWpocVFrZzdRVkV6YWtKRE8wVkJRMFVzVlVGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN3d1FrRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMQ3RDUVVGQk8xVkJRVUVzZFVKQlFVRTdSVUZEUVN4bFFVRkJPME5TTm1wQ1NEdEJVVEZxUWtNN1JVRkRSU3hsUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEd0Q1FVRkJPMFZCUTBFc1owSkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMUkwYWtKSU8wRlJlbXBDUXpzN1JVRkZSU3huUWtGQlFUdEZRVU5CTEdWQlFVRTdSVUZEUVN3d1FrRkJRVHRMUVVGQkxIVkNRVUZCTzAxQlFVRXNjMEpCUVVFN1ZVRkJRU3hyUWtGQlFUdERVakpxUWtnN1FWRjRha0pETzBWQlEwVXNaMEpCUVVFN1JVRkRRU3h0UWtGQlFUdERVakJxUWtnN1FWRjRha0pITzBWQlEwVXNaMEpCUVVFN1ExSXdha0pNTzBGUmRHcENRenRGUVVORkxHRkJRVUU3UTFKM2FrSklPMEZSY21wQ1F6dEZRVU5GTEdWQlFVRTdSVUZEUVN4alFVRkJPMFZCUTBFc2RVSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFVuVnFRa2c3UVZGd2FrSkRPMFZCUTBVc1pVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMR05CUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHRGUVVOQkxHVkJRVUU3UTFKemFrSklPMEZSYm1wQ1F6czdSVUZGUlN4VlFVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxITkNRVUZCTzBWQlEwRXNhVUpCUVVFN1ExSnhha0pJTzBGUmJHcENRenRGUVVORkxHTkJRVUU3UlVGRFFTd3lRa0ZCUVR0RlFVTkJMRGhDUVVGQk8wVkJRMEVzWjBKQlFVRTdSVUZEUVN4bFFVRkJPME5TYjJwQ1NEdEJVV3BxUWtNN1JVRkRSU3hoUVVGQk8wVkJRMEVzYTBKQlFVRTdSVUZEUVN4blFrRkJRVHRGUVVOQkxHZENRVUZCTzBOU2JXcENTRHRCVVdwcVFrYzdSVUZEUlN3d1FrRkJRVHREVW0xcVFrdzdRVk4yY1VKRU8wVkJRMFVzWjBKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1UwRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMRzlEUVVGQk8xVkJRVUVzTkVKQlFVRTdSVUZEUVN4cFFrRkJRVHREVkhseFFrUTdRVk4yY1VKRE8wVkJRMFVzYlVKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNkVUpCUVVFN1JVRkRRU3h0UWtGQlFUdEZRVU5CTEdsRFFVRkJPMVZCUVVFc2VVSkJRVUU3UlVGRFFTd3JRa0ZCUVR0VlFVRkJMSFZDUVVGQk8wVkJRMEVzZFVKQlFVRTdSVUZEUVN4blFrRkJRVHRGUVVOQkxHMUNRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR2xDUVVGQk8wTlVlWEZDU0R0QlUzWnhRa2M3UlVGRFJTeGxRVUZCTzBOVWVYRkNURHRCVTNSeFFrYzdSVUZEUlN4alFVRkJPME5VZDNGQ1REdEJVMjV4UWtjN096dEZRVWRGTEZsQlFVRTdRMVJ4Y1VKTU8wRlRiSEZDUnp0RlFVTkZMR1ZCUVVFN1ExUnZjVUpNTzBGVGFIRkNRenRGUVVORkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMRk5CUVVFN1JVRkRRU3hWUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4NVEwRkJRVHRWUVVGQkxHbERRVUZCTzBWQlEwRXNiVUpCUVVFN1JVRkRRU3hwUWtGQlFUdERWR3R4UWtnaUxDSm1hV3hsSWpvaVpHOWpjeTVqYzNNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUVnYm05eWJXRnNhWHBsTG1OemN5QjJPQzR3TGpFZ2ZDQk5TVlFnVEdsalpXNXpaU0I4SUdkcGRHaDFZaTVqYjIwdmJtVmpiMnhoY3k5dWIzSnRZV3hwZW1VdVkzTnpJQ292WEc0dktpQkViMk4xYldWdWRGeHVJQ0FnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwZ0tpOWNiaThxS2x4dUlDb2dNUzRnUTI5eWNtVmpkQ0IwYUdVZ2JHbHVaU0JvWldsbmFIUWdhVzRnWVd4c0lHSnliM2R6WlhKekxseHVJQ29nTWk0Z1VISmxkbVZ1ZENCaFpHcDFjM1J0Wlc1MGN5QnZaaUJtYjI1MElITnBlbVVnWVdaMFpYSWdiM0pwWlc1MFlYUnBiMjRnWTJoaGJtZGxjeUJwYmlCcFQxTXVYRzRnS2k5Y2JtaDBiV3dnZTF4dUlDQnNhVzVsTFdobGFXZG9kRG9nTVM0eE5UdGNiaUFnTHlvZ01TQXFMMXh1SUNBdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdYRzRnSUM4cUlESWdLaTljYm4xY2JpOHFJRk5sWTNScGIyNXpYRzRnSUNBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBTQXFMMXh1THlvcVhHNGdLaUJTWlcxdmRtVWdkR2hsSUcxaGNtZHBiaUJwYmlCaGJHd2dZbkp2ZDNObGNuTXVYRzRnS2k5Y2JtSnZaSGtnZTF4dUlDQnRZWEpuYVc0NklEQTdYRzU5WEc0dktpcGNiaUFxSUZKbGJtUmxjaUIwYUdVZ1lHMWhhVzVnSUdWc1pXMWxiblFnWTI5dWMybHpkR1Z1ZEd4NUlHbHVJRWxGTGx4dUlDb3ZYRzV0WVdsdUlIdGNiaUFnWkdsemNHeGhlVG9nWW14dlkyczdYRzU5WEc0dktpcGNiaUFxSUVOdmNuSmxZM1FnZEdobElHWnZiblFnYzJsNlpTQmhibVFnYldGeVoybHVJRzl1SUdCb01XQWdaV3hsYldWdWRITWdkMmwwYUdsdUlHQnpaV04wYVc5dVlDQmhibVJjYmlBcUlHQmhjblJwWTJ4bFlDQmpiMjUwWlhoMGN5QnBiaUJEYUhKdmJXVXNJRVpwY21WbWIzZ3NJR0Z1WkNCVFlXWmhjbWt1WEc0Z0tpOWNibWd4SUh0Y2JpQWdabTl1ZEMxemFYcGxPaUF5WlcwN1hHNGdJRzFoY21kcGJqb2dNQzQyTjJWdElEQTdYRzU5WEc0dktpQkhjbTkxY0dsdVp5QmpiMjUwWlc1MFhHNGdJQ0E5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFNBcUwxeHVMeW9xWEc0Z0tpQXhMaUJCWkdRZ2RHaGxJR052Y25KbFkzUWdZbTk0SUhOcGVtbHVaeUJwYmlCR2FYSmxabTk0TGx4dUlDb2dNaTRnVTJodmR5QjBhR1VnYjNabGNtWnNiM2NnYVc0Z1JXUm5aU0JoYm1RZ1NVVXVYRzRnS2k5Y2JtaHlJSHRjYmlBZ1ltOTRMWE5wZW1sdVp6b2dZMjl1ZEdWdWRDMWliM2c3WEc0Z0lDOHFJREVnS2k5Y2JpQWdhR1ZwWjJoME9pQXdPMXh1SUNBdktpQXhJQ292WEc0Z0lHOTJaWEptYkc5M09pQjJhWE5wWW14bE8xeHVJQ0F2S2lBeUlDb3ZYRzU5WEc0dktpcGNiaUFxSURFdUlFTnZjbkpsWTNRZ2RHaGxJR2x1YUdWeWFYUmhibU5sSUdGdVpDQnpZMkZzYVc1bklHOW1JR1p2Ym5RZ2MybDZaU0JwYmlCaGJHd2dZbkp2ZDNObGNuTXVYRzRnS2lBeUxpQkRiM0p5WldOMElIUm9aU0J2WkdRZ1lHVnRZQ0JtYjI1MElITnBlbWx1WnlCcGJpQmhiR3dnWW5KdmQzTmxjbk11WEc0Z0tpOWNibkJ5WlNCN1hHNGdJR1p2Ym5RdFptRnRhV3g1T2lCdGIyNXZjM0JoWTJVc0lHMXZibTl6Y0dGalpUdGNiaUFnTHlvZ01TQXFMMXh1SUNCbWIyNTBMWE5wZW1VNklERmxiVHRjYmlBZ0x5b2dNaUFxTDF4dWZWeHVMeW9nVkdWNGRDMXNaWFpsYkNCelpXMWhiblJwWTNOY2JpQWdJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5SUNvdlhHNHZLaXBjYmlBcUlGSmxiVzkyWlNCMGFHVWdaM0poZVNCaVlXTnJaM0p2ZFc1a0lHOXVJR0ZqZEdsMlpTQnNhVzVyY3lCcGJpQkpSU0F4TUM1Y2JpQXFMMXh1WVNCN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJSFJ5WVc1emNHRnlaVzUwTzF4dWZWeHVMeW9xWEc0Z0tpQXhMaUJTWlcxdmRtVWdkR2hsSUdKdmRIUnZiU0JpYjNKa1pYSWdhVzRnUTJoeWIyMWxJRFUzTFZ4dUlDb2dNaTRnUVdSa0lIUm9aU0JqYjNKeVpXTjBJSFJsZUhRZ1pHVmpiM0poZEdsdmJpQnBiaUJEYUhKdmJXVXNJRVZrWjJVc0lFbEZMQ0JQY0dWeVlTd2dZVzVrSUZOaFptRnlhUzVjYmlBcUwxeHVZV0ppY2x0MGFYUnNaVjBnZTF4dUlDQmliM0prWlhJdFltOTBkRzl0T2lCdWIyNWxPMXh1SUNBdktpQXhJQ292WEc0Z0lIUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2RXNWtaWEpzYVc1bE8xeHVJQ0F2S2lBeUlDb3ZYRzRnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nZFc1a1pYSnNhVzVsSUdSdmRIUmxaRHRjYmlBZ0x5b2dNaUFxTDF4dWZWeHVMeW9xWEc0Z0tpQkJaR1FnZEdobElHTnZjbkpsWTNRZ1ptOXVkQ0IzWldsbmFIUWdhVzRnUTJoeWIyMWxMQ0JGWkdkbExDQmhibVFnVTJGbVlYSnBMbHh1SUNvdlhHNWlMRnh1YzNSeWIyNW5JSHRjYmlBZ1ptOXVkQzEzWldsbmFIUTZJR0p2YkdSbGNqdGNibjFjYmk4cUtseHVJQ29nTVM0Z1EyOXljbVZqZENCMGFHVWdhVzVvWlhKcGRHRnVZMlVnWVc1a0lITmpZV3hwYm1jZ2IyWWdabTl1ZENCemFYcGxJR2x1SUdGc2JDQmljbTkzYzJWeWN5NWNiaUFxSURJdUlFTnZjbkpsWTNRZ2RHaGxJRzlrWkNCZ1pXMWdJR1p2Ym5RZ2MybDZhVzVuSUdsdUlHRnNiQ0JpY205M2MyVnljeTVjYmlBcUwxeHVZMjlrWlN4Y2JtdGlaQ3hjYm5OaGJYQWdlMXh1SUNCbWIyNTBMV1poYldsc2VUb2diVzl1YjNOd1lXTmxMQ0J0YjI1dmMzQmhZMlU3WEc0Z0lDOHFJREVnS2k5Y2JpQWdabTl1ZEMxemFYcGxPaUF4WlcwN1hHNGdJQzhxSURJZ0tpOWNibjFjYmk4cUtseHVJQ29nUVdSa0lIUm9aU0JqYjNKeVpXTjBJR1p2Ym5RZ2MybDZaU0JwYmlCaGJHd2dZbkp2ZDNObGNuTXVYRzRnS2k5Y2JuTnRZV3hzSUh0Y2JpQWdabTl1ZEMxemFYcGxPaUE0TUNVN1hHNTlYRzR2S2lwY2JpQXFJRkJ5WlhabGJuUWdZSE4xWW1BZ1lXNWtJR0J6ZFhCZ0lHVnNaVzFsYm5SeklHWnliMjBnWVdabVpXTjBhVzVuSUhSb1pTQnNhVzVsSUdobGFXZG9kQ0JwYmx4dUlDb2dZV3hzSUdKeWIzZHpaWEp6TGx4dUlDb3ZYRzV6ZFdJc1hHNXpkWEFnZTF4dUlDQm1iMjUwTFhOcGVtVTZJRGMxSlR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURBN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2RtVnlkR2xqWVd3dFlXeHBaMjQ2SUdKaGMyVnNhVzVsTzF4dWZWeHVjM1ZpSUh0Y2JpQWdZbTkwZEc5dE9pQXRNQzR5TldWdE8xeHVmVnh1YzNWd0lIdGNiaUFnZEc5d09pQXRNQzQxWlcwN1hHNTlYRzR2S2lCRmJXSmxaR1JsWkNCamIyNTBaVzUwWEc0Z0lDQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQU0FxTDF4dUx5b3FYRzRnS2lCU1pXMXZkbVVnZEdobElHSnZjbVJsY2lCdmJpQnBiV0ZuWlhNZ2FXNXphV1JsSUd4cGJtdHpJR2x1SUVsRklERXdMbHh1SUNvdlhHNXBiV2NnZTF4dUlDQmliM0prWlhJdGMzUjViR1U2SUc1dmJtVTdYRzU5WEc0dktpQkdiM0p0YzF4dUlDQWdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDBnS2k5Y2JpOHFLbHh1SUNvZ01TNGdRMmhoYm1kbElIUm9aU0JtYjI1MElITjBlV3hsY3lCcGJpQmhiR3dnWW5KdmQzTmxjbk11WEc0Z0tpQXlMaUJTWlcxdmRtVWdkR2hsSUcxaGNtZHBiaUJwYmlCR2FYSmxabTk0SUdGdVpDQlRZV1poY21rdVhHNGdLaTljYm1KMWRIUnZiaXhjYm1sdWNIVjBMRnh1YjNCMFozSnZkWEFzWEc1elpXeGxZM1FzWEc1MFpYaDBZWEpsWVNCN1hHNGdJR1p2Ym5RdFptRnRhV3g1T2lCcGJtaGxjbWwwTzF4dUlDQXZLaUF4SUNvdlhHNGdJR1p2Ym5RdGMybDZaVG9nTVRBd0pUdGNiaUFnTHlvZ01TQXFMMXh1SUNCc2FXNWxMV2hsYVdkb2REb2dNUzR4TlR0Y2JpQWdMeW9nTVNBcUwxeHVJQ0J0WVhKbmFXNDZJREE3WEc0Z0lDOHFJRElnS2k5Y2JuMWNiaThxS2x4dUlDb2dVMmh2ZHlCMGFHVWdiM1psY21ac2IzY2dhVzRnU1VVdVhHNGdLaUF4TGlCVGFHOTNJSFJvWlNCdmRtVnlabXh2ZHlCcGJpQkZaR2RsTGx4dUlDb3ZYRzVpZFhSMGIyNHNYRzVwYm5CMWRDQjdYRzRnSUM4cUlERWdLaTljYmlBZ2IzWmxjbVpzYjNjNklIWnBjMmxpYkdVN1hHNTlYRzR2S2lwY2JpQXFJRkpsYlc5MlpTQjBhR1VnYVc1b1pYSnBkR0Z1WTJVZ2IyWWdkR1Y0ZENCMGNtRnVjMlp2Y20wZ2FXNGdSV1JuWlN3Z1JtbHlaV1p2ZUN3Z1lXNWtJRWxGTGx4dUlDb2dNUzRnVW1WdGIzWmxJSFJvWlNCcGJtaGxjbWwwWVc1alpTQnZaaUIwWlhoMElIUnlZVzV6Wm05eWJTQnBiaUJHYVhKbFptOTRMbHh1SUNvdlhHNWlkWFIwYjI0c1hHNXpaV3hsWTNRZ2UxeHVJQ0F2S2lBeElDb3ZYRzRnSUhSbGVIUXRkSEpoYm5ObWIzSnRPaUJ1YjI1bE8xeHVmVnh1THlvcVhHNGdLaUJEYjNKeVpXTjBJSFJvWlNCcGJtRmlhV3hwZEhrZ2RHOGdjM1I1YkdVZ1kyeHBZMnRoWW14bElIUjVjR1Z6SUdsdUlHbFBVeUJoYm1RZ1UyRm1ZWEpwTGx4dUlDb3ZYRzVpZFhSMGIyNHNYRzViZEhsd1pUMWNJbUoxZEhSdmJsd2lYU3hjYmx0MGVYQmxQVndpY21WelpYUmNJbDBzWEc1YmRIbHdaVDFjSW5OMVltMXBkRndpWFNCN1hHNGdJQzEzWldKcmFYUXRZWEJ3WldGeVlXNWpaVG9nWW5WMGRHOXVPMXh1ZlZ4dUx5b3FYRzRnS2lCU1pXMXZkbVVnZEdobElHbHVibVZ5SUdKdmNtUmxjaUJoYm1RZ2NHRmtaR2x1WnlCcGJpQkdhWEpsWm05NExseHVJQ292WEc1aWRYUjBiMjQ2T2kxdGIzb3RabTlqZFhNdGFXNXVaWElzWEc1YmRIbHdaVDFjSW1KMWRIUnZibHdpWFRvNkxXMXZlaTFtYjJOMWN5MXBibTVsY2l4Y2JsdDBlWEJsUFZ3aWNtVnpaWFJjSWwwNk9pMXRiM290Wm05amRYTXRhVzV1WlhJc1hHNWJkSGx3WlQxY0luTjFZbTFwZEZ3aVhUbzZMVzF2ZWkxbWIyTjFjeTFwYm01bGNpQjdYRzRnSUdKdmNtUmxjaTF6ZEhsc1pUb2dibTl1WlR0Y2JpQWdjR0ZrWkdsdVp6b2dNRHRjYm4xY2JpOHFLbHh1SUNvZ1VtVnpkRzl5WlNCMGFHVWdabTlqZFhNZ2MzUjViR1Z6SUhWdWMyVjBJR0o1SUhSb1pTQndjbVYyYVc5MWN5QnlkV3hsTGx4dUlDb3ZYRzVpZFhSMGIyNDZMVzF2ZWkxbWIyTjFjM0pwYm1jc1hHNWJkSGx3WlQxY0ltSjFkSFJ2Ymx3aVhUb3RiVzk2TFdadlkzVnpjbWx1Wnl4Y2JsdDBlWEJsUFZ3aWNtVnpaWFJjSWwwNkxXMXZlaTFtYjJOMWMzSnBibWNzWEc1YmRIbHdaVDFjSW5OMVltMXBkRndpWFRvdGJXOTZMV1p2WTNWemNtbHVaeUI3WEc0Z0lHOTFkR3hwYm1VNklERndlQ0JrYjNSMFpXUWdRblYwZEc5dVZHVjRkRHRjYm4xY2JpOHFLbHh1SUNvZ1EyOXljbVZqZENCMGFHVWdjR0ZrWkdsdVp5QnBiaUJHYVhKbFptOTRMbHh1SUNvdlhHNW1hV1ZzWkhObGRDQjdYRzRnSUhCaFpHUnBibWM2SURBdU16VmxiU0F3TGpjMVpXMGdNQzQyTWpWbGJUdGNibjFjYmk4cUtseHVJQ29nTVM0Z1EyOXljbVZqZENCMGFHVWdkR1Y0ZENCM2NtRndjR2x1WnlCcGJpQkZaR2RsSUdGdVpDQkpSUzVjYmlBcUlESXVJRU52Y25KbFkzUWdkR2hsSUdOdmJHOXlJR2x1YUdWeWFYUmhibU5sSUdaeWIyMGdZR1pwWld4a2MyVjBZQ0JsYkdWdFpXNTBjeUJwYmlCSlJTNWNiaUFxSURNdUlGSmxiVzkyWlNCMGFHVWdjR0ZrWkdsdVp5QnpieUJrWlhabGJHOXdaWEp6SUdGeVpTQnViM1FnWTJGMVoyaDBJRzkxZENCM2FHVnVJSFJvWlhrZ2VtVnlieUJ2ZFhSY2JpQXFJQ0FnSUdCbWFXVnNaSE5sZEdBZ1pXeGxiV1Z1ZEhNZ2FXNGdZV3hzSUdKeWIzZHpaWEp6TGx4dUlDb3ZYRzVzWldkbGJtUWdlMXh1SUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh1SUNBdktpQXhJQ292WEc0Z0lHTnZiRzl5T2lCcGJtaGxjbWwwTzF4dUlDQXZLaUF5SUNvdlhHNGdJR1JwYzNCc1lYazZJSFJoWW14bE8xeHVJQ0F2S2lBeElDb3ZYRzRnSUcxaGVDMTNhV1IwYURvZ01UQXdKVHRjYmlBZ0x5b2dNU0FxTDF4dUlDQndZV1JrYVc1bk9pQXdPMXh1SUNBdktpQXpJQ292WEc0Z0lIZG9hWFJsTFhOd1lXTmxPaUJ1YjNKdFlXdzdYRzRnSUM4cUlERWdLaTljYm4xY2JpOHFLbHh1SUNvZ1FXUmtJSFJvWlNCamIzSnlaV04wSUhabGNuUnBZMkZzSUdGc2FXZHViV1Z1ZENCcGJpQkRhSEp2YldVc0lFWnBjbVZtYjNnc0lHRnVaQ0JQY0dWeVlTNWNiaUFxTDF4dWNISnZaM0psYzNNZ2UxeHVJQ0IyWlhKMGFXTmhiQzFoYkdsbmJqb2dZbUZ6Wld4cGJtVTdYRzU5WEc0dktpcGNiaUFxSUZKbGJXOTJaU0IwYUdVZ1pHVm1ZWFZzZENCMlpYSjBhV05oYkNCelkzSnZiR3hpWVhJZ2FXNGdTVVVnTVRBckxseHVJQ292WEc1MFpYaDBZWEpsWVNCN1hHNGdJRzkyWlhKbWJHOTNPaUJoZFhSdk8xeHVmVnh1THlvcVhHNGdLaUF4TGlCQlpHUWdkR2hsSUdOdmNuSmxZM1FnWW05NElITnBlbWx1WnlCcGJpQkpSU0F4TUM1Y2JpQXFJREl1SUZKbGJXOTJaU0IwYUdVZ2NHRmtaR2x1WnlCcGJpQkpSU0F4TUM1Y2JpQXFMMXh1VzNSNWNHVTlYQ0pqYUdWamEySnZlRndpWFN4Y2JsdDBlWEJsUFZ3aWNtRmthVzljSWwwZ2UxeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0F2S2lBeElDb3ZYRzRnSUhCaFpHUnBibWM2SURBN1hHNGdJQzhxSURJZ0tpOWNibjFjYmk4cUtseHVJQ29nUTI5eWNtVmpkQ0IwYUdVZ1kzVnljMjl5SUhOMGVXeGxJRzltSUdsdVkzSmxiV1Z1ZENCaGJtUWdaR1ZqY21WdFpXNTBJR0oxZEhSdmJuTWdhVzRnUTJoeWIyMWxMbHh1SUNvdlhHNWJkSGx3WlQxY0ltNTFiV0psY2x3aVhUbzZMWGRsWW10cGRDMXBibTVsY2kxemNHbHVMV0oxZEhSdmJpeGNibHQwZVhCbFBWd2liblZ0WW1WeVhDSmRPam90ZDJWaWEybDBMVzkxZEdWeUxYTndhVzR0WW5WMGRHOXVJSHRjYmlBZ2FHVnBaMmgwT2lCaGRYUnZPMXh1ZlZ4dUx5b3FYRzRnS2lBeExpQkRiM0p5WldOMElIUm9aU0J2WkdRZ1lYQndaV0Z5WVc1alpTQnBiaUJEYUhKdmJXVWdZVzVrSUZOaFptRnlhUzVjYmlBcUlESXVJRU52Y25KbFkzUWdkR2hsSUc5MWRHeHBibVVnYzNSNWJHVWdhVzRnVTJGbVlYSnBMbHh1SUNvdlhHNWJkSGx3WlQxY0luTmxZWEpqYUZ3aVhTQjdYRzRnSUMxM1pXSnJhWFF0WVhCd1pXRnlZVzVqWlRvZ2RHVjRkR1pwWld4a08xeHVJQ0F2S2lBeElDb3ZYRzRnSUc5MWRHeHBibVV0YjJabWMyVjBPaUF0TW5CNE8xeHVJQ0F2S2lBeUlDb3ZYRzU5WEc0dktpcGNiaUFxSUZKbGJXOTJaU0IwYUdVZ2FXNXVaWElnY0dGa1pHbHVaeUJwYmlCRGFISnZiV1VnWVc1a0lGTmhabUZ5YVNCdmJpQnRZV05QVXk1Y2JpQXFMMXh1VzNSNWNHVTlYQ0p6WldGeVkyaGNJbDA2T2kxM1pXSnJhWFF0YzJWaGNtTm9MV1JsWTI5eVlYUnBiMjRnZTF4dUlDQXRkMlZpYTJsMExXRndjR1ZoY21GdVkyVTZJRzV2Ym1VN1hHNTlYRzR2S2lwY2JpQXFJREV1SUVOdmNuSmxZM1FnZEdobElHbHVZV0pwYkdsMGVTQjBieUJ6ZEhsc1pTQmpiR2xqYTJGaWJHVWdkSGx3WlhNZ2FXNGdhVTlUSUdGdVpDQlRZV1poY21rdVhHNGdLaUF5TGlCRGFHRnVaMlVnWm05dWRDQndjbTl3WlhKMGFXVnpJSFJ2SUdCcGJtaGxjbWwwWUNCcGJpQlRZV1poY21rdVhHNGdLaTljYmpvNkxYZGxZbXRwZEMxbWFXeGxMWFZ3Ykc5aFpDMWlkWFIwYjI0Z2UxeHVJQ0F0ZDJWaWEybDBMV0Z3Y0dWaGNtRnVZMlU2SUdKMWRIUnZianRjYmlBZ0x5b2dNU0FxTDF4dUlDQm1iMjUwT2lCcGJtaGxjbWwwTzF4dUlDQXZLaUF5SUNvdlhHNTlYRzR2S2lCSmJuUmxjbUZqZEdsMlpWeHVJQ0FnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwZ0tpOWNiaThxWEc0Z0tpQkJaR1FnZEdobElHTnZjbkpsWTNRZ1pHbHpjR3hoZVNCcGJpQkZaR2RsTENCSlJTQXhNQ3NzSUdGdVpDQkdhWEpsWm05NExseHVJQ292WEc1a1pYUmhhV3h6SUh0Y2JpQWdaR2x6Y0d4aGVUb2dZbXh2WTJzN1hHNTlYRzR2S2x4dUlDb2dRV1JrSUhSb1pTQmpiM0p5WldOMElHUnBjM0JzWVhrZ2FXNGdZV3hzSUdKeWIzZHpaWEp6TGx4dUlDb3ZYRzV6ZFcxdFlYSjVJSHRjYmlBZ1pHbHpjR3hoZVRvZ2JHbHpkQzFwZEdWdE8xeHVmVnh1THlvZ1RXbHpZMXh1SUNBZ1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMGdLaTljYmk4cUtseHVJQ29nUVdSa0lIUm9aU0JqYjNKeVpXTjBJR1JwYzNCc1lYa2dhVzRnU1VVZ01UQXJMbHh1SUNvdlhHNTBaVzF3YkdGMFpTQjdYRzRnSUdScGMzQnNZWGs2SUc1dmJtVTdYRzU5WEc0dktpcGNiaUFxSUVGa1pDQjBhR1VnWTI5eWNtVmpkQ0JrYVhOd2JHRjVJR2x1SUVsRklERXdMbHh1SUNvdlhHNWJhR2xrWkdWdVhTQjdYRzRnSUdScGMzQnNZWGs2SUc1dmJtVTdYRzU5WEc0dktpQTlQVDA5UFNCQ1lYTmxJRDA5UFQwOUlDb3ZYRzVvZEcxc0xGeHVZbTlrZVNCN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdZbUZqYTJkeWIzVnVaRG9nSTJaaFptRm1ZVHRjYmlBZ1kyOXNiM0k2SUNNek16TTdYRzRnSUdadmJuUXRjMmw2WlRvZ01UUndlRHRjYmlBZ2JHbHVaUzFvWldsbmFIUTZJREUxTUNVN1hHNGdJR1p2Ym5RdFptRnRhV3g1T2lCY0lrMXBZM0p2YzI5bWRDQlpZVWhsYVNCVlNWd2lMQ0JCY21saGJDd2djMkZ1Y3kxelpYSnBaanRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNibUU2YkdsdWF5eGNibUU2ZG1semFYUmxaQ3hjYm1FNmFHOTJaWElnZTF4dUlDQmpiMnh2Y2pvZ0l6QTFPRGswTWp0Y2JpQWdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQnViMjVsTzF4dWZWeHVZVHBvYjNabGNpQjdYRzRnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nZFc1a1pYSnNhVzVsTzF4dWZWeHVZMjlrWlNCN1hHNGdJR1p2Ym5RdFptRnRhV3g1T2lCY0lsTnZkWEpqWlNCRGIyUmxJRkJ5YjF3aUxDQkRiMjV6YjJ4aGN5d2dSMlZ2Y21kcFlTd2dUVzl1WVdOdkxDQnRiMjV2YzNCaFkyVXNJRUZ5YVdGc0xDQnpZVzV6TFhObGNtbG1PMXh1ZlZ4dUx5b2dQVDA5UFQwZ1UyTnliMnhzWW1GeUlEMDlQVDA5SUNvdlhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlJSHRjYmlBZ2QybGtkR2c2SURkd2VEdGNiaUFnYUdWcFoyaDBPaUEzY0hnN1hHNGdJQzEzWldKcmFYUXRZbTl5WkdWeUxYSmhaR2wxY3pvZ05YQjRPMXh1ZlZ4dU9qb3RkMlZpYTJsMExYTmpjbTlzYkdKaGNpMTBjbUZqYXkxd2FXVmpaU0I3WEc0Z0lDMTNaV0pyYVhRdFltOXlaR1Z5TFhKaFpHbDFjem9nTlhCNE8xeHVmVnh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2kxMGFIVnRZanAyWlhKMGFXTmhiQ0I3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklISm5ZbUVvTUN3Z01Dd2dNQ3dnTUM0eU5TazdYRzRnSUMxM1pXSnJhWFF0WW05eVpHVnlMWEpoWkdsMWN6b2dOWEI0TzF4dWZWeHVPam90ZDJWaWEybDBMWE5qY205c2JHSmhjaTEwYUhWdFlqcG9iM0pwZW05dWRHRnNJSHRjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ2NtZGlZU2d3TENBd0xDQXdMQ0F3TGpJMUtUdGNiaUFnTFhkbFltdHBkQzFpYjNKa1pYSXRjbUZrYVhWek9pQTFjSGc3WEc1OVhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlPbWh2ZG1WeUlIdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nY21kaVlTZ3dMQ0F3TENBd0xDQXdMakUxS1R0Y2JuMWNiam82TFhkbFltdHBkQzF6WTNKdmJHeGlZWEl0ZEdoMWJXSTZhRzkyWlhJZ2UxeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUJ5WjJKaEtEQXNJREFzSURBc0lEQXVNelVwTzF4dWZWeHVMeW9nVEdGNWIzVjBJQ292WEc0dVpHOWpjeUI3WEc0Z0lHUnBjM0JzWVhrNklHWnNaWGc3WEc0Z0lHWnNaWGd0WkdseVpXTjBhVzl1T2lCeWIzYzdYRzRnSUdac1pYZ3RkM0poY0RvZ2JtOTNjbUZ3TzF4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUhvdGFXNWtaWGc2SURFN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdkMmxrZEdnNklERXdNQ1U3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpOHFJRUZ6YVdSbElDb3ZYRzR1WVhOcFpHVWdlMXh1SUNCa2FYTndiR0Y1T2lCbWJHVjRPMXh1SUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjYmlBZ1pteGxlQzFrYVhKbFkzUnBiMjQ2SUdOdmJIVnRianRjYmlBZ1pteGxlQzEzY21Gd09pQnViM2R5WVhBN1hHNGdJSGRwWkhSb09pQXlOakJ3ZUR0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1SUNCb1pXbG5hSFE2SURFd01DVTdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNNek16TTdYRzRnSUdOdmJHOXlPaUFqWkdSa08xeHVJQ0JpYjNndGMyaGhaRzkzT2lBd0lEQWdOWEI0SURKd2VDQWpaR1JrTzF4dUlDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2JuMWNiaThxSUUxaGFXNGdLaTljYmk1dFlXbHVJSHRjYmlBZ1pteGxlRG9nTVR0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0JvWldsbmFIUTZJREV3TUNVN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN1hHNGdJRzkyWlhKbWJHOTNPaUJoZFhSdk8xeHVmVnh1TG1GemFXUmxJSHRjYmlBZ1ptOXVkQzFtWVcxcGJIazZJRndpVTI5MWNtTmxJRU52WkdVZ1VISnZYQ0lzSUVOdmJuTnZiR0Z6TENCSFpXOXlaMmxoTENCTmIyNWhZMjhzSUcxdmJtOXpjR0ZqWlN3Z1FYSnBZV3dzSUhOaGJuTXRjMlZ5YVdZN1hHNTlYRzR1WVhOcFpHVmZYMmhsWVdSbGNpQjdYRzRnSUcxaGNtZHBiam9nTUNCaGRYUnZPMXh1SUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTVoYzJsa1pWOWZibUYySUh0Y2JpQWdabXhsZURvZ01UdGNiaUFnYjNabGNtWnNiM2M2SUdGMWRHODdYRzU5WEc0dVlYTnBaR1ZmWDJneUlIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUdobGFXZG9kRG9nTlRSd2VEdGNiaUFnYkdsdVpTMW9aV2xuYUhRNklEVTBjSGc3WEc0Z0lHWnZiblF0YzJsNlpUb2dNakJ3ZUR0Y2JpQWdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHRjYmlBZ1ptOXVkQzFtWVcxcGJIazZJRWRsYjNKbmFXRXNJRU52Ym5OdmJHRnpMQ0JCY21saGJDd2djMkZ1Y3kxelpYSnBaanRjYmlBZ2RHVjRkQzFoYkdsbmJqb2dZMlZ1ZEdWeU8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtRnphV1JsWDE5b015QjdYRzRnSUcxaGNtZHBiam9nTUNCaGRYUnZPMXh1SUNCd1lXUmthVzVuT2lBd0lESXdjSGc3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVFp3ZUR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1aGMybGtaVjlmYkdsemRDQjdYRzRnSUcxaGNtZHBiam9nTUR0Y2JpQWdjR0ZrWkdsdVp6b2dNVEJ3ZUNBd08xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtRnphV1JsWDE5cGRHVnRJSHRjYmlBZ2FHVnBaMmgwT2lBek1uQjRPMXh1SUNCc2FXNWxMV2hsYVdkb2REb2dNekp3ZUR0Y2JpQWdjR0ZrWkdsdVp6b2dNQ0F6TUhCNE8xeHVJQ0JqZFhKemIzSTZJSEJ2YVc1MFpYSTdYRzRnSUdadmJuUXRjMmw2WlRvZ01UTndlRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTVoYzJsa1pWOWZhWFJsYlM1aFkzUnBkbVVzWEc0dVlYTnBaR1ZmWDJsMFpXMDZhRzkyWlhJZ2UxeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUFqTlRVMU8xeHVmVnh1TG1GemFXUmxYMTlwZEdWdExtRmpkR2wyWlNCN1hHNGdJR0p2Y21SbGNpMXNaV1owT2lBemNIZ2djMjlzYVdRZ0kyWm1aanRjYm4xY2JpNWhjMmxrWlY5ZllXNWphRzl5T214cGJtc2dlMXh1SUNCamIyeHZjam9nSTJSa1pEdGNiaUFnZEdWNGRDMWtaV052Y21GMGFXOXVPaUJ1YjI1bE8xeHVmVnh1TG1GemFXUmxYMTloYm1Ob2IzSTZkbWx6YVhSbFpDQjdYRzRnSUdOdmJHOXlPaUFqWkdSa08xeHVJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hHNTlYRzR1WVhOcFpHVmZYMkZ1WTJodmNqcG9iM1psY2lCN1hHNGdJR052Ykc5eU9pQWpaR1JrTzF4dUlDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklIVnVaR1Z5YkdsdVpUdGNibjFjYmk1dFlXbHVYMTlvWldGa1pYSXNYRzR1YldGcGJsOWZabTl2ZEdWeUlIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUhCaFpHUnBibWM2SURGbGJUdGNiaUFnZEdWNGRDMWhiR2xuYmpvZ1kyVnVkR1Z5TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG0xaGFXNWZYMmd4SUh0Y2JpQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hHNGdJSEJoWkdScGJtY3RkRzl3T2lBeFpXMDdYRzRnSUdadmJuUXRjMmw2WlRvZ05XVnRPMXh1SUNCbWIyNTBMWGRsYVdkb2REb2dibTl5YldGc08xeHVJQ0JzYVc1bExXaGxhV2RvZERvZ01tVnRPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTFoYVc1ZlgyNWhiV1VnZTF4dUlDQmpiMnh2Y2pvZ0l6Rm1PR1JrTmp0Y2JpQWdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHRjYm4xY2JpNXRZV2x1WDE5MFlXZHNhVzVsSUh0Y2JpQWdiV0Z5WjJsdU9pQXhaVzBnWVhWMGJ6dGNiaUFnYldGNExYZHBaSFJvT2lBMk5qQndlRHRjYmlBZ2JHbHVaUzFvWldsbmFIUTZJREV1TTJWdE8xeHVJQ0JtYjI1MExYTnBlbVU2SURKbGJUdGNiaUFnWTI5c2IzSTZJQ001T1RrN1hHNGdJR1p2Ym5RdGQyVnBaMmgwT2lBeE1EQTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViV0ZwYmw5ZlkyUnVJSHRjYmlBZ2JXRnlaMmx1T2lBeVpXMGdNRHRjYmlBZ2NHRmtaR2x1WnpvZ01tVnRPMXh1SUNCbWIyNTBMWE5wZW1VNklERTJjSGc3WEc0Z0lHeHBibVV0YUdWcFoyaDBPaUF4TlRBbE8xeHVJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1ZV1poWm1FN1hHNGdJR0p2Y21SbGNpMTBiM0E2SURGd2VDQnpiMnhwWkNBalpHUmtPMXh1SUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnSTJSa1pEdGNiaUFnWTI5c2IzSTZJQ00yTmpZN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWJXRnBibDlmWkc5M2JteHZZV1FnZTF4dUlDQnRZWEpuYVc0NklERmxiU0JoZFhSdk8xeHVJQ0IzYVdSMGFEb2dNakF3Y0hnN1hHNGdJSFJsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV0WVdsdVgxOWlkWFIwYjI0Z2UxeHVJQ0JrYVhOd2JHRjVPaUJwYm14cGJtVXRZbXh2WTJzN1hHNGdJR0p2Y21SbGNpMXlZV1JwZFhNNklEUndlRHRjYmlBZ2NHRmtaR2x1WnpvZ01UUndlQ0F5T1hCNE8xeHVJQ0JtYjI1MExYTnBlbVU2SURFNGNIZzdYRzRnSUdadmJuUXRabUZ0YVd4NU9pQmNJbE52ZFhKalpTQkRiMlJsSUZCeWIxd2lMQ0JEYjI1emIyeGhjeXdnUjJWdmNtZHBZU3dnVFc5dVlXTnZMQ0J0YjI1dmMzQmhZMlVzSUVGeWFXRnNMQ0J6WVc1ekxYTmxjbWxtTzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpNRFU0T1RReU8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtMWhhVzVmWDJKMWRIUnZianBzYVc1ckxGeHVMbTFoYVc1ZlgySjFkSFJ2YmpwMmFYTnBkR1ZrTEZ4dUxtMWhhVzVmWDJKMWRIUnZianBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqWm1abU8xeHVJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hHNTlYRzR1YldGcGJsOWZabTl2ZEdWeUlIdGNiaUFnYldGeVoybHVPaUF3SURObGJUdGNiaUFnWW05eVpHVnlMWFJ2Y0RvZ01YQjRJSE52Ykdsa0lDTmtaR1E3WEc1OVhHNHVjMlZqZEdsdmJpQjdYRzRnSUcxaGNtZHBiam9nTVdWdElEQTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHVjMlZqZEdsdmJsOWZhR1ZoWkdWeUxGeHVMbk5sWTNScGIyNWZYMk52Ym5SbGJuUXNYRzR1YzJWamRHbHZibDlmWm05dmRHVnlJSHRjYmlBZ2JXRnlaMmx1T2lBd0lETmxiVHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV6WldOMGFXOXVYMTkwYVhSc1pTQjdYRzRnSUdOdmJHOXlPaUFqTmpZMk8xeHVmVnh1TG5ObFkzUnBiMjVmWDJneklIdGNiaUFnWTI5c2IzSTZJQ014Wmpoa1pEWTdYRzRnSUdadmJuUXRjMmw2WlRvZ01TNHpOV1Z0TzF4dWZWeHVMbk5sWTNScGIyNWZYMmcwSUh0Y2JpQWdabTl1ZEMxemFYcGxPaUF4TGpGbGJUdGNiaUFnWTI5c2IzSTZJQ00yTmpZN1hHNTlYRzR1YzJWamRHbHZibDlmYURVZ2UxeHVJQ0JtYjI1MExYTnBlbVU2SURGbGJUdGNiaUFnWTI5c2IzSTZJQ001T1RrN1hHNTlYRzR1YzJWamRHbHZibDlmWkd3c1hHNHVjMlZqZEdsdmJsOWZaSFFzWEc0dWMyVmpkR2x2Ymw5ZlpHUWdlMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJSEJoWkdScGJtYzZJREE3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YzJWamRHbHZibDlmWkd3Z2UxeHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lIb3RhVzVrWlhnNklERTdYRzU5WEc0dWMyVmpkR2x2Ymw5ZlpIUWdlMXh1SUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzU5WEc0dWMyVmpkR2x2Ymw5ZlpHUWdlMXh1SUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzRnSUdOdmJHOXlPaUFqTURVNE9UUXlPMXh1ZlZ4dUxuTmxZM1JwYjI1ZlgzQnlaU0I3WEc0Z0lHMWhjbWRwYmpvZ01tVnRJREE3WEc0Z0lIQmhaR1JwYm1jNklERmxiVHRjYmlBZ1ptOXVkQzF6YVhwbE9pQXhOSEI0TzF4dUlDQnNhVzVsTFdobGFXZG9kRG9nTVRVd0pUdGNiaUFnZEdWNGRDMWhiR2xuYmpvZ2JHVm1kRHRjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWmhabUZtWVR0Y2JpQWdZbTl5WkdWeU9pQXhjSGdnYzI5c2FXUWdJMlJrWkR0Y2JpQWdZbTl5WkdWeUxYSmhaR2wxY3pvZ05IQjRPMXh1SUNCamIyeHZjam9nSXpZMk5qdGNiaUFnYjNabGNtWnNiM2M2SUdGMWRHODdYRzU5WEc0dWMyVmpkR2x2Ymw5ZlkyOWtaU0I3WEc0Z0lHUnBjM0JzWVhrNklHSnNiMk5yTzF4dUlDQnRZWEpuYVc0NklEQWdZWFYwYnp0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1elpXTjBhVzl1WDE5bWIyOTBaWElnZTF4dUlDQmliM0prWlhJdGRHOXdPaUF4Y0hnZ2MyOXNhV1FnSTJSa1pEdGNiaUFnYldGeVoybHVMWFJ2Y0RvZ00yVnRPMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalptRm1ZV1poTzF4dUlDQmpiMnh2Y2pvZ0l6azVPVHRjYm4xY2JpNWpZWE5sSUh0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0JrYVhOd2JHRjVPaUJuY21sa08xeHVJQ0JuY21sa0xYUmxiWEJzWVhSbExXTnZiSFZ0Ym5NNklISmxjR1ZoZENneUxDQXhabklwTzF4dUlDQm5ZWEE2SURRd2NIZzdYRzRnSUhCaFpHUnBibWM2SURGbGJUdGNiaUFnWW05eVpHVnlMWFJ2Y0RvZ01YQjRJSE52Ykdsa0lDTmtaR1E3WEc0Z0lHSnZjbVJsY2kxaWIzUjBiMjA2SURGd2VDQnpiMnhwWkNBalpHUmtPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbU5oYzJVNllXWjBaWElnZTF4dUlDQmpiMjUwWlc1ME9pQW5KenRjYmlBZ2NHOXphWFJwYjI0NklHRmljMjlzZFhSbE8xeHVJQ0I2TFdsdVpHVjRPaUF5TzF4dUlDQjBiM0E2SURBN1hHNGdJR3hsWm5RNklEVXdKVHRjYmlBZ2FHVnBaMmgwT2lBeE1EQWxPMXh1SUNCM2FXUjBhRG9nTUR0Y2JpQWdZbTl5WkdWeUxXeGxablE2SURGd2VDQnpiMnhwWkNBalpHUmtPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbU5oYzJWZlgzQnlaU3hjYmk1allYTmxYMTkwWlhoMFlYSmxZU0I3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVE53ZUR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURFMU1DVTdYRzU5WEc0dVkyRnpaVjlmY0hKbExGeHVMbU5oYzJWZlgyTnZaR1VzWEc0dVkyRnpaVjlmZEdWNGRHRnlaV0VnZTF4dUlDQm1iMjUwTFdaaGJXbHNlVG9nWENKRGIzVnlhV1Z5SUU1bGQxd2lMQ0JEYjI1emIyeGhjeXdnUjJWdmNtZHBZU3dnUVhKcFlXd3NJSE5oYm5NdGMyVnlhV1k3WEc1OVhHNHVZMkZ6WlY5ZmNISmxJSHRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0J3WVdSa2FXNW5PaUF4WlcwN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWVdaaFptRTdYRzRnSUdobGFXZG9kRG9nTVRBd0pUdGNiaUFnWW05eVpHVnlMWEpoWkdsMWN6b2dOSEI0TzF4dUlDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4dUlDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2JuMWNiaTVqWVhObFgxOTBiMjlzWW1GeUlIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUdobGFXZG9kRG9nTXpad2VEdGNiaUFnYkdsdVpTMW9aV2xuYUhRNklETTJjSGc3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVFJ3ZUR0Y2JpQWdjR0ZrWkdsdVp6b2dNQ0F4Tm5CNE8xeHVJQ0IwWlhoMExXRnNhV2R1T2lCeWFXZG9kRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTVqWVhObFgxOWhZM1JwYjI0c1hHNHVZMkZ6WlY5ZmNtVnRiM1psSUh0Y2JpQWdZM1Z5YzI5eU9pQndiMmx1ZEdWeU8xeHVJQ0JqYjJ4dmNqb2dJekExT0RrME1qdGNiaUFnZFhObGNpMXpaV3hsWTNRNklHNXZibVU3WEc1OVhHNHVZMkZ6WlY5ZllXTjBhVzl1SUh0Y2JpQWdabTl1ZEMxemFYcGxPaUF4TTNCNE8xeHVJQ0J3WVdSa2FXNW5MV3hsWm5RNklERXdjSGc3WEc1OVhHNHVZMkZ6WlY5ZllXTjBhVzl1T21acGNuTjBMV05vYVd4a0lIdGNiaUFnY0dGa1pHbHVaeTFzWldaME9pQXdPMXh1ZlZ4dUxtTmhjMlZmWDNKbGJXOTJaU0I3WEc0Z0lHWnNiMkYwT2lCeWFXZG9kRHRjYm4xY2JpNWpZWE5sWDE5amIyNXpiMnhsSUh0Y2JpQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hHNGdJR2hsYVdkb2REb2dNVGd3Y0hnN1hHNGdJR0p2Y21SbGNqb2dNWEI0SUhOdmJHbGtJQ05rWkdRN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dVkyRnpaVjlmZEdWNGRHRnlaV0VnZTF4dUlDQnRZWEpuYVc0NklEQWdZWFYwYnp0Y2JpQWdkMmxrZEdnNklERXdNQ1U3WEc0Z0lHaGxhV2RvZERvZ01UQXdKVHRjYmlBZ1ltOXlaR1Z5T2lCdWIyNWxPMXh1SUNCdmRYUnNhVzVsT2lCdWIyNWxPMXh1SUNCd1lXUmthVzVuT2lBeFpXMDdYRzRnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzRnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh1ZlZ4dUxtTmhjMlZmWDJ4cGMzUXNYRzR1WTJGelpWOWZhWFJsYlNCN1hHNGdJRzFoY21kcGJqb2dNRHRjYmlBZ2NHRmtaR2x1WnpvZ01EdGNiaUFnYkdsemRDMXpkSGxzWlMxMGVYQmxPaUJ1YjI1bE8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtTmhjMlZmWDJ4cGMzUWdlMXh1SUNCb1pXbG5hSFE2SURNMk1IQjRPMXh1SUNCaWIzSmtaWEl0ZEc5d09pQXhjSGdnYzI5c2FXUWdJMlJrWkR0Y2JpQWdZbTl5WkdWeUxXSnZkSFJ2YlRvZ01YQjRJSE52Ykdsa0lDTmtaR1E3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVE53ZUR0Y2JpQWdiM1psY21ac2IzYzZJR0YxZEc4N1hHNTlYRzR1WTJGelpWOWZhWFJsYlNCN1hHNGdJR2hsYVdkb2REb2dNelp3ZUR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURNMmNIZzdYRzRnSUdOMWNuTnZjam9nY0c5cGJuUmxjanRjYmlBZ2NHRmtaR2x1WnpvZ01DQXhObkI0TzF4dWZWeHVMbU5oYzJWZlgybDBaVzA2YUc5MlpYSWdlMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalpqZG1PR1k1TzF4dWZWeHVMbUoxZEhSdmJuTWdlMXh1SUNCd2IzTnBkR2x2YmpvZ1ptbDRaV1E3WEc0Z0lIb3RhVzVrWlhnNklESTdYRzRnSUhSdmNEb2dOVEFsTzF4dUlDQnlhV2RvZERvZ01USndlRHRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0IzYVdSMGFEb2dOVFp3ZUR0Y2JpQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZaS0MwMU1DVXBPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbUoxZEhSdmJuTmZYMmwwWlcwZ2UxeHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lIb3RhVzVrWlhnNklERTdYRzRnSUcxaGNtZHBiam9nTVRCd2VEdGNiaUFnZDJsa2RHZzZJRE0yY0hnN1hHNGdJR2hsYVdkb2REb2dNelp3ZUR0Y2JpQWdZbTl5WkdWeU9pQXhjSGdnYzI5c2FXUWdJMlJrWkR0Y2JpQWdZbTl5WkdWeUxYSmhaR2wxY3pvZ05IQjRPMXh1SUNCaWIzZ3RjMmhoWkc5M09pQXdJREFnTm5CNElDTmtaR1E3WEc0Z0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3WEc0Z0lHTjFjbk52Y2pvZ2NHOXBiblJsY2p0Y2JpQWdkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPMXh1SUNCamIyeHZjam9nSXprNU9UdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNWlkWFIwYjI1elgxOXBkR1Z0T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNd05UZzVOREk3WEc1OVhHNHVZblYwZEc5dWMxOWZhWFJsYlM1b2FXUmxJSHRjYmlBZ1pHbHpjR3hoZVRvZ2JtOXVaVHRjYm4xY2JpNWlkWFIwYjI1elgxOWhibU5vYjNJNmJHbHVheXhjYmk1aWRYUjBiMjV6WDE5aGJtTm9iM0k2ZG1semFYUmxaQ3hjYmk1aWRYUjBiMjV6WDE5aGJtTm9iM0k2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXprNU9UdGNibjFjYmk1aWRYUjBiMjV6WDE5aGJtTm9iM0k2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXpBMU9EazBNanRjYm4xY2JpNWlkWFIwYjI1elgxOXBZMjl1SUh0Y2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0IwYjNBNklEVXdKVHRjYmlBZ2JHVm1kRG9nTlRBbE8xeHVJQ0IzYVdSMGFEb2dNakJ3ZUR0Y2JpQWdhR1ZwWjJoME9pQXlNSEI0TzF4dUlDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaU2d0TlRBbExDQXROVEFsS1R0Y2JpQWdabWxzYkRvZ1kzVnljbVZ1ZEdOdmJHOXlPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVJaXdpTHlvaElHNXZjbTFoYkdsNlpTNWpjM01nZGpndU1DNHhJSHdnVFVsVUlFeHBZMlZ1YzJVZ2ZDQm5hWFJvZFdJdVkyOXRMMjVsWTI5c1lYTXZibTl5YldGc2FYcGxMbU56Y3lBcUwxeHlYRzVjY2x4dUx5b2dSRzlqZFcxbGJuUmNjbHh1SUNBZ1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMGdLaTljY2x4dVhISmNiaThxS2x4eVhHNGdLaUF4TGlCRGIzSnlaV04wSUhSb1pTQnNhVzVsSUdobGFXZG9kQ0JwYmlCaGJHd2dZbkp2ZDNObGNuTXVYSEpjYmlBcUlESXVJRkJ5WlhabGJuUWdZV1JxZFhOMGJXVnVkSE1nYjJZZ1ptOXVkQ0J6YVhwbElHRm1kR1Z5SUc5eWFXVnVkR0YwYVc5dUlHTm9ZVzVuWlhNZ2FXNGdhVTlUTGx4eVhHNGdLaTljY2x4dVhISmNibWgwYld3Z2UxeHlYRzRnSUd4cGJtVXRhR1ZwWjJoME9pQXhMakUxT3lBdktpQXhJQ292WEhKY2JpQWdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lBdktpQXlJQ292WEhKY2JuMWNjbHh1WEhKY2JpOHFJRk5sWTNScGIyNXpYSEpjYmlBZ0lEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlJQ292WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nVW1WdGIzWmxJSFJvWlNCdFlYSm5hVzRnYVc0Z1lXeHNJR0p5YjNkelpYSnpMbHh5WEc0Z0tpOWNjbHh1WEhKY2JtSnZaSGtnZTF4eVhHNGdJRzFoY21kcGJqb2dNRHRjY2x4dWZWeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlGSmxibVJsY2lCMGFHVWdZRzFoYVc1Z0lHVnNaVzFsYm5RZ1kyOXVjMmx6ZEdWdWRHeDVJR2x1SUVsRkxseHlYRzRnS2k5Y2NseHVYSEpjYm0xaGFXNGdlMXh5WEc0Z0lHUnBjM0JzWVhrNklHSnNiMk5yTzF4eVhHNTlYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dRMjl5Y21WamRDQjBhR1VnWm05dWRDQnphWHBsSUdGdVpDQnRZWEpuYVc0Z2IyNGdZR2d4WUNCbGJHVnRaVzUwY3lCM2FYUm9hVzRnWUhObFkzUnBiMjVnSUdGdVpGeHlYRzRnS2lCZ1lYSjBhV05zWldBZ1kyOXVkR1Y0ZEhNZ2FXNGdRMmh5YjIxbExDQkdhWEpsWm05NExDQmhibVFnVTJGbVlYSnBMbHh5WEc0Z0tpOWNjbHh1WEhKY2JtZ3hJSHRjY2x4dUlDQm1iMjUwTFhOcGVtVTZJREpsYlR0Y2NseHVJQ0J0WVhKbmFXNDZJREF1TmpkbGJTQXdPMXh5WEc1OVhISmNibHh5WEc0dktpQkhjbTkxY0dsdVp5QmpiMjUwWlc1MFhISmNiaUFnSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOUlDb3ZYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dNUzRnUVdSa0lIUm9aU0JqYjNKeVpXTjBJR0p2ZUNCemFYcHBibWNnYVc0Z1JtbHlaV1p2ZUM1Y2NseHVJQ29nTWk0Z1UyaHZkeUIwYUdVZ2IzWmxjbVpzYjNjZ2FXNGdSV1JuWlNCaGJtUWdTVVV1WEhKY2JpQXFMMXh5WEc1Y2NseHVhSElnZTF4eVhHNGdJR0p2ZUMxemFYcHBibWM2SUdOdmJuUmxiblF0WW05NE95QXZLaUF4SUNvdlhISmNiaUFnYUdWcFoyaDBPaUF3T3lBdktpQXhJQ292WEhKY2JpQWdiM1psY21ac2IzYzZJSFpwYzJsaWJHVTdJQzhxSURJZ0tpOWNjbHh1ZlZ4eVhHNWNjbHh1THlvcVhISmNiaUFxSURFdUlFTnZjbkpsWTNRZ2RHaGxJR2x1YUdWeWFYUmhibU5sSUdGdVpDQnpZMkZzYVc1bklHOW1JR1p2Ym5RZ2MybDZaU0JwYmlCaGJHd2dZbkp2ZDNObGNuTXVYSEpjYmlBcUlESXVJRU52Y25KbFkzUWdkR2hsSUc5a1pDQmdaVzFnSUdadmJuUWdjMmw2YVc1bklHbHVJR0ZzYkNCaWNtOTNjMlZ5Y3k1Y2NseHVJQ292WEhKY2JseHlYRzV3Y21VZ2UxeHlYRzRnSUdadmJuUXRabUZ0YVd4NU9pQnRiMjV2YzNCaFkyVXNJRzF2Ym05emNHRmpaVHNnTHlvZ01TQXFMMXh5WEc0Z0lHWnZiblF0YzJsNlpUb2dNV1Z0T3lBdktpQXlJQ292WEhKY2JuMWNjbHh1WEhKY2JpOHFJRlJsZUhRdGJHVjJaV3dnYzJWdFlXNTBhV056WEhKY2JpQWdJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5SUNvdlhISmNibHh5WEc0dktpcGNjbHh1SUNvZ1VtVnRiM1psSUhSb1pTQm5jbUY1SUdKaFkydG5jbTkxYm1RZ2IyNGdZV04wYVhabElHeHBibXR6SUdsdUlFbEZJREV3TGx4eVhHNGdLaTljY2x4dVhISmNibUVnZTF4eVhHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJSFJ5WVc1emNHRnlaVzUwTzF4eVhHNTlYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dNUzRnVW1WdGIzWmxJSFJvWlNCaWIzUjBiMjBnWW05eVpHVnlJR2x1SUVOb2NtOXRaU0ExTnkxY2NseHVJQ29nTWk0Z1FXUmtJSFJvWlNCamIzSnlaV04wSUhSbGVIUWdaR1ZqYjNKaGRHbHZiaUJwYmlCRGFISnZiV1VzSUVWa1oyVXNJRWxGTENCUGNHVnlZU3dnWVc1a0lGTmhabUZ5YVM1Y2NseHVJQ292WEhKY2JseHlYRzVoWW1KeVczUnBkR3hsWFNCN1hISmNiaUFnWW05eVpHVnlMV0p2ZEhSdmJUb2dibTl1WlRzZ0x5b2dNU0FxTDF4eVhHNGdJSFJsZUhRdFpHVmpiM0poZEdsdmJqb2dkVzVrWlhKc2FXNWxPeUF2S2lBeUlDb3ZYSEpjYmlBZ2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCMWJtUmxjbXhwYm1VZ1pHOTBkR1ZrT3lBdktpQXlJQ292WEhKY2JuMWNjbHh1WEhKY2JpOHFLbHh5WEc0Z0tpQkJaR1FnZEdobElHTnZjbkpsWTNRZ1ptOXVkQ0IzWldsbmFIUWdhVzRnUTJoeWIyMWxMQ0JGWkdkbExDQmhibVFnVTJGbVlYSnBMbHh5WEc0Z0tpOWNjbHh1WEhKY2JtSXNYSEpjYm5OMGNtOXVaeUI3WEhKY2JpQWdabTl1ZEMxM1pXbG5hSFE2SUdKdmJHUmxjanRjY2x4dWZWeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlERXVJRU52Y25KbFkzUWdkR2hsSUdsdWFHVnlhWFJoYm1ObElHRnVaQ0J6WTJGc2FXNW5JRzltSUdadmJuUWdjMmw2WlNCcGJpQmhiR3dnWW5KdmQzTmxjbk11WEhKY2JpQXFJREl1SUVOdmNuSmxZM1FnZEdobElHOWtaQ0JnWlcxZ0lHWnZiblFnYzJsNmFXNW5JR2x1SUdGc2JDQmljbTkzYzJWeWN5NWNjbHh1SUNvdlhISmNibHh5WEc1amIyUmxMRnh5WEc1clltUXNYSEpjYm5OaGJYQWdlMXh5WEc0Z0lHWnZiblF0Wm1GdGFXeDVPaUJ0YjI1dmMzQmhZMlVzSUcxdmJtOXpjR0ZqWlRzZ0x5b2dNU0FxTDF4eVhHNGdJR1p2Ym5RdGMybDZaVG9nTVdWdE95QXZLaUF5SUNvdlhISmNibjFjY2x4dVhISmNiaThxS2x4eVhHNGdLaUJCWkdRZ2RHaGxJR052Y25KbFkzUWdabTl1ZENCemFYcGxJR2x1SUdGc2JDQmljbTkzYzJWeWN5NWNjbHh1SUNvdlhISmNibHh5WEc1emJXRnNiQ0I3WEhKY2JpQWdabTl1ZEMxemFYcGxPaUE0TUNVN1hISmNibjFjY2x4dVhISmNiaThxS2x4eVhHNGdLaUJRY21WMlpXNTBJR0J6ZFdKZ0lHRnVaQ0JnYzNWd1lDQmxiR1Z0Wlc1MGN5Qm1jbTl0SUdGbVptVmpkR2x1WnlCMGFHVWdiR2x1WlNCb1pXbG5hSFFnYVc1Y2NseHVJQ29nWVd4c0lHSnliM2R6WlhKekxseHlYRzRnS2k5Y2NseHVYSEpjYm5OMVlpeGNjbHh1YzNWd0lIdGNjbHh1SUNCbWIyNTBMWE5wZW1VNklEYzFKVHRjY2x4dUlDQnNhVzVsTFdobGFXZG9kRG9nTUR0Y2NseHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEhKY2JpQWdkbVZ5ZEdsallXd3RZV3hwWjI0NklHSmhjMlZzYVc1bE8xeHlYRzU5WEhKY2JseHlYRzV6ZFdJZ2UxeHlYRzRnSUdKdmRIUnZiVG9nTFRBdU1qVmxiVHRjY2x4dWZWeHlYRzVjY2x4dWMzVndJSHRjY2x4dUlDQjBiM0E2SUMwd0xqVmxiVHRjY2x4dWZWeHlYRzVjY2x4dUx5b2dSVzFpWldSa1pXUWdZMjl1ZEdWdWRGeHlYRzRnSUNBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBTQXFMMXh5WEc1Y2NseHVMeW9xWEhKY2JpQXFJRkpsYlc5MlpTQjBhR1VnWW05eVpHVnlJRzl1SUdsdFlXZGxjeUJwYm5OcFpHVWdiR2x1YTNNZ2FXNGdTVVVnTVRBdVhISmNiaUFxTDF4eVhHNWNjbHh1YVcxbklIdGNjbHh1SUNCaWIzSmtaWEl0YzNSNWJHVTZJRzV2Ym1VN1hISmNibjFjY2x4dVhISmNiaThxSUVadmNtMXpYSEpjYmlBZ0lEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlJQ292WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nTVM0Z1EyaGhibWRsSUhSb1pTQm1iMjUwSUhOMGVXeGxjeUJwYmlCaGJHd2dZbkp2ZDNObGNuTXVYSEpjYmlBcUlESXVJRkpsYlc5MlpTQjBhR1VnYldGeVoybHVJR2x1SUVacGNtVm1iM2dnWVc1a0lGTmhabUZ5YVM1Y2NseHVJQ292WEhKY2JseHlYRzVpZFhSMGIyNHNYSEpjYm1sdWNIVjBMRnh5WEc1dmNIUm5jbTkxY0N4Y2NseHVjMlZzWldOMExGeHlYRzUwWlhoMFlYSmxZU0I3WEhKY2JpQWdabTl1ZEMxbVlXMXBiSGs2SUdsdWFHVnlhWFE3SUM4cUlERWdLaTljY2x4dUlDQm1iMjUwTFhOcGVtVTZJREV3TUNVN0lDOHFJREVnS2k5Y2NseHVJQ0JzYVc1bExXaGxhV2RvZERvZ01TNHhOVHNnTHlvZ01TQXFMMXh5WEc0Z0lHMWhjbWRwYmpvZ01Ec2dMeW9nTWlBcUwxeHlYRzU5WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nVTJodmR5QjBhR1VnYjNabGNtWnNiM2NnYVc0Z1NVVXVYSEpjYmlBcUlERXVJRk5vYjNjZ2RHaGxJRzkyWlhKbWJHOTNJR2x1SUVWa1oyVXVYSEpjYmlBcUwxeHlYRzVjY2x4dVluVjBkRzl1TEZ4eVhHNXBibkIxZENCN0lDOHFJREVnS2k5Y2NseHVJQ0J2ZG1WeVpteHZkem9nZG1semFXSnNaVHRjY2x4dWZWeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlGSmxiVzkyWlNCMGFHVWdhVzVvWlhKcGRHRnVZMlVnYjJZZ2RHVjRkQ0IwY21GdWMyWnZjbTBnYVc0Z1JXUm5aU3dnUm1seVpXWnZlQ3dnWVc1a0lFbEZMbHh5WEc0Z0tpQXhMaUJTWlcxdmRtVWdkR2hsSUdsdWFHVnlhWFJoYm1ObElHOW1JSFJsZUhRZ2RISmhibk5tYjNKdElHbHVJRVpwY21WbWIzZ3VYSEpjYmlBcUwxeHlYRzVjY2x4dVluVjBkRzl1TEZ4eVhHNXpaV3hsWTNRZ2V5QXZLaUF4SUNvdlhISmNiaUFnZEdWNGRDMTBjbUZ1YzJadmNtMDZJRzV2Ym1VN1hISmNibjFjY2x4dVhISmNiaThxS2x4eVhHNGdLaUJEYjNKeVpXTjBJSFJvWlNCcGJtRmlhV3hwZEhrZ2RHOGdjM1I1YkdVZ1kyeHBZMnRoWW14bElIUjVjR1Z6SUdsdUlHbFBVeUJoYm1RZ1UyRm1ZWEpwTGx4eVhHNGdLaTljY2x4dVhISmNibUoxZEhSdmJpeGNjbHh1VzNSNWNHVTlYQ0ppZFhSMGIyNWNJbDBzWEhKY2JsdDBlWEJsUFZ3aWNtVnpaWFJjSWwwc1hISmNibHQwZVhCbFBWd2ljM1ZpYldsMFhDSmRJSHRjY2x4dUlDQXRkMlZpYTJsMExXRndjR1ZoY21GdVkyVTZJR0oxZEhSdmJqdGNjbHh1ZlZ4eVhHNWNjbHh1THlvcVhISmNiaUFxSUZKbGJXOTJaU0IwYUdVZ2FXNXVaWElnWW05eVpHVnlJR0Z1WkNCd1lXUmthVzVuSUdsdUlFWnBjbVZtYjNndVhISmNiaUFxTDF4eVhHNWNjbHh1WW5WMGRHOXVPam90Ylc5NkxXWnZZM1Z6TFdsdWJtVnlMRnh5WEc1YmRIbHdaVDFjSW1KMWRIUnZibHdpWFRvNkxXMXZlaTFtYjJOMWN5MXBibTVsY2l4Y2NseHVXM1I1Y0dVOVhDSnlaWE5sZEZ3aVhUbzZMVzF2ZWkxbWIyTjFjeTFwYm01bGNpeGNjbHh1VzNSNWNHVTlYQ0p6ZFdKdGFYUmNJbDA2T2kxdGIzb3RabTlqZFhNdGFXNXVaWElnZTF4eVhHNGdJR0p2Y21SbGNpMXpkSGxzWlRvZ2JtOXVaVHRjY2x4dUlDQndZV1JrYVc1bk9pQXdPMXh5WEc1OVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ1VtVnpkRzl5WlNCMGFHVWdabTlqZFhNZ2MzUjViR1Z6SUhWdWMyVjBJR0o1SUhSb1pTQndjbVYyYVc5MWN5QnlkV3hsTGx4eVhHNGdLaTljY2x4dVhISmNibUoxZEhSdmJqb3RiVzk2TFdadlkzVnpjbWx1Wnl4Y2NseHVXM1I1Y0dVOVhDSmlkWFIwYjI1Y0lsMDZMVzF2ZWkxbWIyTjFjM0pwYm1jc1hISmNibHQwZVhCbFBWd2ljbVZ6WlhSY0lsMDZMVzF2ZWkxbWIyTjFjM0pwYm1jc1hISmNibHQwZVhCbFBWd2ljM1ZpYldsMFhDSmRPaTF0YjNvdFptOWpkWE55YVc1bklIdGNjbHh1SUNCdmRYUnNhVzVsT2lBeGNIZ2daRzkwZEdWa0lFSjFkSFJ2YmxSbGVIUTdYSEpjYm4xY2NseHVYSEpjYmk4cUtseHlYRzRnS2lCRGIzSnlaV04wSUhSb1pTQndZV1JrYVc1bklHbHVJRVpwY21WbWIzZ3VYSEpjYmlBcUwxeHlYRzVjY2x4dVptbGxiR1J6WlhRZ2UxeHlYRzRnSUhCaFpHUnBibWM2SURBdU16VmxiU0F3TGpjMVpXMGdNQzQyTWpWbGJUdGNjbHh1ZlZ4eVhHNWNjbHh1THlvcVhISmNiaUFxSURFdUlFTnZjbkpsWTNRZ2RHaGxJSFJsZUhRZ2QzSmhjSEJwYm1jZ2FXNGdSV1JuWlNCaGJtUWdTVVV1WEhKY2JpQXFJREl1SUVOdmNuSmxZM1FnZEdobElHTnZiRzl5SUdsdWFHVnlhWFJoYm1ObElHWnliMjBnWUdacFpXeGtjMlYwWUNCbGJHVnRaVzUwY3lCcGJpQkpSUzVjY2x4dUlDb2dNeTRnVW1WdGIzWmxJSFJvWlNCd1lXUmthVzVuSUhOdklHUmxkbVZzYjNCbGNuTWdZWEpsSUc1dmRDQmpZWFZuYUhRZ2IzVjBJSGRvWlc0Z2RHaGxlU0I2WlhKdklHOTFkRnh5WEc0Z0tpQWdJQ0JnWm1sbGJHUnpaWFJnSUdWc1pXMWxiblJ6SUdsdUlHRnNiQ0JpY205M2MyVnljeTVjY2x4dUlDb3ZYSEpjYmx4eVhHNXNaV2RsYm1RZ2UxeHlYRzRnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdJQzhxSURFZ0tpOWNjbHh1SUNCamIyeHZjam9nYVc1b1pYSnBkRHNnTHlvZ01pQXFMMXh5WEc0Z0lHUnBjM0JzWVhrNklIUmhZbXhsT3lBdktpQXhJQ292WEhKY2JpQWdiV0Y0TFhkcFpIUm9PaUF4TURBbE95QXZLaUF4SUNvdlhISmNiaUFnY0dGa1pHbHVaem9nTURzZ0x5b2dNeUFxTDF4eVhHNGdJSGRvYVhSbExYTndZV05sT2lCdWIzSnRZV3c3SUM4cUlERWdLaTljY2x4dWZWeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlFRmtaQ0IwYUdVZ1kyOXljbVZqZENCMlpYSjBhV05oYkNCaGJHbG5ibTFsYm5RZ2FXNGdRMmh5YjIxbExDQkdhWEpsWm05NExDQmhibVFnVDNCbGNtRXVYSEpjYmlBcUwxeHlYRzVjY2x4dWNISnZaM0psYzNNZ2UxeHlYRzRnSUhabGNuUnBZMkZzTFdGc2FXZHVPaUJpWVhObGJHbHVaVHRjY2x4dWZWeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlGSmxiVzkyWlNCMGFHVWdaR1ZtWVhWc2RDQjJaWEowYVdOaGJDQnpZM0p2Ykd4aVlYSWdhVzRnU1VVZ01UQXJMbHh5WEc0Z0tpOWNjbHh1WEhKY2JuUmxlSFJoY21WaElIdGNjbHh1SUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjY2x4dWZWeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlERXVJRUZrWkNCMGFHVWdZMjl5Y21WamRDQmliM2dnYzJsNmFXNW5JR2x1SUVsRklERXdMbHh5WEc0Z0tpQXlMaUJTWlcxdmRtVWdkR2hsSUhCaFpHUnBibWNnYVc0Z1NVVWdNVEF1WEhKY2JpQXFMMXh5WEc1Y2NseHVXM1I1Y0dVOVhDSmphR1ZqYTJKdmVGd2lYU3hjY2x4dVczUjVjR1U5WENKeVlXUnBiMXdpWFNCN1hISmNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEc2dMeW9nTVNBcUwxeHlYRzRnSUhCaFpHUnBibWM2SURBN0lDOHFJRElnS2k5Y2NseHVmVnh5WEc1Y2NseHVMeW9xWEhKY2JpQXFJRU52Y25KbFkzUWdkR2hsSUdOMWNuTnZjaUJ6ZEhsc1pTQnZaaUJwYm1OeVpXMWxiblFnWVc1a0lHUmxZM0psYldWdWRDQmlkWFIwYjI1eklHbHVJRU5vY205dFpTNWNjbHh1SUNvdlhISmNibHh5WEc1YmRIbHdaVDFjSW01MWJXSmxjbHdpWFRvNkxYZGxZbXRwZEMxcGJtNWxjaTF6Y0dsdUxXSjFkSFJ2Yml4Y2NseHVXM1I1Y0dVOVhDSnVkVzFpWlhKY0lsMDZPaTEzWldKcmFYUXRiM1YwWlhJdGMzQnBiaTFpZFhSMGIyNGdlMXh5WEc0Z0lHaGxhV2RvZERvZ1lYVjBienRjY2x4dWZWeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlERXVJRU52Y25KbFkzUWdkR2hsSUc5a1pDQmhjSEJsWVhKaGJtTmxJR2x1SUVOb2NtOXRaU0JoYm1RZ1UyRm1ZWEpwTGx4eVhHNGdLaUF5TGlCRGIzSnlaV04wSUhSb1pTQnZkWFJzYVc1bElITjBlV3hsSUdsdUlGTmhabUZ5YVM1Y2NseHVJQ292WEhKY2JseHlYRzViZEhsd1pUMWNJbk5sWVhKamFGd2lYU0I3WEhKY2JpQWdMWGRsWW10cGRDMWhjSEJsWVhKaGJtTmxPaUIwWlhoMFptbGxiR1E3SUM4cUlERWdLaTljY2x4dUlDQnZkWFJzYVc1bExXOW1abk5sZERvZ0xUSndlRHNnTHlvZ01pQXFMMXh5WEc1OVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ1VtVnRiM1psSUhSb1pTQnBibTVsY2lCd1lXUmthVzVuSUdsdUlFTm9jbTl0WlNCaGJtUWdVMkZtWVhKcElHOXVJRzFoWTA5VExseHlYRzRnS2k5Y2NseHVYSEpjYmx0MGVYQmxQVndpYzJWaGNtTm9YQ0pkT2pvdGQyVmlhMmwwTFhObFlYSmphQzFrWldOdmNtRjBhVzl1SUh0Y2NseHVJQ0F0ZDJWaWEybDBMV0Z3Y0dWaGNtRnVZMlU2SUc1dmJtVTdYSEpjYm4xY2NseHVYSEpjYmk4cUtseHlYRzRnS2lBeExpQkRiM0p5WldOMElIUm9aU0JwYm1GaWFXeHBkSGtnZEc4Z2MzUjViR1VnWTJ4cFkydGhZbXhsSUhSNWNHVnpJR2x1SUdsUFV5QmhibVFnVTJGbVlYSnBMbHh5WEc0Z0tpQXlMaUJEYUdGdVoyVWdabTl1ZENCd2NtOXdaWEowYVdWeklIUnZJR0JwYm1obGNtbDBZQ0JwYmlCVFlXWmhjbWt1WEhKY2JpQXFMMXh5WEc1Y2NseHVPam90ZDJWaWEybDBMV1pwYkdVdGRYQnNiMkZrTFdKMWRIUnZiaUI3WEhKY2JpQWdMWGRsWW10cGRDMWhjSEJsWVhKaGJtTmxPaUJpZFhSMGIyNDdJQzhxSURFZ0tpOWNjbHh1SUNCbWIyNTBPaUJwYm1obGNtbDBPeUF2S2lBeUlDb3ZYSEpjYm4xY2NseHVYSEpjYmk4cUlFbHVkR1Z5WVdOMGFYWmxYSEpjYmlBZ0lEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlJQ292WEhKY2JseHlYRzR2S2x4eVhHNGdLaUJCWkdRZ2RHaGxJR052Y25KbFkzUWdaR2x6Y0d4aGVTQnBiaUJGWkdkbExDQkpSU0F4TUNzc0lHRnVaQ0JHYVhKbFptOTRMbHh5WEc0Z0tpOWNjbHh1WEhKY2JtUmxkR0ZwYkhNZ2UxeHlYRzRnSUdScGMzQnNZWGs2SUdKc2IyTnJPMXh5WEc1OVhISmNibHh5WEc0dktseHlYRzRnS2lCQlpHUWdkR2hsSUdOdmNuSmxZM1FnWkdsemNHeGhlU0JwYmlCaGJHd2dZbkp2ZDNObGNuTXVYSEpjYmlBcUwxeHlYRzVjY2x4dWMzVnRiV0Z5ZVNCN1hISmNiaUFnWkdsemNHeGhlVG9nYkdsemRDMXBkR1Z0TzF4eVhHNTlYSEpjYmx4eVhHNHZLaUJOYVhOalhISmNiaUFnSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOUlDb3ZYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dRV1JrSUhSb1pTQmpiM0p5WldOMElHUnBjM0JzWVhrZ2FXNGdTVVVnTVRBckxseHlYRzRnS2k5Y2NseHVYSEpjYm5SbGJYQnNZWFJsSUh0Y2NseHVJQ0JrYVhOd2JHRjVPaUJ1YjI1bE8xeHlYRzU5WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nUVdSa0lIUm9aU0JqYjNKeVpXTjBJR1JwYzNCc1lYa2dhVzRnU1VVZ01UQXVYSEpjYmlBcUwxeHlYRzVjY2x4dVcyaHBaR1JsYmwwZ2UxeHlYRzRnSUdScGMzQnNZWGs2SUc1dmJtVTdYSEpjYm4xY2NseHVJaXdpUUdsdGNHOXlkQ0FuWTI5c2IzSnpKenRjY2x4dVhISmNiaThxSUQwOVBUMDlJRUpoYzJVZ1BUMDlQVDBnS2k5Y2NseHVhSFJ0YkN4Y2NseHVZbTlrZVNCN1hISmNiaUFnYUdWcFoyaDBPaUF4TURBbE8xeHlYRzRnSUdKaFkydG5jbTkxYm1RNklFQmlaMTlqYjJ4dmNqdGNjbHh1SUNCamIyeHZjam9nUUhCeWFXMWhjbmxmZEdWNGRGOWpiMnh2Y2p0Y2NseHVJQ0JtYjI1MExYTnBlbVU2SURFMGNIZzdYSEpjYmlBZ2JHbHVaUzFvWldsbmFIUTZJREUxTUNVN1hISmNiaUFnWm05dWRDMW1ZVzFwYkhrNklGd2lUV2xqY205emIyWjBJRmxoU0dWcElGVkpYQ0lzSUVGeWFXRnNMQ0J6WVc1ekxYTmxjbWxtTzF4eVhHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYm4xY2NseHVYSEpjYm1FZ2UxeHlYRzRnSUNZNmJHbHVheXhjY2x4dUlDQW1PblpwYzJsMFpXUXNYSEpjYmlBZ0pqcG9iM1psY2lCN1hISmNiaUFnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtT21odmRtVnlJSHRjY2x4dUlDQWdJSFJsZUhRdFpHVmpiM0poZEdsdmJqb2dkVzVrWlhKc2FXNWxPMXh5WEc0Z0lIMWNjbHh1ZlZ4eVhHNWNjbHh1WTI5a1pTQjdYSEpjYmlBZ1ptOXVkQzFtWVcxcGJIazZJRndpVTI5MWNtTmxJRU52WkdVZ1VISnZYQ0lzSUVOdmJuTnZiR0Z6TENCSFpXOXlaMmxoTENCTmIyNWhZMjhzSUcxdmJtOXpjR0ZqWlN3Z1FYSnBZV3dzSUhOaGJuTXRjMlZ5YVdZN1hISmNibjFjY2x4dUlpd2lMeW9nUFQwOVBUMGdVMk55YjJ4c1ltRnlJRDA5UFQwOUlDb3ZYSEpjYmpvNkxYZGxZbXRwZEMxelkzSnZiR3hpWVhJZ2UxeHlYRzRnSUhkcFpIUm9PaUEzY0hnN1hISmNiaUFnYUdWcFoyaDBPaUEzY0hnN1hISmNiaUFnTFhkbFltdHBkQzFpYjNKa1pYSXRjbUZrYVhWek9pQTFjSGc3WEhKY2JuMWNjbHh1WEhKY2JqbzZMWGRsWW10cGRDMXpZM0p2Ykd4aVlYSXRkSEpoWTJzdGNHbGxZMlVnZTF4eVhHNGdJQzEzWldKcmFYUXRZbTl5WkdWeUxYSmhaR2wxY3pvZ05YQjRPMXh5WEc1OVhISmNibHh5WEc0Nk9pMTNaV0pyYVhRdGMyTnliMnhzWW1GeUxYUm9kVzFpT25abGNuUnBZMkZzSUh0Y2NseHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUJ5WjJKaEtEQXNJREFzSURBc0lEQXVNalVwTzF4eVhHNGdJQzEzWldKcmFYUXRZbTl5WkdWeUxYSmhaR2wxY3pvZ05YQjRPMXh5WEc1OVhISmNibHh5WEc0Nk9pMTNaV0pyYVhRdGMyTnliMnhzWW1GeUxYUm9kVzFpT21odmNtbDZiMjUwWVd3Z2UxeHlYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUhKblltRW9NQ3dnTUN3Z01Dd2dNQzR5TlNrN1hISmNiaUFnTFhkbFltdHBkQzFpYjNKa1pYSXRjbUZrYVhWek9pQTFjSGc3WEhKY2JuMWNjbHh1WEhKY2JqbzZMWGRsWW10cGRDMXpZM0p2Ykd4aVlYSTZhRzkyWlhJZ2UxeHlYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUhKblltRW9NQ3dnTUN3Z01Dd2dNQzR4TlNrN1hISmNibjFjY2x4dVhISmNiam82TFhkbFltdHBkQzF6WTNKdmJHeGlZWEl0ZEdoMWJXSTZhRzkyWlhJZ2UxeHlYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUhKblltRW9NQ3dnTUN3Z01Dd2dNQzR6TlNrN1hISmNibjFjY2x4dUlpd2lRR2x0Y0c5eWRDQW5ZMjlzYjNKekp6dGNjbHh1WEhKY2JpOHFJRXhoZVc5MWRDQXFMMXh5WEc0dVpHOWpjeUI3WEhKY2JpQWdaR2x6Y0d4aGVUb2dabXhsZUR0Y2NseHVJQ0JtYkdWNExXUnBjbVZqZEdsdmJqb2djbTkzTzF4eVhHNGdJR1pzWlhndGQzSmhjRG9nYm05M2NtRndPMXh5WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNjbHh1SUNCNkxXbHVaR1Y0T2lBeE8xeHlYRzRnSUdobGFXZG9kRG9nTVRBd0pUdGNjbHh1SUNCM2FXUjBhRG9nTVRBd0pUdGNjbHh1SUNCdFlYSm5hVzQ2SURBN1hISmNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dWZWeHlYRzVjY2x4dUx5b2dRWE5wWkdVZ0tpOWNjbHh1TG1GemFXUmxJSHRjY2x4dUlDQmthWE53YkdGNU9pQm1iR1Y0TzF4eVhHNGdJR1pzWlhndGMyaHlhVzVyT2lBd08xeHlYRzRnSUdac1pYZ3RaR2x5WldOMGFXOXVPaUJqYjJ4MWJXNDdYSEpjYmlBZ1pteGxlQzEzY21Gd09pQnViM2R5WVhBN1hISmNiaUFnZDJsa2RHZzZJREkyTUhCNE8xeHlYRzRnSUcxaGNtZHBiam9nTUR0Y2NseHVJQ0JvWldsbmFIUTZJREV3TUNVN1hISmNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUhCeWFXMWhjbmxmZEdWNGRGOWpiMnh2Y2p0Y2NseHVJQ0JqYjJ4dmNqb2dRR0p2Y21SbGNsOWpiMnh2Y2p0Y2NseHVJQ0JpYjNndGMyaGhaRzkzT2lBd0lEQWdOWEI0SURKd2VDQkFZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNGdJRzkyWlhKbWJHOTNPaUJoZFhSdk8xeHlYRzU5WEhKY2JseHlYRzR2S2lCTllXbHVJQ292WEhKY2JpNXRZV2x1SUh0Y2NseHVJQ0JtYkdWNE9pQXhPMXh5WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNjbHh1SUNCNkxXbHVaR1Y0T2lBeE8xeHlYRzRnSUdobGFXZG9kRG9nTVRBd0pUdGNjbHh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCQWQyaHBkR1U3WEhKY2JpQWdiM1psY21ac2IzYzZJR0YxZEc4N1hISmNibjFjY2x4dUlpd2lRR2x0Y0c5eWRDQW5ZMjlzYjNKekp6dGNjbHh1WEhKY2JpNWhjMmxrWlNCN1hISmNiaUFnWm05dWRDMW1ZVzFwYkhrNklGd2lVMjkxY21ObElFTnZaR1VnVUhKdlhDSXNJRU52Ym5OdmJHRnpMQ0JIWlc5eVoybGhMQ0JOYjI1aFkyOHNJRzF2Ym05emNHRmpaU3dnUVhKcFlXd3NJSE5oYm5NdGMyVnlhV1k3WEhKY2JseHlYRzRnSUNaZlgyaGxZV1JsY2lCN1hISmNiaUFnSUNCdFlYSm5hVzQ2SURBZ1lYVjBienRjY2x4dUlDQWdJR1pzWlhndGMyaHlhVzVyT2lBd08xeHlYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyNWhkaUI3WEhKY2JpQWdJQ0JtYkdWNE9pQXhPMXh5WEc0Z0lDQWdiM1psY21ac2IzYzZJR0YxZEc4N1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOW9NaUI3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNjbHh1SUNBZ0lHaGxhV2RvZERvZ05UUndlRHRjY2x4dUlDQWdJR3hwYm1VdGFHVnBaMmgwT2lBMU5IQjRPMXh5WEc0Z0lDQWdabTl1ZEMxemFYcGxPaUF5TUhCNE8xeHlYRzRnSUNBZ1ptOXVkQzEzWldsbmFIUTZJRzV2Y20xaGJEdGNjbHh1SUNBZ0lHWnZiblF0Wm1GdGFXeDVPaUJIWlc5eVoybGhMQ0JEYjI1emIyeGhjeXdnUVhKcFlXd3NJSE5oYm5NdGMyVnlhV1k3WEhKY2JpQWdJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WEhKY2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmYURNZ2UxeHlYRzRnSUNBZ2JXRnlaMmx1T2lBd0lHRjFkRzg3WEhKY2JpQWdJQ0J3WVdSa2FXNW5PaUF3SURJd2NIZzdYSEpjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREUyY0hnN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZmJHbHpkQ0I3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREE3WEhKY2JpQWdJQ0J3WVdSa2FXNW5PaUF4TUhCNElEQTdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZhWFJsYlNCN1hISmNiaUFnSUNCb1pXbG5hSFE2SURNeWNIZzdYSEpjYmlBZ0lDQnNhVzVsTFdobGFXZG9kRG9nTXpKd2VEdGNjbHh1SUNBZ0lIQmhaR1JwYm1jNklEQWdNekJ3ZUR0Y2NseHVJQ0FnSUdOMWNuTnZjam9nY0c5cGJuUmxjanRjY2x4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVROd2VEdGNjbHh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNibHh5WEc0Z0lDQWdKaTVoWTNScGRtVXNYSEpjYmlBZ0lDQW1PbWh2ZG1WeUlIdGNjbHh1SUNBZ0lDQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dRSE5sWTI5dVpHRnllVjkwWlhoMFgyTnZiRzl5TzF4eVhHNGdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDWXVZV04wYVhabElIdGNjbHh1SUNBZ0lDQWdZbTl5WkdWeUxXeGxablE2SUROd2VDQnpiMnhwWkNCQWQyaHBkR1U3WEhKY2JpQWdJQ0I5WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5aGJtTm9iM0k2YkdsdWF5QjdYSEpjYmlBZ0lDQmpiMnh2Y2pvZ1FHSnZjbVJsY2w5amIyeHZjanRjY2x4dUlDQWdJSFJsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlR0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrSUh0Y2NseHVJQ0FnSUdOdmJHOXlPaUJBWW05eVpHVnlYMk52Ykc5eU8xeHlYRzRnSUNBZ2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPMXh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmWVc1amFHOXlPbWh2ZG1WeUlIdGNjbHh1SUNBZ0lHTnZiRzl5T2lCQVltOXlaR1Z5WDJOdmJHOXlPMXh5WEc0Z0lDQWdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQjFibVJsY214cGJtVTdYSEpjYmlBZ2ZWeHlYRzU5WEhKY2JpSXNJa0JwYlhCdmNuUWdKMk52Ykc5eWN5YzdYSEpjYmx4eVhHNHViV0ZwYmlCN1hISmNiaUFnSmw5ZmFHVmhaR1Z5TEZ4eVhHNGdJQ1pmWDJadmIzUmxjaUI3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNjbHh1SUNBZ0lIQmhaR1JwYm1jNklERmxiVHRjY2x4dUlDQWdJSFJsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTlvTVNCN1hISmNiaUFnSUNCdFlYSm5hVzQ2SURBZ1lYVjBienRjY2x4dUlDQWdJSEJoWkdScGJtY3RkRzl3T2lBeFpXMDdYSEpjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJRFZsYlR0Y2NseHVJQ0FnSUdadmJuUXRkMlZwWjJoME9pQnViM0p0WVd3N1hISmNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dNaTR3WlcwN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZmJtRnRaU0I3WEhKY2JpQWdJQ0JqYjJ4dmNqb2dRSEJ5YVcxaGNubGZZMjlzYjNJN1hISmNiaUFnSUNCbWIyNTBMWGRsYVdkb2REb2dibTl5YldGc08xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZkR0ZuYkdsdVpTQjdYSEpjYmlBZ0lDQnRZWEpuYVc0NklERmxiU0JoZFhSdk8xeHlYRzRnSUNBZ2JXRjRMWGRwWkhSb09pQTJOakJ3ZUR0Y2NseHVJQ0FnSUd4cGJtVXRhR1ZwWjJoME9pQXhMak5sYlR0Y2NseHVJQ0FnSUdadmJuUXRjMmw2WlRvZ01tVnRPMXh5WEc0Z0lDQWdZMjlzYjNJNklFQm1iM1Z5ZEdoZmRHVjRkRjlqYjJ4dmNqdGNjbHh1SUNBZ0lHWnZiblF0ZDJWcFoyaDBPaUF4TURBN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZlkyUnVJSHRjY2x4dUlDQWdJRzFoY21kcGJqb2dNbVZ0SURBN1hISmNiaUFnSUNCd1lXUmthVzVuT2lBeVpXMDdYSEpjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREUyY0hnN1hISmNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0Y2NseHVJQ0FnSUhSbGVIUXRZV3hwWjI0NklHTmxiblJsY2p0Y2NseHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCaVoxOWpiMnh2Y2p0Y2NseHVJQ0FnSUdKdmNtUmxjaTEwYjNBNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNGdJQ0FnWW05eVpHVnlMV0p2ZEhSdmJUb2dNWEI0SUhOdmJHbGtJRUJpYjNKa1pYSmZZMjlzYjNJN1hISmNiaUFnSUNCamIyeHZjam9nUUhSb2FYSmtYM1JsZUhSZlkyOXNiM0k3WEhKY2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmWkc5M2JteHZZV1I3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREZsYlNCaGRYUnZPMXh5WEc0Z0lDQWdkMmxrZEdnNklESXdNSEI0TzF4eVhHNGdJQ0FnZEdWNGRDMWhiR2xuYmpvZ1kyVnVkR1Z5TzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDJKMWRIUnZiaUI3WEhKY2JpQWdJQ0JrYVhOd2JHRjVPaUJwYm14cGJtVXRZbXh2WTJzN1hISmNiaUFnSUNCaWIzSmtaWEl0Y21Ga2FYVnpPaUEwY0hnN1hISmNiaUFnSUNCd1lXUmthVzVuT2lBeE5IQjRJREk1Y0hnN1hISmNiaUFnSUNCbWIyNTBMWE5wZW1VNklERTRjSGc3WEhKY2JpQWdJQ0JtYjI1MExXWmhiV2xzZVRvZ1hDSlRiM1Z5WTJVZ1EyOWtaU0JRY205Y0lpd2dRMjl1YzI5c1lYTXNJRWRsYjNKbmFXRXNJRTF2Ym1GamJ5d2diVzl1YjNOd1lXTmxMQ0JCY21saGJDd2djMkZ1Y3kxelpYSnBaanRjY2x4dUlDQWdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJRUJ6ZFdOalpYTnpYMk52Ykc5eU8xeHlYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2NseHVYSEpjYmlBZ0lDQW1PbXhwYm1zc1hISmNiaUFnSUNBbU9uWnBjMmwwWldRc1hISmNiaUFnSUNBbU9taHZkbVZ5SUh0Y2NseHVJQ0FnSUNBZ1kyOXNiM0k2SUVCM2FHbDBaVHRjY2x4dUlDQWdJQ0FnZEdWNGRDMWtaV052Y21GMGFXOXVPaUJ1YjI1bE8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZabTl2ZEdWeUlIdGNjbHh1SUNBZ0lHMWhjbWRwYmpvZ01DQXpaVzA3WEhKY2JpQWdJQ0JpYjNKa1pYSXRkRzl3T2lBeGNIZ2djMjlzYVdRZ1FHSnZjbVJsY2w5amIyeHZjanRjY2x4dUlDQjlYSEpjYm4xY2NseHVJaXdpUUdsdGNHOXlkQ0FuWTI5c2IzSnpKenRjY2x4dVhISmNiaTV6WldOMGFXOXVJSHRjY2x4dUlDQnRZWEpuYVc0NklERmxiU0F3TzF4eVhHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmx4eVhHNGdJQ1pmWDJobFlXUmxjaXhjY2x4dUlDQW1YMTlqYjI1MFpXNTBMRnh5WEc0Z0lDWmZYMlp2YjNSbGNpQjdYSEpjYmlBZ0lDQnRZWEpuYVc0NklEQWdNMlZ0TzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDNScGRHeGxJSHRjY2x4dUlDQWdJR052Ykc5eU9pQkFkR2hwY21SZmRHVjRkRjlqYjJ4dmNqdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMmd6SUh0Y2NseHVJQ0FnSUdOdmJHOXlPaUJBY0hKcGJXRnllVjlqYjJ4dmNqdGNjbHh1SUNBZ0lHWnZiblF0YzJsNlpUb2dNUzR6TldWdE8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZhRFFnZTF4eVhHNGdJQ0FnWm05dWRDMXphWHBsT2lBeExqRmxiVHRjY2x4dUlDQWdJR052Ykc5eU9pQkFkR2hwY21SZmRHVjRkRjlqYjJ4dmNqdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMmcxSUh0Y2NseHVJQ0FnSUdadmJuUXRjMmw2WlRvZ01XVnRPMXh5WEc0Z0lDQWdZMjlzYjNJNklFQm1iM1Z5ZEdoZmRHVjRkRjlqYjJ4dmNqdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMlJzTEZ4eVhHNGdJQ1pmWDJSMExGeHlYRzRnSUNaZlgyUmtJSHRjY2x4dUlDQWdJRzFoY21kcGJqb2dNRHRjY2x4dUlDQWdJSEJoWkdScGJtYzZJREE3WEhKY2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmWkd3Z2UxeHlYRzRnSUNBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHlYRzRnSUNBZ2VpMXBibVJsZURvZ01UdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMlIwSUh0Y2NseHVJQ0FnSUdScGMzQnNZWGs2YVc1c2FXNWxMV0pzYjJOck8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZaR1FnZTF4eVhHNGdJQ0FnWkdsemNHeGhlVHBwYm14cGJtVXRZbXh2WTJzN1hISmNiaUFnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTl3Y21VZ2UxeHlYRzRnSUNBZ2JXRnlaMmx1T2lBeVpXMGdNRHRjY2x4dUlDQWdJSEJoWkdScGJtYzZJREZsYlR0Y2NseHVJQ0FnSUdadmJuUXRjMmw2WlRvZ01UUndlRHRjY2x4dUlDQWdJR3hwYm1VdGFHVnBaMmgwT2lBeE5UQWxPMXh5WEc0Z0lDQWdkR1Y0ZEMxaGJHbG5iam9nYkdWbWREdGNjbHh1SUNBZ0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklFQmlaMTlqYjJ4dmNqdGNjbHh1SUNBZ0lHSnZjbVJsY2pvZ01YQjRJSE52Ykdsa0lFQmliM0prWlhKZlkyOXNiM0k3WEhKY2JpQWdJQ0JpYjNKa1pYSXRjbUZrYVhWek9pQTBjSGc3WEhKY2JpQWdJQ0JqYjJ4dmNqb2dRSFJvYVhKa1gzUmxlSFJmWTI5c2IzSTdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyTnZaR1VnZTF4eVhHNGdJQ0FnWkdsemNHeGhlVG9nWW14dlkyczdYSEpjYmlBZ0lDQnRZWEpuYVc0NklEQWdZWFYwYnp0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5bWIyOTBaWElnZTF4eVhHNGdJQ0FnWW05eVpHVnlMWFJ2Y0RvZ01YQjRJSE52Ykdsa0lFQmliM0prWlhKZlkyOXNiM0k3WEhKY2JpQWdJQ0J0WVhKbmFXNHRkRzl3T2lBelpXMDdYSEpjYmlBZ0lDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQkFZbWRmWTI5c2IzSTdYSEpjYmlBZ0lDQmpiMnh2Y2pvZ1FHWnZkWEowYUY5MFpYaDBYMk52Ykc5eU8xeHlYRzRnSUgxY2NseHVmVnh5WEc0aUxDSkFhVzF3YjNKMElDY3VMMk52Ykc5eWN5YzdYSEpjYmx4eVhHNHVZMkZ6WlNCN1hISmNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4eVhHNGdJSG90YVc1a1pYZzZJREU3WEhKY2JpQWdaR2x6Y0d4aGVUb2daM0pwWkR0Y2NseHVJQ0JuY21sa0xYUmxiWEJzWVhSbExXTnZiSFZ0Ym5NNklISmxjR1ZoZENneUxDQXhabklwTzF4eVhHNGdJR2RoY0RvZ05EQndlRHRjY2x4dUlDQndZV1JrYVc1bk9pQXhaVzA3WEhKY2JpQWdZbTl5WkdWeUxYUnZjRG94Y0hnZ2MyOXNhV1FnUUdKdmNtUmxjbDlqYjJ4dmNqdGNjbHh1SUNCaWIzSmtaWEl0WW05MGRHOXRPakZ3ZUNCemIyeHBaQ0JBWW05eVpHVnlYMk52Ykc5eU8xeHlYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JseHlYRzRnSUNZNllXWjBaWElnZTF4eVhHNGdJQ0FnWTI5dWRHVnVkRG9nSnljN1hISmNiaUFnSUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hISmNiaUFnSUNCNkxXbHVaR1Y0T2lBeU8xeHlYRzRnSUNBZ2RHOXdPaUF3TzF4eVhHNGdJQ0FnYkdWbWREb2dOVEFsTzF4eVhHNGdJQ0FnYUdWcFoyaDBPaUF4TURBbE8xeHlYRzRnSUNBZ2QybGtkR2c2SURBN1hISmNiaUFnSUNCaWIzSmtaWEl0YkdWbWREb2dNWEI0SUhOdmJHbGtJRUJpYjNKa1pYSmZZMjlzYjNJN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZmNISmxMRnh5WEc0Z0lDWmZYM1JsZUhSaGNtVmhJSHRjY2x4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVROd2VEdGNjbHh1SUNBZ0lHeHBibVV0YUdWcFoyaDBPaUF4TlRBbE8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZjSEpsTEZ4eVhHNGdJQ1pmWDJOdlpHVXNYSEpjYmlBZ0psOWZkR1Y0ZEdGeVpXRWdlMXh5WEc0Z0lDQWdabTl1ZEMxbVlXMXBiSGs2SUZ3aVEyOTFjbWxsY2lCT1pYZGNJaXdnUTI5dWMyOXNZWE1zSUVkbGIzSm5hV0VzSUVGeWFXRnNMQ0J6WVc1ekxYTmxjbWxtTzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZmNISmxJSHRjY2x4dUlDQWdJRzFoY21kcGJqb2dNRHRjY2x4dUlDQWdJSEJoWkdScGJtYzZJREZsYlR0Y2NseHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCaVoxOWpiMnh2Y2p0Y2NseHVJQ0FnSUdobGFXZG9kRG9nTVRBd0pUdGNjbHh1SUNBZ0lHSnZjbVJsY2kxeVlXUnBkWE02SURSd2VEdGNjbHh1SUNBZ0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEhKY2JpQWdJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYM1J2YjJ4aVlYSWdlMXh5WEc0Z0lDQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hISmNiaUFnSUNCb1pXbG5hSFE2SURNMmNIZzdYSEpjYmlBZ0lDQnNhVzVsTFdobGFXZG9kRG9nTXpad2VEdGNjbHh1SUNBZ0lHWnZiblF0YzJsNlpUb2dNVFJ3ZUR0Y2NseHVJQ0FnSUhCaFpHUnBibWM2SURBZ01UWndlRHRjY2x4dUlDQWdJSFJsZUhRdFlXeHBaMjQ2SUhKcFoyaDBPMXh5WEc0Z0lDQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMkZqZEdsdmJpeGNjbHh1SUNBbVgxOXlaVzF2ZG1VZ2UxeHlYRzRnSUNBZ1kzVnljMjl5T2lCd2IybHVkR1Z5TzF4eVhHNGdJQ0FnWTI5c2IzSTZJRUJ6ZFdOalpYTnpYMk52Ykc5eU8xeHlYRzRnSUNBZ2RYTmxjaTF6Wld4bFkzUTZJRzV2Ym1VN1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOWhZM1JwYjI0Z2UxeHlYRzRnSUNBZ1ptOXVkQzF6YVhwbE9pQXhNM0I0TzF4eVhHNGdJQ0FnY0dGa1pHbHVaeTFzWldaME9pQXhNSEI0TzF4eVhHNWNjbHh1SUNBZ0lDWTZabWx5YzNRdFkyaHBiR1FnZTF4eVhHNGdJQ0FnSUNCd1lXUmthVzVuTFd4bFpuUTZJREE3WEhKY2JpQWdJQ0I5WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5eVpXMXZkbVVnZTF4eVhHNGdJQ0FnWm14dllYUTZJSEpwWjJoME8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZZMjl1YzI5c1pTQjdYSEpjYmlBZ0lDQnRZWEpuYVc0NklEQWdZWFYwYnp0Y2NseHVJQ0FnSUdobGFXZG9kRG9nTVRnd2NIZzdYSEpjYmlBZ0lDQmliM0prWlhJNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDNSbGVIUmhjbVZoSUh0Y2NseHVJQ0FnSUcxaGNtZHBiam9nTUNCaGRYUnZPMXh5WEc0Z0lDQWdkMmxrZEdnNklERXdNQ1U3WEhKY2JpQWdJQ0JvWldsbmFIUTZJREV3TUNVN1hISmNiaUFnSUNCaWIzSmtaWEk2SUc1dmJtVTdYSEpjYmlBZ0lDQnZkWFJzYVc1bE9pQnViMjVsTzF4eVhHNGdJQ0FnY0dGa1pHbHVaem9nTVdWdE8xeHlYRzRnSUNBZ1ltOTRMWE5wZW1sdVp6b2dZbTl5WkdWeUxXSnZlRHRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJoZFhSdk8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZiR2x6ZEN4Y2NseHVJQ0FtWDE5cGRHVnRJSHRjY2x4dUlDQWdJRzFoY21kcGJqb2dNRHRjY2x4dUlDQWdJSEJoWkdScGJtYzZJREE3WEhKY2JpQWdJQ0JzYVhOMExYTjBlV3hsTFhSNWNHVTZJRzV2Ym1VN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZmJHbHpkQ0I3WEhKY2JpQWdJQ0JvWldsbmFIUTZJRE0yTUhCNE8xeHlYRzRnSUNBZ1ltOXlaR1Z5TFhSdmNEb2dNWEI0SUhOdmJHbGtJRUJpYjNKa1pYSmZZMjlzYjNJN1hISmNiaUFnSUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnUUdKdmNtUmxjbDlqYjJ4dmNqdGNjbHh1SUNBZ0lHWnZiblF0YzJsNlpUb2dNVE53ZUR0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmYVhSbGJTQjdYSEpjYmlBZ0lDQm9aV2xuYUhRNklETTJjSGc3WEhKY2JpQWdJQ0JzYVc1bExXaGxhV2RvZERvZ016WndlRHRjY2x4dUlDQWdJR04xY25OdmNqb2djRzlwYm5SbGNqdGNjbHh1SUNBZ0lIQmhaR1JwYm1jNklEQWdNVFp3ZUR0Y2NseHVYSEpjYmlBZ0lDQW1PbWh2ZG1WeUlIdGNjbHh1SUNBZ0lDQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dRR2h2ZG1WeVgySm5YMk52Ykc5eU8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVmVnh5WEc0aUxDSkFhVzF3YjNKMElDY3VMMk52Ykc5eWN5YzdYSEpjYmx4eVhHNHVZblYwZEc5dWN5QjdYSEpjYmlBZ2NHOXphWFJwYjI0NklHWnBlR1ZrTzF4eVhHNGdJSG90YVc1a1pYZzZJREk3WEhKY2JpQWdkRzl3T2lBMU1DVTdYSEpjYmlBZ2NtbG5hSFE2SURFeWNIZzdYSEpjYmlBZ2JXRnlaMmx1T2lBd08xeHlYRzRnSUhkcFpIUm9PaUExTm5CNE8xeHlYRzRnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2NseHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh5WEc1Y2NseHVJQ0FtWDE5cGRHVnRJSHRjY2x4dUlDQWdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjY2x4dUlDQWdJSG90YVc1a1pYZzZJREU3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREV3Y0hnN1hISmNiaUFnSUNCM2FXUjBhRG9nTXpad2VEdGNjbHh1SUNBZ0lHaGxhV2RvZERvZ016WndlRHRjY2x4dUlDQWdJR0p2Y21SbGNqb2dNWEI0SUhOdmJHbGtJRUJpYjNKa1pYSmZZMjlzYjNJN1hISmNiaUFnSUNCaWIzSmtaWEl0Y21Ga2FYVnpPaUEwY0hnN1hISmNiaUFnSUNCaWIzZ3RjMmhoWkc5M09pQXdJREFnTm5CNElFQmliM0prWlhKZlkyOXNiM0k3WEhKY2JpQWdJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHlYRzRnSUNBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FIZG9hWFJsTzF4eVhHNGdJQ0FnWTNWeWMyOXlPaUJ3YjJsdWRHVnlPMXh5WEc0Z0lDQWdkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPMXh5WEc0Z0lDQWdZMjlzYjNJNklFQm1iM1Z5ZEdoZmRHVjRkRjlqYjJ4dmNqdGNjbHh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNibHh5WEc0Z0lDQWdKanBvYjNabGNpQjdYSEpjYmlBZ0lDQWdJR052Ykc5eU9pQkFjM1ZqWTJWemMxOWpiMnh2Y2p0Y2NseHVJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQW1MbWhwWkdVZ2UxeHlYRzRnSUNBZ0lDQmthWE53YkdGNU9pQnViMjVsTzF4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZllXNWphRzl5SUh0Y2NseHVJQ0FnSUNZNmJHbHVheXhjY2x4dUlDQWdJQ1k2ZG1semFYUmxaQ3hjY2x4dUlDQWdJQ1k2YUc5MlpYSWdlMXh5WEc0Z0lDQWdJQ0JqYjJ4dmNqb2dRR1p2ZFhKMGFGOTBaWGgwWDJOdmJHOXlPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNZNmFHOTJaWElnZTF4eVhHNGdJQ0FnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTlwWTI5dUlIdGNjbHh1SUNBZ0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNjbHh1SUNBZ0lIb3RhVzVrWlhnNklESTdYSEpjYmlBZ0lDQjBiM0E2SURVd0pUdGNjbHh1SUNBZ0lHeGxablE2SURVd0pUdGNjbHh1SUNBZ0lIZHBaSFJvT2lBeU1IQjRPMXh5WEc0Z0lDQWdhR1ZwWjJoME9pQXlNSEI0TzF4eVhHNGdJQ0FnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdVb0xUVXdKU3dnTFRVd0pTazdYSEpjYmlBZ0lDQm1hV3hzT2lCamRYSnlaVzUwWTI5c2IzSTdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzRnSUgxY2NseHVmVnh5WEc0aVhYMD0gKi9cbiJdLCJmaWxlIjoiY3NzL2RvY3MubWluLmNzcyJ9 */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJjc3MvZG9jcy5jc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLyohIG5vcm1hbGl6ZS5jc3MgdjguMC4xIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqL1xuLyogRG9jdW1lbnRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGxpbmUgaGVpZ2h0IGluIGFsbCBicm93c2Vycy5cbiAqIDIuIFByZXZlbnQgYWRqdXN0bWVudHMgb2YgZm9udCBzaXplIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZXMgaW4gaU9TLlxuICovXG5odG1sIHtcbiAgbGluZS1oZWlnaHQ6IDEuMTU7XG4gIC8qIDEgKi9cbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAvKiAyICovXG59XG4vKiBTZWN0aW9uc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogUmVtb3ZlIHRoZSBtYXJnaW4gaW4gYWxsIGJyb3dzZXJzLlxuICovXG5ib2R5IHtcbiAgbWFyZ2luOiAwO1xufVxuLyoqXG4gKiBSZW5kZXIgdGhlIGBtYWluYCBlbGVtZW50IGNvbnNpc3RlbnRseSBpbiBJRS5cbiAqL1xubWFpbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLyoqXG4gKiBDb3JyZWN0IHRoZSBmb250IHNpemUgYW5kIG1hcmdpbiBvbiBgaDFgIGVsZW1lbnRzIHdpdGhpbiBgc2VjdGlvbmAgYW5kXG4gKiBgYXJ0aWNsZWAgY29udGV4dHMgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgU2FmYXJpLlxuICovXG5oMSB7XG4gIGZvbnQtc2l6ZTogMmVtO1xuICBtYXJnaW46IDAuNjdlbSAwO1xufVxuLyogR3JvdXBpbmcgY29udGVudFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gRmlyZWZveC5cbiAqIDIuIFNob3cgdGhlIG92ZXJmbG93IGluIEVkZ2UgYW5kIElFLlxuICovXG5ociB7XG4gIC13ZWJraXQtYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gIC8qIDEgKi9cbiAgaGVpZ2h0OiAwO1xuICAvKiAxICovXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xuICAvKiAyICovXG59XG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIGluaGVyaXRhbmNlIGFuZCBzY2FsaW5nIG9mIGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBDb3JyZWN0IHRoZSBvZGQgYGVtYCBmb250IHNpemluZyBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnByZSB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcbiAgLyogMSAqL1xuICBmb250LXNpemU6IDFlbTtcbiAgLyogMiAqL1xufVxuLyogVGV4dC1sZXZlbCBzZW1hbnRpY3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKipcbiAqIFJlbW92ZSB0aGUgZ3JheSBiYWNrZ3JvdW5kIG9uIGFjdGl2ZSBsaW5rcyBpbiBJRSAxMC5cbiAqL1xuYSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuLyoqXG4gKiAxLiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgaW4gQ2hyb21lIDU3LVxuICogMi4gQWRkIHRoZSBjb3JyZWN0IHRleHQgZGVjb3JhdGlvbiBpbiBDaHJvbWUsIEVkZ2UsIElFLCBPcGVyYSwgYW5kIFNhZmFyaS5cbiAqL1xuYWJiclt0aXRsZV0ge1xuICBib3JkZXItYm90dG9tOiBub25lO1xuICAvKiAxICovXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAvKiAyICovXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xuICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRvdHRlZDtcbiAgLyogMiAqL1xufVxuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZm9udCB3ZWlnaHQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpLlxuICovXG5iLFxuc3Ryb25nIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5oZXJpdGFuY2UgYW5kIHNjYWxpbmcgb2YgZm9udCBzaXplIGluIGFsbCBicm93c2Vycy5cbiAqIDIuIENvcnJlY3QgdGhlIG9kZCBgZW1gIGZvbnQgc2l6aW5nIGluIGFsbCBicm93c2Vycy5cbiAqL1xuY29kZSxcbmtiZCxcbnNhbXAge1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBtb25vc3BhY2U7XG4gIC8qIDEgKi9cbiAgZm9udC1zaXplOiAxZW07XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGZvbnQgc2l6ZSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnNtYWxsIHtcbiAgZm9udC1zaXplOiA4MCU7XG59XG4vKipcbiAqIFByZXZlbnQgYHN1YmAgYW5kIGBzdXBgIGVsZW1lbnRzIGZyb20gYWZmZWN0aW5nIHRoZSBsaW5lIGhlaWdodCBpblxuICogYWxsIGJyb3dzZXJzLlxuICovXG5zdWIsXG5zdXAge1xuICBmb250LXNpemU6IDc1JTtcbiAgbGluZS1oZWlnaHQ6IDA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuc3ViIHtcbiAgYm90dG9tOiAtMC4yNWVtO1xufVxuc3VwIHtcbiAgdG9wOiAtMC41ZW07XG59XG4vKiBFbWJlZGRlZCBjb250ZW50XG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBSZW1vdmUgdGhlIGJvcmRlciBvbiBpbWFnZXMgaW5zaWRlIGxpbmtzIGluIElFIDEwLlxuICovXG5pbWcge1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG4vKiBGb3Jtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qKlxuICogMS4gQ2hhbmdlIHRoZSBmb250IHN0eWxlcyBpbiBhbGwgYnJvd3NlcnMuXG4gKiAyLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmkuXG4gKi9cbmJ1dHRvbixcbmlucHV0LFxub3B0Z3JvdXAsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICAvKiAxICovXG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgLyogMSAqL1xuICBsaW5lLWhlaWdodDogMS4xNTtcbiAgLyogMSAqL1xuICBtYXJnaW46IDA7XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogU2hvdyB0aGUgb3ZlcmZsb3cgaW4gSUUuXG4gKiAxLiBTaG93IHRoZSBvdmVyZmxvdyBpbiBFZGdlLlxuICovXG5idXR0b24sXG5pbnB1dCB7XG4gIC8qIDEgKi9cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4vKipcbiAqIFJlbW92ZSB0aGUgaW5oZXJpdGFuY2Ugb2YgdGV4dCB0cmFuc2Zvcm0gaW4gRWRnZSwgRmlyZWZveCwgYW5kIElFLlxuICogMS4gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB0ZXh0IHRyYW5zZm9ybSBpbiBGaXJlZm94LlxuICovXG5idXR0b24sXG5zZWxlY3Qge1xuICAvKiAxICovXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLyoqXG4gKiBDb3JyZWN0IHRoZSBpbmFiaWxpdHkgdG8gc3R5bGUgY2xpY2thYmxlIHR5cGVzIGluIGlPUyBhbmQgU2FmYXJpLlxuICovXG5idXR0b24sXG5bdHlwZT1cImJ1dHRvblwiXSxcblt0eXBlPVwicmVzZXRcIl0sXG5bdHlwZT1cInN1Ym1pdFwiXSB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xufVxuLyoqXG4gKiBSZW1vdmUgdGhlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cImJ1dHRvblwiXTo6LW1vei1mb2N1cy1pbm5lcixcblt0eXBlPVwicmVzZXRcIl06Oi1tb3otZm9jdXMtaW5uZXIsXG5bdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lciB7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbn1cbi8qKlxuICogUmVzdG9yZSB0aGUgZm9jdXMgc3R5bGVzIHVuc2V0IGJ5IHRoZSBwcmV2aW91cyBydWxlLlxuICovXG5idXR0b246LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cImJ1dHRvblwiXTotbW96LWZvY3VzcmluZyxcblt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsXG5bdHlwZT1cInN1Ym1pdFwiXTotbW96LWZvY3VzcmluZyB7XG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcbn1cbi8qKlxuICogQ29ycmVjdCB0aGUgcGFkZGluZyBpbiBGaXJlZm94LlxuICovXG5maWVsZHNldCB7XG4gIHBhZGRpbmc6IDAuMzVlbSAwLjc1ZW0gMC42MjVlbTtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgdGV4dCB3cmFwcGluZyBpbiBFZGdlIGFuZCBJRS5cbiAqIDIuIENvcnJlY3QgdGhlIGNvbG9yIGluaGVyaXRhbmNlIGZyb20gYGZpZWxkc2V0YCBlbGVtZW50cyBpbiBJRS5cbiAqIDMuIFJlbW92ZSB0aGUgcGFkZGluZyBzbyBkZXZlbG9wZXJzIGFyZSBub3QgY2F1Z2h0IG91dCB3aGVuIHRoZXkgemVybyBvdXRcbiAqICAgIGBmaWVsZHNldGAgZWxlbWVudHMgaW4gYWxsIGJyb3dzZXJzLlxuICovXG5sZWdlbmQge1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLyogMSAqL1xuICBjb2xvcjogaW5oZXJpdDtcbiAgLyogMiAqL1xuICBkaXNwbGF5OiB0YWJsZTtcbiAgLyogMSAqL1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8qIDEgKi9cbiAgcGFkZGluZzogMDtcbiAgLyogMyAqL1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAvKiAxICovXG59XG4vKipcbiAqIEFkZCB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW4gQ2hyb21lLCBGaXJlZm94LCBhbmQgT3BlcmEuXG4gKi9cbnByb2dyZXNzIHtcbiAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuLyoqXG4gKiBSZW1vdmUgdGhlIGRlZmF1bHQgdmVydGljYWwgc2Nyb2xsYmFyIGluIElFIDEwKy5cbiAqL1xudGV4dGFyZWEge1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi8qKlxuICogMS4gQWRkIHRoZSBjb3JyZWN0IGJveCBzaXppbmcgaW4gSUUgMTAuXG4gKiAyLiBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gSUUgMTAuXG4gKi9cblt0eXBlPVwiY2hlY2tib3hcIl0sXG5bdHlwZT1cInJhZGlvXCJdIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8qIDEgKi9cbiAgcGFkZGluZzogMDtcbiAgLyogMiAqL1xufVxuLyoqXG4gKiBDb3JyZWN0IHRoZSBjdXJzb3Igc3R5bGUgb2YgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgYnV0dG9ucyBpbiBDaHJvbWUuXG4gKi9cblt0eXBlPVwibnVtYmVyXCJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICBoZWlnaHQ6IGF1dG87XG59XG4vKipcbiAqIDEuIENvcnJlY3QgdGhlIG9kZCBhcHBlYXJhbmNlIGluIENocm9tZSBhbmQgU2FmYXJpLlxuICogMi4gQ29ycmVjdCB0aGUgb3V0bGluZSBzdHlsZSBpbiBTYWZhcmkuXG4gKi9cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIC8qIDEgKi9cbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG4gIC8qIDIgKi9cbn1cbi8qKlxuICogUmVtb3ZlIHRoZSBpbm5lciBwYWRkaW5nIGluIENocm9tZSBhbmQgU2FmYXJpIG9uIG1hY09TLlxuICovXG5bdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cbi8qKlxuICogMS4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbiAqIDIuIENoYW5nZSBmb250IHByb3BlcnRpZXMgdG8gYGluaGVyaXRgIGluIFNhZmFyaS5cbiAqL1xuOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuICAvKiAxICovXG4gIGZvbnQ6IGluaGVyaXQ7XG4gIC8qIDIgKi9cbn1cbi8qIEludGVyYWN0aXZlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLypcbiAqIEFkZCB0aGUgY29ycmVjdCBkaXNwbGF5IGluIEVkZ2UsIElFIDEwKywgYW5kIEZpcmVmb3guXG4gKi9cbmRldGFpbHMge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi8qXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBhbGwgYnJvd3NlcnMuXG4gKi9cbnN1bW1hcnkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07XG59XG4vKiBNaXNjXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLyoqXG4gKiBBZGQgdGhlIGNvcnJlY3QgZGlzcGxheSBpbiBJRSAxMCsuXG4gKi9cbnRlbXBsYXRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qKlxuICogQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gSUUgMTAuXG4gKi9cbltoaWRkZW5dIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qID09PT09IEJhc2UgPT09PT0gKi9cbmh0bWwsXG5ib2R5IHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuICBjb2xvcjogIzMzMztcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTUwJTtcbiAgZm9udC1mYW1pbHk6IFwiTWljcm9zb2Z0IFlhSGVpIFVJXCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuYTpsaW5rLFxuYTp2aXNpdGVkLFxuYTpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5hOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5jb2RlIHtcbiAgZm9udC1mYW1pbHk6IFwiU291cmNlIENvZGUgUHJvXCIsIENvbnNvbGFzLCBHZW9yZ2lhLCBNb25hY28sIG1vbm9zcGFjZSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG4vKiA9PT09PSBTY3JvbGxiYXIgPT09PT0gKi9cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogN3B4O1xuICBoZWlnaHQ6IDdweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOnZlcnRpY2FsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zNSk7XG59XG4vKiBMYXlvdXQgKi9cbi5kb2NzIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLyogQXNpZGUgKi9cbi5hc2lkZSB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgd2lkdGg6IDI2MHB4O1xuICBtYXJnaW46IDA7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzMzMztcbiAgY29sb3I6ICNkZGQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDVweCAycHggI2RkZDtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNXB4IDJweCAjZGRkO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi8qIE1haW4gKi9cbi5tYWluIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5hc2lkZSB7XG4gIGZvbnQtZmFtaWx5OiBcIlNvdXJjZSBDb2RlIFByb1wiLCBDb25zb2xhcywgR2VvcmdpYSwgTW9uYWNvLCBtb25vc3BhY2UsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLmFzaWRlX19oZWFkZXIge1xuICBtYXJnaW46IDAgYXV0bztcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9fbmF2IHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmFzaWRlX19oMiB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDU0cHg7XG4gIGxpbmUtaGVpZ2h0OiA1NHB4O1xuICBmb250LXNpemU6IDIwcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBDb25zb2xhcywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9faDMge1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMCAyMHB4O1xuICBmb250LXNpemU6IDE2cHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYXNpZGVfX2xpc3Qge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHggMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hc2lkZV9faXRlbSB7XG4gIGhlaWdodDogMzJweDtcbiAgbGluZS1oZWlnaHQ6IDMycHg7XG4gIHBhZGRpbmc6IDAgMzBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXNpemU6IDEzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYXNpZGVfX2l0ZW0uYWN0aXZlLFxuLmFzaWRlX19pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU1NTtcbn1cbi5hc2lkZV9faXRlbS5hY3RpdmUge1xuICBib3JkZXItbGVmdDogM3B4IHNvbGlkICNmZmY7XG59XG4uYXNpZGVfX2FuY2hvcjpsaW5rIHtcbiAgY29sb3I6ICNkZGQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5hc2lkZV9fYW5jaG9yOnZpc2l0ZWQge1xuICBjb2xvcjogI2RkZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLmFzaWRlX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogI2RkZDtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4ubWFpbl9faGVhZGVyLFxuLm1haW5fX2Zvb3RlciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nOiAxZW07XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tYWluX19oMSB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwYWRkaW5nLXRvcDogMWVtO1xuICBmb250LXNpemU6IDVlbTtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDJlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tYWluX19uYW1lIHtcbiAgY29sb3I6ICMxZjhkZDY7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG4ubWFpbl9fdGFnbGluZSB7XG4gIG1hcmdpbjogMWVtIGF1dG87XG4gIG1heC13aWR0aDogNjYwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjNlbTtcbiAgZm9udC1zaXplOiAyZW07XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXdlaWdodDogMTAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX2NkbiB7XG4gIG1hcmdpbjogMmVtIDA7XG4gIHBhZGRpbmc6IDJlbTtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMTUwJTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gIGNvbG9yOiAjNjY2O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm1haW5fX2Rvd25sb2FkIHtcbiAgbWFyZ2luOiAxZW0gYXV0bztcbiAgd2lkdGg6IDIwMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ubWFpbl9fYnV0dG9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHBhZGRpbmc6IDE0cHggMjlweDtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LWZhbWlseTogXCJTb3VyY2UgQ29kZSBQcm9cIiwgQ29uc29sYXMsIEdlb3JnaWEsIE1vbmFjbywgbW9ub3NwYWNlLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA1ODk0MjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5tYWluX19idXR0b246bGluayxcbi5tYWluX19idXR0b246dmlzaXRlZCxcbi5tYWluX19idXR0b246aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLm1haW5fX2Zvb3RlciB7XG4gIG1hcmdpbjogMCAzZW07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xufVxuLnNlY3Rpb24ge1xuICBtYXJnaW46IDFlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2hlYWRlcixcbi5zZWN0aW9uX19jb250ZW50LFxuLnNlY3Rpb25fX2Zvb3RlciB7XG4gIG1hcmdpbjogMCAzZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fdGl0bGUge1xuICBjb2xvcjogIzY2Njtcbn1cbi5zZWN0aW9uX19oMyB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xuICBmb250LXNpemU6IDEuMzVlbTtcbn1cbi5zZWN0aW9uX19oNCB7XG4gIGZvbnQtc2l6ZTogMS4xZW07XG4gIGNvbG9yOiAjNjY2O1xufVxuLnNlY3Rpb25fX2g1IHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGNvbG9yOiAjOTk5O1xufVxuLnNlY3Rpb25fX2RsLFxuLnNlY3Rpb25fX2R0LFxuLnNlY3Rpb25fX2RkIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2RsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xufVxuLnNlY3Rpb25fX2R0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnNlY3Rpb25fX2RkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5zZWN0aW9uX19wcmUge1xuICBtYXJnaW46IDJlbSAwO1xuICBwYWRkaW5nOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29sb3I6ICM2NjY7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLnNlY3Rpb25fX2NvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIG1hcmdpbi10b3A6IDNlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgY29sb3I6ICM5OTk7XG59XG4uY2FzZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgZ2FwOiA0MHB4O1xuICBwYWRkaW5nOiAxZW07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlOmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlX19wcmUsXG4uY2FzZV9fdGV4dGFyZWEge1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xufVxuLmNhc2VfX3ByZSxcbi5jYXNlX19jb2RlLFxuLmNhc2VfX3RleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ29uc29sYXMsIEdlb3JnaWEsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLmNhc2VfX3ByZSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmNhc2VfX3Rvb2xiYXIge1xuICBtYXJnaW46IDAgYXV0bztcbiAgaGVpZ2h0OiAzNnB4O1xuICBsaW5lLWhlaWdodDogMzZweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBwYWRkaW5nOiAwIDE2cHg7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX2FjdGlvbixcbi5jYXNlX19yZW1vdmUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuLmNhc2VfX2FjdGlvbiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xufVxuLmNhc2VfX2FjdGlvbjpmaXJzdC1jaGlsZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbn1cbi5jYXNlX19yZW1vdmUge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uY2FzZV9fY29uc29sZSB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDE4MHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX3RleHRhcmVhIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogMWVtO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uY2FzZV9fbGlzdCxcbi5jYXNlX19pdGVtIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY2FzZV9fbGlzdCB7XG4gIGhlaWdodDogMzYwcHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5jYXNlX19pdGVtIHtcbiAgaGVpZ2h0OiAzNnB4O1xuICBsaW5lLWhlaWdodDogMzZweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4uY2FzZV9faXRlbTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y4Zjk7XG59XG4uYnV0dG9ucyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxMnB4O1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiA1NnB4O1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYnV0dG9uc19faXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAxMHB4O1xuICB3aWR0aDogMzZweDtcbiAgaGVpZ2h0OiAzNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAjZGRkO1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggI2RkZDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzk5OTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5idXR0b25zX19pdGVtOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4uYnV0dG9uc19faXRlbS5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5idXR0b25zX19hbmNob3I6bGluayxcbi5idXR0b25zX19hbmNob3I6dmlzaXRlZCxcbi5idXR0b25zX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5idXR0b25zX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5idXR0b25zX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zjg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMenhwYm5CMWRDQmpjM01nTVQ0aUxDSnViM0p0WVd4cGVtVXViR1Z6Y3lJc0ltSmhjMlV1YkdWemN5SXNJbk5qY205c2JHSmhjaTVzWlhOeklpd2liR0Y1YjNWMExteGxjM01pTENKaGMybGtaUzVzWlhOeklpd2liV0ZwYmk1c1pYTnpJaXdpYzJWamRHbHZiaTVzWlhOeklpd2lZMkZ6WlM1c1pYTnpJaXdpWW5WMGRHOXVjeTVzWlhOeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRFJGUVVFMFJUdEJRVU0xUlR0blJrRkRaMFk3UVVGRGFFWTdPenRIUVVkSE8wRkRTVWc3UlVGRFJTeHJRa0ZCUVR0RlJFWkJMRTlCUVU4N1JVTkhVQ3dyUWtGQlFUdEZSRVJCTEU5QlFVODdRMEZEVWp0QlFVTkVPMmRHUVVOblJqdEJRVU5vUmpzN1IwRkZSenRCUTB0SU8wVkJRMFVzVlVGQlFUdERSRWhFTzBGQlEwUTdPMGRCUlVjN1FVTlBTRHRGUVVORkxHVkJRVUU3UTBSTVJEdEJRVU5FT3pzN1IwRkhSenRCUTFOSU8wVkJRMFVzWlVGQlFUdEZRVU5CTEdsQ1FVRkJPME5FVUVRN1FVRkRSRHRuUmtGRFowWTdRVUZEYUVZN096dEhRVWRITzBGRFdVZzdSVUZEUlN4blEwRkJRVHRWUVVGQkxIZENRVUZCTzBWRVZrRXNUMEZCVHp0RlExZFFMRlZCUVVFN1JVUlVRU3hQUVVGUE8wVkRWVkFzYTBKQlFVRTdSVVJTUVN4UFFVRlBPME5CUTFJN1FVRkRSRHM3TzBkQlIwYzdRVU5YU0R0RlFVTkZMR3REUVVGQk8wVkVWRUVzVDBGQlR6dEZRMVZRTEdWQlFVRTdSVVJTUVN4UFFVRlBPME5CUTFJN1FVRkRSRHRuUmtGRFowWTdRVUZEYUVZN08wZEJSVWM3UVVOWlNEdEZRVU5GTERoQ1FVRkJPME5FVmtRN1FVRkRSRHM3TzBkQlIwYzdRVU5qU0R0RlFVTkZMRzlDUVVGQk8wVkVXa0VzVDBGQlR6dEZRMkZRTERKQ1FVRkJPMFZFV0VFc1QwRkJUenRGUTFsUUxEQkRRVUZCTzFWQlFVRXNhME5CUVVFN1JVUldRU3hQUVVGUE8wTkJRMUk3UVVGRFJEczdSMEZGUnp0QlEyRklPenRGUVVWRkxHOUNRVUZCTzBORVdFUTdRVUZEUkRzN08wZEJSMGM3UVVObFNEczdPMFZCUjBVc2EwTkJRVUU3UlVSaVFTeFBRVUZQTzBWRFkxQXNaVUZCUVR0RlJGcEJMRTlCUVU4N1EwRkRVanRCUVVORU96dEhRVVZITzBGRFpVZzdSVUZEUlN4bFFVRkJPME5FWWtRN1FVRkRSRHM3TzBkQlIwYzdRVU5wUWtnN08wVkJSVVVzWlVGQlFUdEZRVU5CTEdWQlFVRTdSVUZEUVN4dFFrRkJRVHRGUVVOQkxIbENRVUZCTzBORVprUTdRVU5yUWtRN1JVRkRSU3huUWtGQlFUdERSR2hDUkR0QlEyMUNSRHRGUVVORkxGbEJRVUU3UTBScVFrUTdRVUZEUkR0blJrRkRaMFk3UVVGRGFFWTdPMGRCUlVjN1FVTnpRa2c3UlVGRFJTeHRRa0ZCUVR0RFJIQkNSRHRCUVVORU8yZEdRVU5uUmp0QlFVTm9SanM3TzBkQlIwYzdRVU41UWtnN096czdPMFZCUzBVc2NVSkJRVUU3UlVSMlFrRXNUMEZCVHp0RlEzZENVQ3huUWtGQlFUdEZSSFJDUVN4UFFVRlBPMFZEZFVKUUxHdENRVUZCTzBWRWNrSkJMRTlCUVU4N1JVTnpRbEFzVlVGQlFUdEZSSEJDUVN4UFFVRlBPME5CUTFJN1FVRkRSRHM3TzBkQlIwYzdRVU4xUWtnN08wVkVjRUpGTEU5QlFVODdSVU56UWxBc2EwSkJRVUU3UTBSd1FrUTdRVUZEUkRzN08wZEJSMGM3UVVOM1FrZzdPMFZFY2tKRkxFOUJRVTg3UlVOMVFsQXNjVUpCUVVFN1EwUnlRa1E3UVVGRFJEczdSMEZGUnp0QlEzbENTRHM3T3p0RlFVbEZMREpDUVVGQk8wTkVka0pFTzBGQlEwUTdPMGRCUlVjN1FVTXlRa2c3T3pzN1JVRkpSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdRMFI2UWtRN1FVRkRSRHM3UjBGRlJ6dEJRelpDU0RzN096dEZRVWxGTEN0Q1FVRkJPME5FTTBKRU8wRkJRMFE3TzBkQlJVYzdRVU1yUWtnN1JVRkRSU3dyUWtGQlFUdERSRGRDUkR0QlFVTkVPenM3T3p0SFFVdEhPMEZEYVVOSU8wVkJRMFVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHRGUkM5Q1FTeFBRVUZQTzBWRFowTlFMR1ZCUVVFN1JVUTVRa0VzVDBGQlR6dEZReXRDVUN4bFFVRkJPMFZFTjBKQkxFOUJRVTg3UlVNNFFsQXNaMEpCUVVFN1JVUTFRa0VzVDBGQlR6dEZRelpDVUN4WFFVRkJPMFZFTTBKQkxFOUJRVTg3UlVNMFFsQXNiMEpCUVVFN1JVUXhRa0VzVDBGQlR6dERRVU5TTzBGQlEwUTdPMGRCUlVjN1FVTTJRa2c3UlVGRFJTeDVRa0ZCUVR0RFJETkNSRHRCUVVORU96dEhRVVZITzBGREswSklPMFZCUTBVc1pVRkJRVHREUkRkQ1JEdEJRVU5FT3pzN1IwRkhSenRCUTJsRFNEczdSVUZGUlN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWRUwwSkJMRTlCUVU4N1JVTm5RMUFzVjBGQlFUdEZSRGxDUVN4UFFVRlBPME5CUTFJN1FVRkRSRHM3UjBGRlJ6dEJRMmxEU0RzN1JVRkZSU3hoUVVGQk8wTkVMMEpFTzBGQlEwUTdPenRIUVVkSE8wRkRiVU5JTzBWQlEwVXNPRUpCUVVFN1JVUnFRMEVzVDBGQlR6dEZRMnREVUN4eFFrRkJRVHRGUkdoRFFTeFBRVUZQTzBOQlExSTdRVUZEUkRzN1IwRkZSenRCUTIxRFNEdEZRVU5GTEhsQ1FVRkJPME5FYWtORU8wRkJRMFE3T3p0SFFVZEhPMEZEY1VOSU8wVkJRMFVzTWtKQlFVRTdSVVJ1UTBFc1QwRkJUenRGUTI5RFVDeGpRVUZCTzBWRWJFTkJMRTlCUVU4N1EwRkRVanRCUVVORU8yZEdRVU5uUmp0QlFVTm9SanM3UjBGRlJ6dEJRM05EU0R0RlFVTkZMR1ZCUVVFN1EwUndRMFE3UVVGRFJEczdSMEZGUnp0QlEzZERTRHRGUVVORkxHMUNRVUZCTzBORWRFTkVPMEZCUTBRN1owWkJRMmRHTzBGQlEyaEdPenRIUVVWSE8wRkRNa05JTzBWQlEwVXNZMEZCUVR0RFJIcERSRHRCUVVORU96dEhRVVZITzBGRE5rTklPMFZCUTBVc1kwRkJRVHREUkRORFJEdEJRVU5FTEhOQ1FVRnpRanRCUlRsVGRFSTdPMFZCUlVVc1lVRkJRVHRGUVVOQkxHOUNRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzYTBKQlFVRTdSVUZEUVN4eFJFRkJRVHRGUVVOQkxHbENRVUZCTzBOR1oxUkVPMEZGTlZORE96czdSVUZIUlN4bFFVRkJPMFZCUTBFc2MwSkJRVUU3UTBZNFUwZzdRVVV6VTBNN1JVRkRSU3d5UWtGQlFUdERSalpUU0R0QlJYcFRSRHRGUVVORkxIZEdRVUZCTzBOR01sTkVPMEZCUTBRc01rSkJRVEpDTzBGSGRsVXpRanRGUVVORkxGZEJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNNa0pCUVVFN1EwaDVWVVE3UVVkMFZVUTdSVUZEUlN3eVFrRkJRVHREU0hkVlJEdEJSM0pWUkR0RlFVTkZMSE5EUVVGQk8wVkJRMEVzTWtKQlFVRTdRMGgxVlVRN1FVZHdWVVE3UlVGRFJTeHpRMEZCUVR0RlFVTkJMREpDUVVGQk8wTkljMVZFTzBGSGJsVkVPMFZCUTBVc2MwTkJRVUU3UTBoeFZVUTdRVWRzVlVRN1JVRkRSU3h6UTBGQlFUdERTRzlWUkR0QlFVTkVMRmxCUVZrN1FVazFWbG83UlVGRFJTeHhRa0ZCUVR0RlFVRkJMSEZDUVVGQk8wVkJRVUVzWTBGQlFUdEZRVU5CTEN0Q1FVRkJPMFZCUVVFc09FSkJRVUU3VFVGQlFTeDNRa0ZCUVR0VlFVRkJMRzlDUVVGQk8wVkJRMEVzYzBKQlFVRTdUVUZCUVN4clFrRkJRVHRGUVVOQkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzVlVGQlFUdEZRVU5CTEdsQ1FVRkJPME5LT0ZaRU8wRkJRMFFzVjBGQlZ6dEJTVE5XV0R0RlFVTkZMSEZDUVVGQk8wVkJRVUVzY1VKQlFVRTdSVUZCUVN4alFVRkJPMFZCUTBFc2NVSkJRVUU3VFVGQlFTeGxRVUZCTzBWQlEwRXNOa0pCUVVFN1JVRkJRU3c0UWtGQlFUdE5RVUZCTERKQ1FVRkJPMVZCUVVFc2RVSkJRVUU3UlVGRFFTeHpRa0ZCUVR0TlFVRkJMR3RDUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEZWQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc2RVSkJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNjVU5CUVVFN1ZVRkJRU3cyUWtGQlFUdEZRVU5CTEdWQlFVRTdRMG8yVmtRN1FVRkRSQ3hWUVVGVk8wRkpNVlpXTzBWQlEwVXNiMEpCUVVFN1RVRkJRU3haUVVGQk8xVkJRVUVzVVVGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTeDFRa0ZCUVR0RlFVTkJMR1ZCUVVFN1EwbzBWa1E3UVVzdldFUTdSVUZEUlN4M1JrRkJRVHREVEdsWlJEdEJTeTlZUXp0RlFVTkZMR1ZCUVVFN1JVRkRRU3h4UWtGQlFUdE5RVUZCTEdWQlFVRTdSVUZEUVN4cFFrRkJRVHREVEdsWlNEdEJTemxZUXp0RlFVTkZMRzlDUVVGQk8wMUJRVUVzV1VGQlFUdFZRVUZCTEZGQlFVRTdSVUZEUVN4bFFVRkJPME5NWjFsSU8wRkxOMWhETzBWQlEwVXNaVUZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3hyUWtGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2IwSkJRVUU3UlVGRFFTeHJSRUZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMHdyV0VnN1FVczFXRU03UlVGRFJTeGxRVUZCTzBWQlEwRXNaMEpCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5NT0ZoSU8wRkxNMWhETzBWQlEwVXNWVUZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMHcyV0VnN1FVc3hXRU03UlVGRFJTeGhRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc1owSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFREUllTRHRCU3pGWVJ6czdSVUZGUlN4MVFrRkJRVHREVERSWVREdEJTM3BZUnp0RlFVTkZMRFJDUVVGQk8wTk1NbGhNTzBGTGRsaERPMFZCUTBVc1dVRkJRVHRGUVVOQkxITkNRVUZCTzBOTWVWaElPMEZMZEZoRE8wVkJRMFVzV1VGQlFUdEZRVU5CTEhOQ1FVRkJPME5NZDFoSU8wRkxjbGhETzBWQlEwVXNXVUZCUVR0RlFVTkJMREpDUVVGQk8wTk1kVmhJTzBGTk1XSkRPenRGUVVWRkxHVkJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNiVUpCUVVFN1JVRkRRU3hwUWtGQlFUdERUalJpU0R0QlRYcGlRenRGUVVORkxHVkJRVUU3UlVGRFFTeHBRa0ZCUVR0RlFVTkJMR1ZCUVVFN1JVRkRRU3h2UWtGQlFUdEZRVU5CTEdsQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UTA0eVlrZzdRVTE0WWtNN1JVRkRSU3hsUVVGQk8wVkJRMEVzYjBKQlFVRTdRMDR3WWtnN1FVMTJZa003UlVGRFJTeHBRa0ZCUVR0RlFVTkJMR2xDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4bFFVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHbENRVUZCTzBWQlEwRXNhVUpCUVVFN1EwNTVZa2c3UVUxMFlrTTdSVUZEUlN4alFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxHZENRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3h0UWtGQlFUdEZRVU5CTERCQ1FVRkJPMFZCUTBFc01rSkJRVUU3UlVGRFFTdzRRa0ZCUVR0RlFVTkJMRmxCUVVFN1JVRkRRU3hwUWtGQlFUdERUbmRpU0R0QlRYSmlRenRGUVVORkxHbENRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMDUxWWtnN1FVMXdZa003UlVGRFJTeHpRa0ZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4blFrRkJRVHRGUVVOQkxIZEdRVUZCTzBWQlEwRXNNRUpCUVVFN1JVRkRRU3hwUWtGQlFUdERUbk5pU0R0QlRYQmlSenM3TzBWQlIwVXNXVUZCUVR0RlFVTkJMSE5DUVVGQk8wTk9jMkpNTzBGTmJHSkRPMFZCUTBVc1kwRkJRVHRGUVVOQkxESkNRVUZCTzBOT2IySklPMEZQTldaRU8wVkJRMFVzWTBGQlFUdEZRVU5CTEdsQ1FVRkJPME5RT0daRU8wRlBOV1pET3pzN1JVRkhSU3hqUVVGQk8wVkJRMEVzYVVKQlFVRTdRMUE0WmtnN1FVOHpaa003UlVGRFJTeFpRVUZCTzBOUU5tWklPMEZQTVdaRE8wVkJRMFVzWlVGQlFUdEZRVU5CTEd0Q1FVRkJPME5RTkdaSU8wRlBlbVpETzBWQlEwVXNhVUpCUVVFN1JVRkRRU3haUVVGQk8wTlFNbVpJTzBGUGVHWkRPMFZCUTBVc1pVRkJRVHRGUVVOQkxGbEJRVUU3UTFBd1prZzdRVTkyWmtNN096dEZRVWRGTEZWQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc2FVSkJRVUU3UTFCNVprZzdRVTkwWmtNN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdRMUIzWmtnN1FVOXlaa003UlVGRFJTeHpRa0ZCUVR0RFVIVm1TRHRCVDNCbVF6dEZRVU5GTEhOQ1FVRkJPMFZCUTBFc1pVRkJRVHREVUhObVNEdEJUMjVtUXp0RlFVTkZMR05CUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzWjBKQlFVRTdSVUZEUVN4clFrRkJRVHRGUVVOQkxHbENRVUZCTzBWQlEwRXNNRUpCUVVFN1JVRkRRU3gxUWtGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHVkJRVUU3UTFCeFprZzdRVTlzWmtNN1JVRkRSU3hsUVVGQk8wVkJRMEVzWlVGQlFUdEZRVU5CTEdsQ1FVRkJPME5RYjJaSU8wRlBhbVpETzBWQlEwVXNNa0pCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTERCQ1FVRkJPMFZCUTBFc1dVRkJRVHREVUcxbVNEdEJVVGxxUWtRN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4alFVRkJPMFZCUTBFc2MwTkJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMREpDUVVGQk8wVkJRMEVzT0VKQlFVRTdSVUZEUVN4cFFrRkJRVHREVW1kclFrUTdRVkU1YWtKRE8wVkJRMFVzV1VGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxFOUJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMRk5CUVVFN1JVRkRRU3cwUWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5TWjJ0Q1NEdEJVVGRxUWtNN08wVkJSVVVzWjBKQlFVRTdSVUZEUVN4clFrRkJRVHREVWl0cVFrZzdRVkUxYWtKRE96czdSVUZIUlN4cFJVRkJRVHREVWpocVFrZzdRVkV6YWtKRE8wVkJRMFVzVlVGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN3d1FrRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMQ3RDUVVGQk8xVkJRVUVzZFVKQlFVRTdSVUZEUVN4bFFVRkJPME5TTm1wQ1NEdEJVVEZxUWtNN1JVRkRSU3hsUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEd0Q1FVRkJPMFZCUTBFc1owSkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMUkwYWtKSU8wRlJlbXBDUXpzN1JVRkZSU3huUWtGQlFUdEZRVU5CTEdWQlFVRTdSVUZEUVN3d1FrRkJRVHRMUVVGQkxIVkNRVUZCTzAxQlFVRXNjMEpCUVVFN1ZVRkJRU3hyUWtGQlFUdERVakpxUWtnN1FWRjRha0pETzBWQlEwVXNaMEpCUVVFN1JVRkRRU3h0UWtGQlFUdERVakJxUWtnN1FWRjRha0pITzBWQlEwVXNaMEpCUVVFN1ExSXdha0pNTzBGUmRHcENRenRGUVVORkxHRkJRVUU3UTFKM2FrSklPMEZSY21wQ1F6dEZRVU5GTEdWQlFVRTdSVUZEUVN4alFVRkJPMFZCUTBFc2RVSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFVuVnFRa2c3UVZGd2FrSkRPMFZCUTBVc1pVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMR05CUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHRGUVVOQkxHVkJRVUU3UTFKemFrSklPMEZSYm1wQ1F6czdSVUZGUlN4VlFVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxITkNRVUZCTzBWQlEwRXNhVUpCUVVFN1ExSnhha0pJTzBGUmJHcENRenRGUVVORkxHTkJRVUU3UlVGRFFTd3lRa0ZCUVR0RlFVTkJMRGhDUVVGQk8wVkJRMEVzWjBKQlFVRTdSVUZEUVN4bFFVRkJPME5TYjJwQ1NEdEJVV3BxUWtNN1JVRkRSU3hoUVVGQk8wVkJRMEVzYTBKQlFVRTdSVUZEUVN4blFrRkJRVHRGUVVOQkxHZENRVUZCTzBOU2JXcENTRHRCVVdwcVFrYzdSVUZEUlN3d1FrRkJRVHREVW0xcVFrdzdRVk4yY1VKRU8wVkJRMFVzWjBKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1UwRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMRzlEUVVGQk8xVkJRVUVzTkVKQlFVRTdSVUZEUVN4cFFrRkJRVHREVkhseFFrUTdRVk4yY1VKRE8wVkJRMFVzYlVKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNkVUpCUVVFN1JVRkRRU3h0UWtGQlFUdEZRVU5CTEdsRFFVRkJPMVZCUVVFc2VVSkJRVUU3UlVGRFFTd3JRa0ZCUVR0VlFVRkJMSFZDUVVGQk8wVkJRMEVzZFVKQlFVRTdSVUZEUVN4blFrRkJRVHRGUVVOQkxHMUNRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR2xDUVVGQk8wTlVlWEZDU0R0QlUzWnhRa2M3UlVGRFJTeGxRVUZCTzBOVWVYRkNURHRCVTNSeFFrYzdSVUZEUlN4alFVRkJPME5VZDNGQ1REdEJVMjV4UWtjN096dEZRVWRGTEZsQlFVRTdRMVJ4Y1VKTU8wRlRiSEZDUnp0RlFVTkZMR1ZCUVVFN1ExUnZjVUpNTzBGVGFIRkNRenRGUVVORkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMRk5CUVVFN1JVRkRRU3hWUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4NVEwRkJRVHRWUVVGQkxHbERRVUZCTzBWQlEwRXNiVUpCUVVFN1JVRkRRU3hwUWtGQlFUdERWR3R4UWtnaUxDSm1hV3hsSWpvaVpHOWpjeTVqYzNNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaUVnYm05eWJXRnNhWHBsTG1OemN5QjJPQzR3TGpFZ2ZDQk5TVlFnVEdsalpXNXpaU0I4SUdkcGRHaDFZaTVqYjIwdmJtVmpiMnhoY3k5dWIzSnRZV3hwZW1VdVkzTnpJQ292WEc0dktpQkViMk4xYldWdWRGeHVJQ0FnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwZ0tpOWNiaThxS2x4dUlDb2dNUzRnUTI5eWNtVmpkQ0IwYUdVZ2JHbHVaU0JvWldsbmFIUWdhVzRnWVd4c0lHSnliM2R6WlhKekxseHVJQ29nTWk0Z1VISmxkbVZ1ZENCaFpHcDFjM1J0Wlc1MGN5QnZaaUJtYjI1MElITnBlbVVnWVdaMFpYSWdiM0pwWlc1MFlYUnBiMjRnWTJoaGJtZGxjeUJwYmlCcFQxTXVYRzRnS2k5Y2JtaDBiV3dnZTF4dUlDQnNhVzVsTFdobGFXZG9kRG9nTVM0eE5UdGNiaUFnTHlvZ01TQXFMMXh1SUNBdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdYRzRnSUM4cUlESWdLaTljYm4xY2JpOHFJRk5sWTNScGIyNXpYRzRnSUNBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBTQXFMMXh1THlvcVhHNGdLaUJTWlcxdmRtVWdkR2hsSUcxaGNtZHBiaUJwYmlCaGJHd2dZbkp2ZDNObGNuTXVYRzRnS2k5Y2JtSnZaSGtnZTF4dUlDQnRZWEpuYVc0NklEQTdYRzU5WEc0dktpcGNiaUFxSUZKbGJtUmxjaUIwYUdVZ1lHMWhhVzVnSUdWc1pXMWxiblFnWTI5dWMybHpkR1Z1ZEd4NUlHbHVJRWxGTGx4dUlDb3ZYRzV0WVdsdUlIdGNiaUFnWkdsemNHeGhlVG9nWW14dlkyczdYRzU5WEc0dktpcGNiaUFxSUVOdmNuSmxZM1FnZEdobElHWnZiblFnYzJsNlpTQmhibVFnYldGeVoybHVJRzl1SUdCb01XQWdaV3hsYldWdWRITWdkMmwwYUdsdUlHQnpaV04wYVc5dVlDQmhibVJjYmlBcUlHQmhjblJwWTJ4bFlDQmpiMjUwWlhoMGN5QnBiaUJEYUhKdmJXVXNJRVpwY21WbWIzZ3NJR0Z1WkNCVFlXWmhjbWt1WEc0Z0tpOWNibWd4SUh0Y2JpQWdabTl1ZEMxemFYcGxPaUF5WlcwN1hHNGdJRzFoY21kcGJqb2dNQzQyTjJWdElEQTdYRzU5WEc0dktpQkhjbTkxY0dsdVp5QmpiMjUwWlc1MFhHNGdJQ0E5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFNBcUwxeHVMeW9xWEc0Z0tpQXhMaUJCWkdRZ2RHaGxJR052Y25KbFkzUWdZbTk0SUhOcGVtbHVaeUJwYmlCR2FYSmxabTk0TGx4dUlDb2dNaTRnVTJodmR5QjBhR1VnYjNabGNtWnNiM2NnYVc0Z1JXUm5aU0JoYm1RZ1NVVXVYRzRnS2k5Y2JtaHlJSHRjYmlBZ1ltOTRMWE5wZW1sdVp6b2dZMjl1ZEdWdWRDMWliM2c3WEc0Z0lDOHFJREVnS2k5Y2JpQWdhR1ZwWjJoME9pQXdPMXh1SUNBdktpQXhJQ292WEc0Z0lHOTJaWEptYkc5M09pQjJhWE5wWW14bE8xeHVJQ0F2S2lBeUlDb3ZYRzU5WEc0dktpcGNiaUFxSURFdUlFTnZjbkpsWTNRZ2RHaGxJR2x1YUdWeWFYUmhibU5sSUdGdVpDQnpZMkZzYVc1bklHOW1JR1p2Ym5RZ2MybDZaU0JwYmlCaGJHd2dZbkp2ZDNObGNuTXVYRzRnS2lBeUxpQkRiM0p5WldOMElIUm9aU0J2WkdRZ1lHVnRZQ0JtYjI1MElITnBlbWx1WnlCcGJpQmhiR3dnWW5KdmQzTmxjbk11WEc0Z0tpOWNibkJ5WlNCN1hHNGdJR1p2Ym5RdFptRnRhV3g1T2lCdGIyNXZjM0JoWTJVc0lHMXZibTl6Y0dGalpUdGNiaUFnTHlvZ01TQXFMMXh1SUNCbWIyNTBMWE5wZW1VNklERmxiVHRjYmlBZ0x5b2dNaUFxTDF4dWZWeHVMeW9nVkdWNGRDMXNaWFpsYkNCelpXMWhiblJwWTNOY2JpQWdJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5SUNvdlhHNHZLaXBjYmlBcUlGSmxiVzkyWlNCMGFHVWdaM0poZVNCaVlXTnJaM0p2ZFc1a0lHOXVJR0ZqZEdsMlpTQnNhVzVyY3lCcGJpQkpSU0F4TUM1Y2JpQXFMMXh1WVNCN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJSFJ5WVc1emNHRnlaVzUwTzF4dWZWeHVMeW9xWEc0Z0tpQXhMaUJTWlcxdmRtVWdkR2hsSUdKdmRIUnZiU0JpYjNKa1pYSWdhVzRnUTJoeWIyMWxJRFUzTFZ4dUlDb2dNaTRnUVdSa0lIUm9aU0JqYjNKeVpXTjBJSFJsZUhRZ1pHVmpiM0poZEdsdmJpQnBiaUJEYUhKdmJXVXNJRVZrWjJVc0lFbEZMQ0JQY0dWeVlTd2dZVzVrSUZOaFptRnlhUzVjYmlBcUwxeHVZV0ppY2x0MGFYUnNaVjBnZTF4dUlDQmliM0prWlhJdFltOTBkRzl0T2lCdWIyNWxPMXh1SUNBdktpQXhJQ292WEc0Z0lIUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2RXNWtaWEpzYVc1bE8xeHVJQ0F2S2lBeUlDb3ZYRzRnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nZFc1a1pYSnNhVzVsSUdSdmRIUmxaRHRjYmlBZ0x5b2dNaUFxTDF4dWZWeHVMeW9xWEc0Z0tpQkJaR1FnZEdobElHTnZjbkpsWTNRZ1ptOXVkQ0IzWldsbmFIUWdhVzRnUTJoeWIyMWxMQ0JGWkdkbExDQmhibVFnVTJGbVlYSnBMbHh1SUNvdlhHNWlMRnh1YzNSeWIyNW5JSHRjYmlBZ1ptOXVkQzEzWldsbmFIUTZJR0p2YkdSbGNqdGNibjFjYmk4cUtseHVJQ29nTVM0Z1EyOXljbVZqZENCMGFHVWdhVzVvWlhKcGRHRnVZMlVnWVc1a0lITmpZV3hwYm1jZ2IyWWdabTl1ZENCemFYcGxJR2x1SUdGc2JDQmljbTkzYzJWeWN5NWNiaUFxSURJdUlFTnZjbkpsWTNRZ2RHaGxJRzlrWkNCZ1pXMWdJR1p2Ym5RZ2MybDZhVzVuSUdsdUlHRnNiQ0JpY205M2MyVnljeTVjYmlBcUwxeHVZMjlrWlN4Y2JtdGlaQ3hjYm5OaGJYQWdlMXh1SUNCbWIyNTBMV1poYldsc2VUb2diVzl1YjNOd1lXTmxMQ0J0YjI1dmMzQmhZMlU3WEc0Z0lDOHFJREVnS2k5Y2JpQWdabTl1ZEMxemFYcGxPaUF4WlcwN1hHNGdJQzhxSURJZ0tpOWNibjFjYmk4cUtseHVJQ29nUVdSa0lIUm9aU0JqYjNKeVpXTjBJR1p2Ym5RZ2MybDZaU0JwYmlCaGJHd2dZbkp2ZDNObGNuTXVYRzRnS2k5Y2JuTnRZV3hzSUh0Y2JpQWdabTl1ZEMxemFYcGxPaUE0TUNVN1hHNTlYRzR2S2lwY2JpQXFJRkJ5WlhabGJuUWdZSE4xWW1BZ1lXNWtJR0J6ZFhCZ0lHVnNaVzFsYm5SeklHWnliMjBnWVdabVpXTjBhVzVuSUhSb1pTQnNhVzVsSUdobGFXZG9kQ0JwYmx4dUlDb2dZV3hzSUdKeWIzZHpaWEp6TGx4dUlDb3ZYRzV6ZFdJc1hHNXpkWEFnZTF4dUlDQm1iMjUwTFhOcGVtVTZJRGMxSlR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURBN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2RtVnlkR2xqWVd3dFlXeHBaMjQ2SUdKaGMyVnNhVzVsTzF4dWZWeHVjM1ZpSUh0Y2JpQWdZbTkwZEc5dE9pQXRNQzR5TldWdE8xeHVmVnh1YzNWd0lIdGNiaUFnZEc5d09pQXRNQzQxWlcwN1hHNTlYRzR2S2lCRmJXSmxaR1JsWkNCamIyNTBaVzUwWEc0Z0lDQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQU0FxTDF4dUx5b3FYRzRnS2lCU1pXMXZkbVVnZEdobElHSnZjbVJsY2lCdmJpQnBiV0ZuWlhNZ2FXNXphV1JsSUd4cGJtdHpJR2x1SUVsRklERXdMbHh1SUNvdlhHNXBiV2NnZTF4dUlDQmliM0prWlhJdGMzUjViR1U2SUc1dmJtVTdYRzU5WEc0dktpQkdiM0p0YzF4dUlDQWdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDBnS2k5Y2JpOHFLbHh1SUNvZ01TNGdRMmhoYm1kbElIUm9aU0JtYjI1MElITjBlV3hsY3lCcGJpQmhiR3dnWW5KdmQzTmxjbk11WEc0Z0tpQXlMaUJTWlcxdmRtVWdkR2hsSUcxaGNtZHBiaUJwYmlCR2FYSmxabTk0SUdGdVpDQlRZV1poY21rdVhHNGdLaTljYm1KMWRIUnZiaXhjYm1sdWNIVjBMRnh1YjNCMFozSnZkWEFzWEc1elpXeGxZM1FzWEc1MFpYaDBZWEpsWVNCN1hHNGdJR1p2Ym5RdFptRnRhV3g1T2lCcGJtaGxjbWwwTzF4dUlDQXZLaUF4SUNvdlhHNGdJR1p2Ym5RdGMybDZaVG9nTVRBd0pUdGNiaUFnTHlvZ01TQXFMMXh1SUNCc2FXNWxMV2hsYVdkb2REb2dNUzR4TlR0Y2JpQWdMeW9nTVNBcUwxeHVJQ0J0WVhKbmFXNDZJREE3WEc0Z0lDOHFJRElnS2k5Y2JuMWNiaThxS2x4dUlDb2dVMmh2ZHlCMGFHVWdiM1psY21ac2IzY2dhVzRnU1VVdVhHNGdLaUF4TGlCVGFHOTNJSFJvWlNCdmRtVnlabXh2ZHlCcGJpQkZaR2RsTGx4dUlDb3ZYRzVpZFhSMGIyNHNYRzVwYm5CMWRDQjdYRzRnSUM4cUlERWdLaTljYmlBZ2IzWmxjbVpzYjNjNklIWnBjMmxpYkdVN1hHNTlYRzR2S2lwY2JpQXFJRkpsYlc5MlpTQjBhR1VnYVc1b1pYSnBkR0Z1WTJVZ2IyWWdkR1Y0ZENCMGNtRnVjMlp2Y20wZ2FXNGdSV1JuWlN3Z1JtbHlaV1p2ZUN3Z1lXNWtJRWxGTGx4dUlDb2dNUzRnVW1WdGIzWmxJSFJvWlNCcGJtaGxjbWwwWVc1alpTQnZaaUIwWlhoMElIUnlZVzV6Wm05eWJTQnBiaUJHYVhKbFptOTRMbHh1SUNvdlhHNWlkWFIwYjI0c1hHNXpaV3hsWTNRZ2UxeHVJQ0F2S2lBeElDb3ZYRzRnSUhSbGVIUXRkSEpoYm5ObWIzSnRPaUJ1YjI1bE8xeHVmVnh1THlvcVhHNGdLaUJEYjNKeVpXTjBJSFJvWlNCcGJtRmlhV3hwZEhrZ2RHOGdjM1I1YkdVZ1kyeHBZMnRoWW14bElIUjVjR1Z6SUdsdUlHbFBVeUJoYm1RZ1UyRm1ZWEpwTGx4dUlDb3ZYRzVpZFhSMGIyNHNYRzViZEhsd1pUMWNJbUoxZEhSdmJsd2lYU3hjYmx0MGVYQmxQVndpY21WelpYUmNJbDBzWEc1YmRIbHdaVDFjSW5OMVltMXBkRndpWFNCN1hHNGdJQzEzWldKcmFYUXRZWEJ3WldGeVlXNWpaVG9nWW5WMGRHOXVPMXh1ZlZ4dUx5b3FYRzRnS2lCU1pXMXZkbVVnZEdobElHbHVibVZ5SUdKdmNtUmxjaUJoYm1RZ2NHRmtaR2x1WnlCcGJpQkdhWEpsWm05NExseHVJQ292WEc1aWRYUjBiMjQ2T2kxdGIzb3RabTlqZFhNdGFXNXVaWElzWEc1YmRIbHdaVDFjSW1KMWRIUnZibHdpWFRvNkxXMXZlaTFtYjJOMWN5MXBibTVsY2l4Y2JsdDBlWEJsUFZ3aWNtVnpaWFJjSWwwNk9pMXRiM290Wm05amRYTXRhVzV1WlhJc1hHNWJkSGx3WlQxY0luTjFZbTFwZEZ3aVhUbzZMVzF2ZWkxbWIyTjFjeTFwYm01bGNpQjdYRzRnSUdKdmNtUmxjaTF6ZEhsc1pUb2dibTl1WlR0Y2JpQWdjR0ZrWkdsdVp6b2dNRHRjYm4xY2JpOHFLbHh1SUNvZ1VtVnpkRzl5WlNCMGFHVWdabTlqZFhNZ2MzUjViR1Z6SUhWdWMyVjBJR0o1SUhSb1pTQndjbVYyYVc5MWN5QnlkV3hsTGx4dUlDb3ZYRzVpZFhSMGIyNDZMVzF2ZWkxbWIyTjFjM0pwYm1jc1hHNWJkSGx3WlQxY0ltSjFkSFJ2Ymx3aVhUb3RiVzk2TFdadlkzVnpjbWx1Wnl4Y2JsdDBlWEJsUFZ3aWNtVnpaWFJjSWwwNkxXMXZlaTFtYjJOMWMzSnBibWNzWEc1YmRIbHdaVDFjSW5OMVltMXBkRndpWFRvdGJXOTZMV1p2WTNWemNtbHVaeUI3WEc0Z0lHOTFkR3hwYm1VNklERndlQ0JrYjNSMFpXUWdRblYwZEc5dVZHVjRkRHRjYm4xY2JpOHFLbHh1SUNvZ1EyOXljbVZqZENCMGFHVWdjR0ZrWkdsdVp5QnBiaUJHYVhKbFptOTRMbHh1SUNvdlhHNW1hV1ZzWkhObGRDQjdYRzRnSUhCaFpHUnBibWM2SURBdU16VmxiU0F3TGpjMVpXMGdNQzQyTWpWbGJUdGNibjFjYmk4cUtseHVJQ29nTVM0Z1EyOXljbVZqZENCMGFHVWdkR1Y0ZENCM2NtRndjR2x1WnlCcGJpQkZaR2RsSUdGdVpDQkpSUzVjYmlBcUlESXVJRU52Y25KbFkzUWdkR2hsSUdOdmJHOXlJR2x1YUdWeWFYUmhibU5sSUdaeWIyMGdZR1pwWld4a2MyVjBZQ0JsYkdWdFpXNTBjeUJwYmlCSlJTNWNiaUFxSURNdUlGSmxiVzkyWlNCMGFHVWdjR0ZrWkdsdVp5QnpieUJrWlhabGJHOXdaWEp6SUdGeVpTQnViM1FnWTJGMVoyaDBJRzkxZENCM2FHVnVJSFJvWlhrZ2VtVnlieUJ2ZFhSY2JpQXFJQ0FnSUdCbWFXVnNaSE5sZEdBZ1pXeGxiV1Z1ZEhNZ2FXNGdZV3hzSUdKeWIzZHpaWEp6TGx4dUlDb3ZYRzVzWldkbGJtUWdlMXh1SUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh1SUNBdktpQXhJQ292WEc0Z0lHTnZiRzl5T2lCcGJtaGxjbWwwTzF4dUlDQXZLaUF5SUNvdlhHNGdJR1JwYzNCc1lYazZJSFJoWW14bE8xeHVJQ0F2S2lBeElDb3ZYRzRnSUcxaGVDMTNhV1IwYURvZ01UQXdKVHRjYmlBZ0x5b2dNU0FxTDF4dUlDQndZV1JrYVc1bk9pQXdPMXh1SUNBdktpQXpJQ292WEc0Z0lIZG9hWFJsTFhOd1lXTmxPaUJ1YjNKdFlXdzdYRzRnSUM4cUlERWdLaTljYm4xY2JpOHFLbHh1SUNvZ1FXUmtJSFJvWlNCamIzSnlaV04wSUhabGNuUnBZMkZzSUdGc2FXZHViV1Z1ZENCcGJpQkRhSEp2YldVc0lFWnBjbVZtYjNnc0lHRnVaQ0JQY0dWeVlTNWNiaUFxTDF4dWNISnZaM0psYzNNZ2UxeHVJQ0IyWlhKMGFXTmhiQzFoYkdsbmJqb2dZbUZ6Wld4cGJtVTdYRzU5WEc0dktpcGNiaUFxSUZKbGJXOTJaU0IwYUdVZ1pHVm1ZWFZzZENCMlpYSjBhV05oYkNCelkzSnZiR3hpWVhJZ2FXNGdTVVVnTVRBckxseHVJQ292WEc1MFpYaDBZWEpsWVNCN1hHNGdJRzkyWlhKbWJHOTNPaUJoZFhSdk8xeHVmVnh1THlvcVhHNGdLaUF4TGlCQlpHUWdkR2hsSUdOdmNuSmxZM1FnWW05NElITnBlbWx1WnlCcGJpQkpSU0F4TUM1Y2JpQXFJREl1SUZKbGJXOTJaU0IwYUdVZ2NHRmtaR2x1WnlCcGJpQkpSU0F4TUM1Y2JpQXFMMXh1VzNSNWNHVTlYQ0pqYUdWamEySnZlRndpWFN4Y2JsdDBlWEJsUFZ3aWNtRmthVzljSWwwZ2UxeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0F2S2lBeElDb3ZYRzRnSUhCaFpHUnBibWM2SURBN1hHNGdJQzhxSURJZ0tpOWNibjFjYmk4cUtseHVJQ29nUTI5eWNtVmpkQ0IwYUdVZ1kzVnljMjl5SUhOMGVXeGxJRzltSUdsdVkzSmxiV1Z1ZENCaGJtUWdaR1ZqY21WdFpXNTBJR0oxZEhSdmJuTWdhVzRnUTJoeWIyMWxMbHh1SUNvdlhHNWJkSGx3WlQxY0ltNTFiV0psY2x3aVhUbzZMWGRsWW10cGRDMXBibTVsY2kxemNHbHVMV0oxZEhSdmJpeGNibHQwZVhCbFBWd2liblZ0WW1WeVhDSmRPam90ZDJWaWEybDBMVzkxZEdWeUxYTndhVzR0WW5WMGRHOXVJSHRjYmlBZ2FHVnBaMmgwT2lCaGRYUnZPMXh1ZlZ4dUx5b3FYRzRnS2lBeExpQkRiM0p5WldOMElIUm9aU0J2WkdRZ1lYQndaV0Z5WVc1alpTQnBiaUJEYUhKdmJXVWdZVzVrSUZOaFptRnlhUzVjYmlBcUlESXVJRU52Y25KbFkzUWdkR2hsSUc5MWRHeHBibVVnYzNSNWJHVWdhVzRnVTJGbVlYSnBMbHh1SUNvdlhHNWJkSGx3WlQxY0luTmxZWEpqYUZ3aVhTQjdYRzRnSUMxM1pXSnJhWFF0WVhCd1pXRnlZVzVqWlRvZ2RHVjRkR1pwWld4a08xeHVJQ0F2S2lBeElDb3ZYRzRnSUc5MWRHeHBibVV0YjJabWMyVjBPaUF0TW5CNE8xeHVJQ0F2S2lBeUlDb3ZYRzU5WEc0dktpcGNiaUFxSUZKbGJXOTJaU0IwYUdVZ2FXNXVaWElnY0dGa1pHbHVaeUJwYmlCRGFISnZiV1VnWVc1a0lGTmhabUZ5YVNCdmJpQnRZV05QVXk1Y2JpQXFMMXh1VzNSNWNHVTlYQ0p6WldGeVkyaGNJbDA2T2kxM1pXSnJhWFF0YzJWaGNtTm9MV1JsWTI5eVlYUnBiMjRnZTF4dUlDQXRkMlZpYTJsMExXRndjR1ZoY21GdVkyVTZJRzV2Ym1VN1hHNTlYRzR2S2lwY2JpQXFJREV1SUVOdmNuSmxZM1FnZEdobElHbHVZV0pwYkdsMGVTQjBieUJ6ZEhsc1pTQmpiR2xqYTJGaWJHVWdkSGx3WlhNZ2FXNGdhVTlUSUdGdVpDQlRZV1poY21rdVhHNGdLaUF5TGlCRGFHRnVaMlVnWm05dWRDQndjbTl3WlhKMGFXVnpJSFJ2SUdCcGJtaGxjbWwwWUNCcGJpQlRZV1poY21rdVhHNGdLaTljYmpvNkxYZGxZbXRwZEMxbWFXeGxMWFZ3Ykc5aFpDMWlkWFIwYjI0Z2UxeHVJQ0F0ZDJWaWEybDBMV0Z3Y0dWaGNtRnVZMlU2SUdKMWRIUnZianRjYmlBZ0x5b2dNU0FxTDF4dUlDQm1iMjUwT2lCcGJtaGxjbWwwTzF4dUlDQXZLaUF5SUNvdlhHNTlYRzR2S2lCSmJuUmxjbUZqZEdsMlpWeHVJQ0FnUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwZ0tpOWNiaThxWEc0Z0tpQkJaR1FnZEdobElHTnZjbkpsWTNRZ1pHbHpjR3hoZVNCcGJpQkZaR2RsTENCSlJTQXhNQ3NzSUdGdVpDQkdhWEpsWm05NExseHVJQ292WEc1a1pYUmhhV3h6SUh0Y2JpQWdaR2x6Y0d4aGVUb2dZbXh2WTJzN1hHNTlYRzR2S2x4dUlDb2dRV1JrSUhSb1pTQmpiM0p5WldOMElHUnBjM0JzWVhrZ2FXNGdZV3hzSUdKeWIzZHpaWEp6TGx4dUlDb3ZYRzV6ZFcxdFlYSjVJSHRjYmlBZ1pHbHpjR3hoZVRvZ2JHbHpkQzFwZEdWdE8xeHVmVnh1THlvZ1RXbHpZMXh1SUNBZ1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMGdLaTljYmk4cUtseHVJQ29nUVdSa0lIUm9aU0JqYjNKeVpXTjBJR1JwYzNCc1lYa2dhVzRnU1VVZ01UQXJMbHh1SUNvdlhHNTBaVzF3YkdGMFpTQjdYRzRnSUdScGMzQnNZWGs2SUc1dmJtVTdYRzU5WEc0dktpcGNiaUFxSUVGa1pDQjBhR1VnWTI5eWNtVmpkQ0JrYVhOd2JHRjVJR2x1SUVsRklERXdMbHh1SUNvdlhHNWJhR2xrWkdWdVhTQjdYRzRnSUdScGMzQnNZWGs2SUc1dmJtVTdYRzU5WEc0dktpQTlQVDA5UFNCQ1lYTmxJRDA5UFQwOUlDb3ZYRzVvZEcxc0xGeHVZbTlrZVNCN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdZbUZqYTJkeWIzVnVaRG9nSTJaaFptRm1ZVHRjYmlBZ1kyOXNiM0k2SUNNek16TTdYRzRnSUdadmJuUXRjMmw2WlRvZ01UUndlRHRjYmlBZ2JHbHVaUzFvWldsbmFIUTZJREUxTUNVN1hHNGdJR1p2Ym5RdFptRnRhV3g1T2lCY0lrMXBZM0p2YzI5bWRDQlpZVWhsYVNCVlNWd2lMQ0JCY21saGJDd2djMkZ1Y3kxelpYSnBaanRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNibUU2YkdsdWF5eGNibUU2ZG1semFYUmxaQ3hjYm1FNmFHOTJaWElnZTF4dUlDQmpiMnh2Y2pvZ0l6QTFPRGswTWp0Y2JpQWdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQnViMjVsTzF4dWZWeHVZVHBvYjNabGNpQjdYRzRnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nZFc1a1pYSnNhVzVsTzF4dWZWeHVZMjlrWlNCN1hHNGdJR1p2Ym5RdFptRnRhV3g1T2lCY0lsTnZkWEpqWlNCRGIyUmxJRkJ5YjF3aUxDQkRiMjV6YjJ4aGN5d2dSMlZ2Y21kcFlTd2dUVzl1WVdOdkxDQnRiMjV2YzNCaFkyVXNJRUZ5YVdGc0xDQnpZVzV6TFhObGNtbG1PMXh1ZlZ4dUx5b2dQVDA5UFQwZ1UyTnliMnhzWW1GeUlEMDlQVDA5SUNvdlhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlJSHRjYmlBZ2QybGtkR2c2SURkd2VEdGNiaUFnYUdWcFoyaDBPaUEzY0hnN1hHNGdJQzEzWldKcmFYUXRZbTl5WkdWeUxYSmhaR2wxY3pvZ05YQjRPMXh1ZlZ4dU9qb3RkMlZpYTJsMExYTmpjbTlzYkdKaGNpMTBjbUZqYXkxd2FXVmpaU0I3WEc0Z0lDMTNaV0pyYVhRdFltOXlaR1Z5TFhKaFpHbDFjem9nTlhCNE8xeHVmVnh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2kxMGFIVnRZanAyWlhKMGFXTmhiQ0I3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklISm5ZbUVvTUN3Z01Dd2dNQ3dnTUM0eU5TazdYRzRnSUMxM1pXSnJhWFF0WW05eVpHVnlMWEpoWkdsMWN6b2dOWEI0TzF4dWZWeHVPam90ZDJWaWEybDBMWE5qY205c2JHSmhjaTEwYUhWdFlqcG9iM0pwZW05dWRHRnNJSHRjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ2NtZGlZU2d3TENBd0xDQXdMQ0F3TGpJMUtUdGNiaUFnTFhkbFltdHBkQzFpYjNKa1pYSXRjbUZrYVhWek9pQTFjSGc3WEc1OVhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlPbWh2ZG1WeUlIdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nY21kaVlTZ3dMQ0F3TENBd0xDQXdMakUxS1R0Y2JuMWNiam82TFhkbFltdHBkQzF6WTNKdmJHeGlZWEl0ZEdoMWJXSTZhRzkyWlhJZ2UxeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUJ5WjJKaEtEQXNJREFzSURBc0lEQXVNelVwTzF4dWZWeHVMeW9nVEdGNWIzVjBJQ292WEc0dVpHOWpjeUI3WEc0Z0lHUnBjM0JzWVhrNklHWnNaWGc3WEc0Z0lHWnNaWGd0WkdseVpXTjBhVzl1T2lCeWIzYzdYRzRnSUdac1pYZ3RkM0poY0RvZ2JtOTNjbUZ3TzF4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUhvdGFXNWtaWGc2SURFN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdkMmxrZEdnNklERXdNQ1U3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpOHFJRUZ6YVdSbElDb3ZYRzR1WVhOcFpHVWdlMXh1SUNCa2FYTndiR0Y1T2lCbWJHVjRPMXh1SUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjYmlBZ1pteGxlQzFrYVhKbFkzUnBiMjQ2SUdOdmJIVnRianRjYmlBZ1pteGxlQzEzY21Gd09pQnViM2R5WVhBN1hHNGdJSGRwWkhSb09pQXlOakJ3ZUR0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1SUNCb1pXbG5hSFE2SURFd01DVTdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNNek16TTdYRzRnSUdOdmJHOXlPaUFqWkdSa08xeHVJQ0JpYjNndGMyaGhaRzkzT2lBd0lEQWdOWEI0SURKd2VDQWpaR1JrTzF4dUlDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2JuMWNiaThxSUUxaGFXNGdLaTljYmk1dFlXbHVJSHRjYmlBZ1pteGxlRG9nTVR0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0JvWldsbmFIUTZJREV3TUNVN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN1hHNGdJRzkyWlhKbWJHOTNPaUJoZFhSdk8xeHVmVnh1TG1GemFXUmxJSHRjYmlBZ1ptOXVkQzFtWVcxcGJIazZJRndpVTI5MWNtTmxJRU52WkdVZ1VISnZYQ0lzSUVOdmJuTnZiR0Z6TENCSFpXOXlaMmxoTENCTmIyNWhZMjhzSUcxdmJtOXpjR0ZqWlN3Z1FYSnBZV3dzSUhOaGJuTXRjMlZ5YVdZN1hHNTlYRzR1WVhOcFpHVmZYMmhsWVdSbGNpQjdYRzRnSUcxaGNtZHBiam9nTUNCaGRYUnZPMXh1SUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTVoYzJsa1pWOWZibUYySUh0Y2JpQWdabXhsZURvZ01UdGNiaUFnYjNabGNtWnNiM2M2SUdGMWRHODdYRzU5WEc0dVlYTnBaR1ZmWDJneUlIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUdobGFXZG9kRG9nTlRSd2VEdGNiaUFnYkdsdVpTMW9aV2xuYUhRNklEVTBjSGc3WEc0Z0lHWnZiblF0YzJsNlpUb2dNakJ3ZUR0Y2JpQWdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHRjYmlBZ1ptOXVkQzFtWVcxcGJIazZJRWRsYjNKbmFXRXNJRU52Ym5OdmJHRnpMQ0JCY21saGJDd2djMkZ1Y3kxelpYSnBaanRjYmlBZ2RHVjRkQzFoYkdsbmJqb2dZMlZ1ZEdWeU8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtRnphV1JsWDE5b015QjdYRzRnSUcxaGNtZHBiam9nTUNCaGRYUnZPMXh1SUNCd1lXUmthVzVuT2lBd0lESXdjSGc3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVFp3ZUR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1aGMybGtaVjlmYkdsemRDQjdYRzRnSUcxaGNtZHBiam9nTUR0Y2JpQWdjR0ZrWkdsdVp6b2dNVEJ3ZUNBd08xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtRnphV1JsWDE5cGRHVnRJSHRjYmlBZ2FHVnBaMmgwT2lBek1uQjRPMXh1SUNCc2FXNWxMV2hsYVdkb2REb2dNekp3ZUR0Y2JpQWdjR0ZrWkdsdVp6b2dNQ0F6TUhCNE8xeHVJQ0JqZFhKemIzSTZJSEJ2YVc1MFpYSTdYRzRnSUdadmJuUXRjMmw2WlRvZ01UTndlRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTVoYzJsa1pWOWZhWFJsYlM1aFkzUnBkbVVzWEc0dVlYTnBaR1ZmWDJsMFpXMDZhRzkyWlhJZ2UxeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUFqTlRVMU8xeHVmVnh1TG1GemFXUmxYMTlwZEdWdExtRmpkR2wyWlNCN1hHNGdJR0p2Y21SbGNpMXNaV1owT2lBemNIZ2djMjlzYVdRZ0kyWm1aanRjYm4xY2JpNWhjMmxrWlY5ZllXNWphRzl5T214cGJtc2dlMXh1SUNCamIyeHZjam9nSTJSa1pEdGNiaUFnZEdWNGRDMWtaV052Y21GMGFXOXVPaUJ1YjI1bE8xeHVmVnh1TG1GemFXUmxYMTloYm1Ob2IzSTZkbWx6YVhSbFpDQjdYRzRnSUdOdmJHOXlPaUFqWkdSa08xeHVJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hHNTlYRzR1WVhOcFpHVmZYMkZ1WTJodmNqcG9iM1psY2lCN1hHNGdJR052Ykc5eU9pQWpaR1JrTzF4dUlDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklIVnVaR1Z5YkdsdVpUdGNibjFjYmk1dFlXbHVYMTlvWldGa1pYSXNYRzR1YldGcGJsOWZabTl2ZEdWeUlIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUhCaFpHUnBibWM2SURGbGJUdGNiaUFnZEdWNGRDMWhiR2xuYmpvZ1kyVnVkR1Z5TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG0xaGFXNWZYMmd4SUh0Y2JpQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hHNGdJSEJoWkdScGJtY3RkRzl3T2lBeFpXMDdYRzRnSUdadmJuUXRjMmw2WlRvZ05XVnRPMXh1SUNCbWIyNTBMWGRsYVdkb2REb2dibTl5YldGc08xeHVJQ0JzYVc1bExXaGxhV2RvZERvZ01tVnRPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTFoYVc1ZlgyNWhiV1VnZTF4dUlDQmpiMnh2Y2pvZ0l6Rm1PR1JrTmp0Y2JpQWdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHRjYm4xY2JpNXRZV2x1WDE5MFlXZHNhVzVsSUh0Y2JpQWdiV0Z5WjJsdU9pQXhaVzBnWVhWMGJ6dGNiaUFnYldGNExYZHBaSFJvT2lBMk5qQndlRHRjYmlBZ2JHbHVaUzFvWldsbmFIUTZJREV1TTJWdE8xeHVJQ0JtYjI1MExYTnBlbVU2SURKbGJUdGNiaUFnWTI5c2IzSTZJQ001T1RrN1hHNGdJR1p2Ym5RdGQyVnBaMmgwT2lBeE1EQTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViV0ZwYmw5ZlkyUnVJSHRjYmlBZ2JXRnlaMmx1T2lBeVpXMGdNRHRjYmlBZ2NHRmtaR2x1WnpvZ01tVnRPMXh1SUNCbWIyNTBMWE5wZW1VNklERTJjSGc3WEc0Z0lHeHBibVV0YUdWcFoyaDBPaUF4TlRBbE8xeHVJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1ZV1poWm1FN1hHNGdJR0p2Y21SbGNpMTBiM0E2SURGd2VDQnpiMnhwWkNBalpHUmtPMXh1SUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnSTJSa1pEdGNiaUFnWTI5c2IzSTZJQ00yTmpZN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWJXRnBibDlmWkc5M2JteHZZV1FnZTF4dUlDQnRZWEpuYVc0NklERmxiU0JoZFhSdk8xeHVJQ0IzYVdSMGFEb2dNakF3Y0hnN1hHNGdJSFJsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV0WVdsdVgxOWlkWFIwYjI0Z2UxeHVJQ0JrYVhOd2JHRjVPaUJwYm14cGJtVXRZbXh2WTJzN1hHNGdJR0p2Y21SbGNpMXlZV1JwZFhNNklEUndlRHRjYmlBZ2NHRmtaR2x1WnpvZ01UUndlQ0F5T1hCNE8xeHVJQ0JtYjI1MExYTnBlbVU2SURFNGNIZzdYRzRnSUdadmJuUXRabUZ0YVd4NU9pQmNJbE52ZFhKalpTQkRiMlJsSUZCeWIxd2lMQ0JEYjI1emIyeGhjeXdnUjJWdmNtZHBZU3dnVFc5dVlXTnZMQ0J0YjI1dmMzQmhZMlVzSUVGeWFXRnNMQ0J6WVc1ekxYTmxjbWxtTzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpNRFU0T1RReU8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtMWhhVzVmWDJKMWRIUnZianBzYVc1ckxGeHVMbTFoYVc1ZlgySjFkSFJ2YmpwMmFYTnBkR1ZrTEZ4dUxtMWhhVzVmWDJKMWRIUnZianBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqWm1abU8xeHVJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hHNTlYRzR1YldGcGJsOWZabTl2ZEdWeUlIdGNiaUFnYldGeVoybHVPaUF3SURObGJUdGNiaUFnWW05eVpHVnlMWFJ2Y0RvZ01YQjRJSE52Ykdsa0lDTmtaR1E3WEc1OVhHNHVjMlZqZEdsdmJpQjdYRzRnSUcxaGNtZHBiam9nTVdWdElEQTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHVjMlZqZEdsdmJsOWZhR1ZoWkdWeUxGeHVMbk5sWTNScGIyNWZYMk52Ym5SbGJuUXNYRzR1YzJWamRHbHZibDlmWm05dmRHVnlJSHRjYmlBZ2JXRnlaMmx1T2lBd0lETmxiVHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV6WldOMGFXOXVYMTkwYVhSc1pTQjdYRzRnSUdOdmJHOXlPaUFqTmpZMk8xeHVmVnh1TG5ObFkzUnBiMjVmWDJneklIdGNiaUFnWTI5c2IzSTZJQ014Wmpoa1pEWTdYRzRnSUdadmJuUXRjMmw2WlRvZ01TNHpOV1Z0TzF4dWZWeHVMbk5sWTNScGIyNWZYMmcwSUh0Y2JpQWdabTl1ZEMxemFYcGxPaUF4TGpGbGJUdGNiaUFnWTI5c2IzSTZJQ00yTmpZN1hHNTlYRzR1YzJWamRHbHZibDlmYURVZ2UxeHVJQ0JtYjI1MExYTnBlbVU2SURGbGJUdGNiaUFnWTI5c2IzSTZJQ001T1RrN1hHNTlYRzR1YzJWamRHbHZibDlmWkd3c1hHNHVjMlZqZEdsdmJsOWZaSFFzWEc0dWMyVmpkR2x2Ymw5ZlpHUWdlMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJSEJoWkdScGJtYzZJREE3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YzJWamRHbHZibDlmWkd3Z2UxeHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lIb3RhVzVrWlhnNklERTdYRzU5WEc0dWMyVmpkR2x2Ymw5ZlpIUWdlMXh1SUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzU5WEc0dWMyVmpkR2x2Ymw5ZlpHUWdlMXh1SUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzRnSUdOdmJHOXlPaUFqTURVNE9UUXlPMXh1ZlZ4dUxuTmxZM1JwYjI1ZlgzQnlaU0I3WEc0Z0lHMWhjbWRwYmpvZ01tVnRJREE3WEc0Z0lIQmhaR1JwYm1jNklERmxiVHRjYmlBZ1ptOXVkQzF6YVhwbE9pQXhOSEI0TzF4dUlDQnNhVzVsTFdobGFXZG9kRG9nTVRVd0pUdGNiaUFnZEdWNGRDMWhiR2xuYmpvZ2JHVm1kRHRjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWmhabUZtWVR0Y2JpQWdZbTl5WkdWeU9pQXhjSGdnYzI5c2FXUWdJMlJrWkR0Y2JpQWdZbTl5WkdWeUxYSmhaR2wxY3pvZ05IQjRPMXh1SUNCamIyeHZjam9nSXpZMk5qdGNiaUFnYjNabGNtWnNiM2M2SUdGMWRHODdYRzU5WEc0dWMyVmpkR2x2Ymw5ZlkyOWtaU0I3WEc0Z0lHUnBjM0JzWVhrNklHSnNiMk5yTzF4dUlDQnRZWEpuYVc0NklEQWdZWFYwYnp0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1elpXTjBhVzl1WDE5bWIyOTBaWElnZTF4dUlDQmliM0prWlhJdGRHOXdPaUF4Y0hnZ2MyOXNhV1FnSTJSa1pEdGNiaUFnYldGeVoybHVMWFJ2Y0RvZ00yVnRPMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalptRm1ZV1poTzF4dUlDQmpiMnh2Y2pvZ0l6azVPVHRjYm4xY2JpNWpZWE5sSUh0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0JrYVhOd2JHRjVPaUJuY21sa08xeHVJQ0JuY21sa0xYUmxiWEJzWVhSbExXTnZiSFZ0Ym5NNklISmxjR1ZoZENneUxDQXhabklwTzF4dUlDQm5ZWEE2SURRd2NIZzdYRzRnSUhCaFpHUnBibWM2SURGbGJUdGNiaUFnWW05eVpHVnlMWFJ2Y0RvZ01YQjRJSE52Ykdsa0lDTmtaR1E3WEc0Z0lHSnZjbVJsY2kxaWIzUjBiMjA2SURGd2VDQnpiMnhwWkNBalpHUmtPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbU5oYzJVNllXWjBaWElnZTF4dUlDQmpiMjUwWlc1ME9pQW5KenRjYmlBZ2NHOXphWFJwYjI0NklHRmljMjlzZFhSbE8xeHVJQ0I2TFdsdVpHVjRPaUF5TzF4dUlDQjBiM0E2SURBN1hHNGdJR3hsWm5RNklEVXdKVHRjYmlBZ2FHVnBaMmgwT2lBeE1EQWxPMXh1SUNCM2FXUjBhRG9nTUR0Y2JpQWdZbTl5WkdWeUxXeGxablE2SURGd2VDQnpiMnhwWkNBalpHUmtPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbU5oYzJWZlgzQnlaU3hjYmk1allYTmxYMTkwWlhoMFlYSmxZU0I3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVE53ZUR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURFMU1DVTdYRzU5WEc0dVkyRnpaVjlmY0hKbExGeHVMbU5oYzJWZlgyTnZaR1VzWEc0dVkyRnpaVjlmZEdWNGRHRnlaV0VnZTF4dUlDQm1iMjUwTFdaaGJXbHNlVG9nWENKRGIzVnlhV1Z5SUU1bGQxd2lMQ0JEYjI1emIyeGhjeXdnUjJWdmNtZHBZU3dnUVhKcFlXd3NJSE5oYm5NdGMyVnlhV1k3WEc1OVhHNHVZMkZ6WlY5ZmNISmxJSHRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0J3WVdSa2FXNW5PaUF4WlcwN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWVdaaFptRTdYRzRnSUdobGFXZG9kRG9nTVRBd0pUdGNiaUFnWW05eVpHVnlMWEpoWkdsMWN6b2dOSEI0TzF4dUlDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4dUlDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2JuMWNiaTVqWVhObFgxOTBiMjlzWW1GeUlIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUdobGFXZG9kRG9nTXpad2VEdGNiaUFnYkdsdVpTMW9aV2xuYUhRNklETTJjSGc3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVFJ3ZUR0Y2JpQWdjR0ZrWkdsdVp6b2dNQ0F4Tm5CNE8xeHVJQ0IwWlhoMExXRnNhV2R1T2lCeWFXZG9kRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTVqWVhObFgxOWhZM1JwYjI0c1hHNHVZMkZ6WlY5ZmNtVnRiM1psSUh0Y2JpQWdZM1Z5YzI5eU9pQndiMmx1ZEdWeU8xeHVJQ0JqYjJ4dmNqb2dJekExT0RrME1qdGNiaUFnZFhObGNpMXpaV3hsWTNRNklHNXZibVU3WEc1OVhHNHVZMkZ6WlY5ZllXTjBhVzl1SUh0Y2JpQWdabTl1ZEMxemFYcGxPaUF4TTNCNE8xeHVJQ0J3WVdSa2FXNW5MV3hsWm5RNklERXdjSGc3WEc1OVhHNHVZMkZ6WlY5ZllXTjBhVzl1T21acGNuTjBMV05vYVd4a0lIdGNiaUFnY0dGa1pHbHVaeTFzWldaME9pQXdPMXh1ZlZ4dUxtTmhjMlZmWDNKbGJXOTJaU0I3WEc0Z0lHWnNiMkYwT2lCeWFXZG9kRHRjYm4xY2JpNWpZWE5sWDE5amIyNXpiMnhsSUh0Y2JpQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hHNGdJR2hsYVdkb2REb2dNVGd3Y0hnN1hHNGdJR0p2Y21SbGNqb2dNWEI0SUhOdmJHbGtJQ05rWkdRN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dVkyRnpaVjlmZEdWNGRHRnlaV0VnZTF4dUlDQnRZWEpuYVc0NklEQWdZWFYwYnp0Y2JpQWdkMmxrZEdnNklERXdNQ1U3WEc0Z0lHaGxhV2RvZERvZ01UQXdKVHRjYmlBZ1ltOXlaR1Z5T2lCdWIyNWxPMXh1SUNCdmRYUnNhVzVsT2lCdWIyNWxPMXh1SUNCd1lXUmthVzVuT2lBeFpXMDdYRzRnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzRnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh1ZlZ4dUxtTmhjMlZmWDJ4cGMzUXNYRzR1WTJGelpWOWZhWFJsYlNCN1hHNGdJRzFoY21kcGJqb2dNRHRjYmlBZ2NHRmtaR2x1WnpvZ01EdGNiaUFnYkdsemRDMXpkSGxzWlMxMGVYQmxPaUJ1YjI1bE8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtTmhjMlZmWDJ4cGMzUWdlMXh1SUNCb1pXbG5hSFE2SURNMk1IQjRPMXh1SUNCaWIzSmtaWEl0ZEc5d09pQXhjSGdnYzI5c2FXUWdJMlJrWkR0Y2JpQWdZbTl5WkdWeUxXSnZkSFJ2YlRvZ01YQjRJSE52Ykdsa0lDTmtaR1E3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVE53ZUR0Y2JpQWdiM1psY21ac2IzYzZJR0YxZEc4N1hHNTlYRzR1WTJGelpWOWZhWFJsYlNCN1hHNGdJR2hsYVdkb2REb2dNelp3ZUR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURNMmNIZzdYRzRnSUdOMWNuTnZjam9nY0c5cGJuUmxjanRjYmlBZ2NHRmtaR2x1WnpvZ01DQXhObkI0TzF4dWZWeHVMbU5oYzJWZlgybDBaVzA2YUc5MlpYSWdlMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalpqZG1PR1k1TzF4dWZWeHVMbUoxZEhSdmJuTWdlMXh1SUNCd2IzTnBkR2x2YmpvZ1ptbDRaV1E3WEc0Z0lIb3RhVzVrWlhnNklESTdYRzRnSUhSdmNEb2dOVEFsTzF4dUlDQnlhV2RvZERvZ01USndlRHRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0IzYVdSMGFEb2dOVFp3ZUR0Y2JpQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZaS0MwMU1DVXBPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbUoxZEhSdmJuTmZYMmwwWlcwZ2UxeHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lIb3RhVzVrWlhnNklERTdYRzRnSUcxaGNtZHBiam9nTVRCd2VEdGNiaUFnZDJsa2RHZzZJRE0yY0hnN1hHNGdJR2hsYVdkb2REb2dNelp3ZUR0Y2JpQWdZbTl5WkdWeU9pQXhjSGdnYzI5c2FXUWdJMlJrWkR0Y2JpQWdZbTl5WkdWeUxYSmhaR2wxY3pvZ05IQjRPMXh1SUNCaWIzZ3RjMmhoWkc5M09pQXdJREFnTm5CNElDTmtaR1E3WEc0Z0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3WEc0Z0lHTjFjbk52Y2pvZ2NHOXBiblJsY2p0Y2JpQWdkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPMXh1SUNCamIyeHZjam9nSXprNU9UdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNWlkWFIwYjI1elgxOXBkR1Z0T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNd05UZzVOREk3WEc1OVhHNHVZblYwZEc5dWMxOWZhWFJsYlM1b2FXUmxJSHRjYmlBZ1pHbHpjR3hoZVRvZ2JtOXVaVHRjYm4xY2JpNWlkWFIwYjI1elgxOWhibU5vYjNJNmJHbHVheXhjYmk1aWRYUjBiMjV6WDE5aGJtTm9iM0k2ZG1semFYUmxaQ3hjYmk1aWRYUjBiMjV6WDE5aGJtTm9iM0k2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXprNU9UdGNibjFjYmk1aWRYUjBiMjV6WDE5aGJtTm9iM0k2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXpBMU9EazBNanRjYm4xY2JpNWlkWFIwYjI1elgxOXBZMjl1SUh0Y2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0IwYjNBNklEVXdKVHRjYmlBZ2JHVm1kRG9nTlRBbE8xeHVJQ0IzYVdSMGFEb2dNakJ3ZUR0Y2JpQWdhR1ZwWjJoME9pQXlNSEI0TzF4dUlDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaU2d0TlRBbExDQXROVEFsS1R0Y2JpQWdabWxzYkRvZ1kzVnljbVZ1ZEdOdmJHOXlPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVJaXdpTHlvaElHNXZjbTFoYkdsNlpTNWpjM01nZGpndU1DNHhJSHdnVFVsVUlFeHBZMlZ1YzJVZ2ZDQm5hWFJvZFdJdVkyOXRMMjVsWTI5c1lYTXZibTl5YldGc2FYcGxMbU56Y3lBcUwxeHVYRzR2S2lCRWIyTjFiV1Z1ZEZ4dUlDQWdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDBnS2k5Y2JseHVMeW9xWEc0Z0tpQXhMaUJEYjNKeVpXTjBJSFJvWlNCc2FXNWxJR2hsYVdkb2RDQnBiaUJoYkd3Z1luSnZkM05sY25NdVhHNGdLaUF5TGlCUWNtVjJaVzUwSUdGa2FuVnpkRzFsYm5SeklHOW1JR1p2Ym5RZ2MybDZaU0JoWm5SbGNpQnZjbWxsYm5SaGRHbHZiaUJqYUdGdVoyVnpJR2x1SUdsUFV5NWNiaUFxTDF4dVhHNW9kRzFzSUh0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURFdU1UVTdJQzhxSURFZ0tpOWNiaUFnTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95QXZLaUF5SUNvdlhHNTlYRzVjYmk4cUlGTmxZM1JwYjI1elhHNGdJQ0E5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFNBcUwxeHVYRzR2S2lwY2JpQXFJRkpsYlc5MlpTQjBhR1VnYldGeVoybHVJR2x1SUdGc2JDQmljbTkzYzJWeWN5NWNiaUFxTDF4dVhHNWliMlI1SUh0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxibVJsY2lCMGFHVWdZRzFoYVc1Z0lHVnNaVzFsYm5RZ1kyOXVjMmx6ZEdWdWRHeDVJR2x1SUVsRkxseHVJQ292WEc1Y2JtMWhhVzRnZTF4dUlDQmthWE53YkdGNU9pQmliRzlqYXp0Y2JuMWNibHh1THlvcVhHNGdLaUJEYjNKeVpXTjBJSFJvWlNCbWIyNTBJSE5wZW1VZ1lXNWtJRzFoY21kcGJpQnZiaUJnYURGZ0lHVnNaVzFsYm5SeklIZHBkR2hwYmlCZ2MyVmpkR2x2Ym1BZ1lXNWtYRzRnS2lCZ1lYSjBhV05zWldBZ1kyOXVkR1Y0ZEhNZ2FXNGdRMmh5YjIxbExDQkdhWEpsWm05NExDQmhibVFnVTJGbVlYSnBMbHh1SUNvdlhHNWNibWd4SUh0Y2JpQWdabTl1ZEMxemFYcGxPaUF5WlcwN1hHNGdJRzFoY21kcGJqb2dNQzQyTjJWdElEQTdYRzU5WEc1Y2JpOHFJRWR5YjNWd2FXNW5JR052Ym5SbGJuUmNiaUFnSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOUlDb3ZYRzVjYmk4cUtseHVJQ29nTVM0Z1FXUmtJSFJvWlNCamIzSnlaV04wSUdKdmVDQnphWHBwYm1jZ2FXNGdSbWx5WldadmVDNWNiaUFxSURJdUlGTm9iM2NnZEdobElHOTJaWEptYkc5M0lHbHVJRVZrWjJVZ1lXNWtJRWxGTGx4dUlDb3ZYRzVjYm1oeUlIdGNiaUFnWW05NExYTnBlbWx1WnpvZ1kyOXVkR1Z1ZEMxaWIzZzdJQzhxSURFZ0tpOWNiaUFnYUdWcFoyaDBPaUF3T3lBdktpQXhJQ292WEc0Z0lHOTJaWEptYkc5M09pQjJhWE5wWW14bE95QXZLaUF5SUNvdlhHNTlYRzVjYmk4cUtseHVJQ29nTVM0Z1EyOXljbVZqZENCMGFHVWdhVzVvWlhKcGRHRnVZMlVnWVc1a0lITmpZV3hwYm1jZ2IyWWdabTl1ZENCemFYcGxJR2x1SUdGc2JDQmljbTkzYzJWeWN5NWNiaUFxSURJdUlFTnZjbkpsWTNRZ2RHaGxJRzlrWkNCZ1pXMWdJR1p2Ym5RZ2MybDZhVzVuSUdsdUlHRnNiQ0JpY205M2MyVnljeTVjYmlBcUwxeHVYRzV3Y21VZ2UxeHVJQ0JtYjI1MExXWmhiV2xzZVRvZ2JXOXViM053WVdObExDQnRiMjV2YzNCaFkyVTdJQzhxSURFZ0tpOWNiaUFnWm05dWRDMXphWHBsT2lBeFpXMDdJQzhxSURJZ0tpOWNibjFjYmx4dUx5b2dWR1Y0ZEMxc1pYWmxiQ0J6WlcxaGJuUnBZM05jYmlBZ0lEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlJQ292WEc1Y2JpOHFLbHh1SUNvZ1VtVnRiM1psSUhSb1pTQm5jbUY1SUdKaFkydG5jbTkxYm1RZ2IyNGdZV04wYVhabElHeHBibXR6SUdsdUlFbEZJREV3TGx4dUlDb3ZYRzVjYm1FZ2UxeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUIwY21GdWMzQmhjbVZ1ZER0Y2JuMWNibHh1THlvcVhHNGdLaUF4TGlCU1pXMXZkbVVnZEdobElHSnZkSFJ2YlNCaWIzSmtaWElnYVc0Z1EyaHliMjFsSURVM0xWeHVJQ29nTWk0Z1FXUmtJSFJvWlNCamIzSnlaV04wSUhSbGVIUWdaR1ZqYjNKaGRHbHZiaUJwYmlCRGFISnZiV1VzSUVWa1oyVXNJRWxGTENCUGNHVnlZU3dnWVc1a0lGTmhabUZ5YVM1Y2JpQXFMMXh1WEc1aFltSnlXM1JwZEd4bFhTQjdYRzRnSUdKdmNtUmxjaTFpYjNSMGIyMDZJRzV2Ym1VN0lDOHFJREVnS2k5Y2JpQWdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQjFibVJsY214cGJtVTdJQzhxSURJZ0tpOWNiaUFnZEdWNGRDMWtaV052Y21GMGFXOXVPaUIxYm1SbGNteHBibVVnWkc5MGRHVmtPeUF2S2lBeUlDb3ZYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FXUmtJSFJvWlNCamIzSnlaV04wSUdadmJuUWdkMlZwWjJoMElHbHVJRU5vY205dFpTd2dSV1JuWlN3Z1lXNWtJRk5oWm1GeWFTNWNiaUFxTDF4dVhHNWlMRnh1YzNSeWIyNW5JSHRjYmlBZ1ptOXVkQzEzWldsbmFIUTZJR0p2YkdSbGNqdGNibjFjYmx4dUx5b3FYRzRnS2lBeExpQkRiM0p5WldOMElIUm9aU0JwYm1obGNtbDBZVzVqWlNCaGJtUWdjMk5oYkdsdVp5QnZaaUJtYjI1MElITnBlbVVnYVc0Z1lXeHNJR0p5YjNkelpYSnpMbHh1SUNvZ01pNGdRMjl5Y21WamRDQjBhR1VnYjJSa0lHQmxiV0FnWm05dWRDQnphWHBwYm1jZ2FXNGdZV3hzSUdKeWIzZHpaWEp6TGx4dUlDb3ZYRzVjYm1OdlpHVXNYRzVyWW1Rc1hHNXpZVzF3SUh0Y2JpQWdabTl1ZEMxbVlXMXBiSGs2SUcxdmJtOXpjR0ZqWlN3Z2JXOXViM053WVdObE95QXZLaUF4SUNvdlhHNGdJR1p2Ym5RdGMybDZaVG9nTVdWdE95QXZLaUF5SUNvdlhHNTlYRzVjYmk4cUtseHVJQ29nUVdSa0lIUm9aU0JqYjNKeVpXTjBJR1p2Ym5RZ2MybDZaU0JwYmlCaGJHd2dZbkp2ZDNObGNuTXVYRzRnS2k5Y2JseHVjMjFoYkd3Z2UxeHVJQ0JtYjI1MExYTnBlbVU2SURnd0pUdGNibjFjYmx4dUx5b3FYRzRnS2lCUWNtVjJaVzUwSUdCemRXSmdJR0Z1WkNCZ2MzVndZQ0JsYkdWdFpXNTBjeUJtY205dElHRm1abVZqZEdsdVp5QjBhR1VnYkdsdVpTQm9aV2xuYUhRZ2FXNWNiaUFxSUdGc2JDQmljbTkzYzJWeWN5NWNiaUFxTDF4dVhHNXpkV0lzWEc1emRYQWdlMXh1SUNCbWIyNTBMWE5wZW1VNklEYzFKVHRjYmlBZ2JHbHVaUzFvWldsbmFIUTZJREE3WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnZG1WeWRHbGpZV3d0WVd4cFoyNDZJR0poYzJWc2FXNWxPMXh1ZlZ4dVhHNXpkV0lnZTF4dUlDQmliM1IwYjIwNklDMHdMakkxWlcwN1hHNTlYRzVjYm5OMWNDQjdYRzRnSUhSdmNEb2dMVEF1TldWdE8xeHVmVnh1WEc0dktpQkZiV0psWkdSbFpDQmpiMjUwWlc1MFhHNGdJQ0E5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFNBcUwxeHVYRzR2S2lwY2JpQXFJRkpsYlc5MlpTQjBhR1VnWW05eVpHVnlJRzl1SUdsdFlXZGxjeUJwYm5OcFpHVWdiR2x1YTNNZ2FXNGdTVVVnTVRBdVhHNGdLaTljYmx4dWFXMW5JSHRjYmlBZ1ltOXlaR1Z5TFhOMGVXeGxPaUJ1YjI1bE8xeHVmVnh1WEc0dktpQkdiM0p0YzF4dUlDQWdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDBnS2k5Y2JseHVMeW9xWEc0Z0tpQXhMaUJEYUdGdVoyVWdkR2hsSUdadmJuUWdjM1I1YkdWeklHbHVJR0ZzYkNCaWNtOTNjMlZ5Y3k1Y2JpQXFJREl1SUZKbGJXOTJaU0IwYUdVZ2JXRnlaMmx1SUdsdUlFWnBjbVZtYjNnZ1lXNWtJRk5oWm1GeWFTNWNiaUFxTDF4dVhHNWlkWFIwYjI0c1hHNXBibkIxZEN4Y2JtOXdkR2R5YjNWd0xGeHVjMlZzWldOMExGeHVkR1Y0ZEdGeVpXRWdlMXh1SUNCbWIyNTBMV1poYldsc2VUb2dhVzVvWlhKcGREc2dMeW9nTVNBcUwxeHVJQ0JtYjI1MExYTnBlbVU2SURFd01DVTdJQzhxSURFZ0tpOWNiaUFnYkdsdVpTMW9aV2xuYUhRNklERXVNVFU3SUM4cUlERWdLaTljYmlBZ2JXRnlaMmx1T2lBd095QXZLaUF5SUNvdlhHNTlYRzVjYmk4cUtseHVJQ29nVTJodmR5QjBhR1VnYjNabGNtWnNiM2NnYVc0Z1NVVXVYRzRnS2lBeExpQlRhRzkzSUhSb1pTQnZkbVZ5Wm14dmR5QnBiaUJGWkdkbExseHVJQ292WEc1Y2JtSjFkSFJ2Yml4Y2JtbHVjSFYwSUhzZ0x5b2dNU0FxTDF4dUlDQnZkbVZ5Wm14dmR6b2dkbWx6YVdKc1pUdGNibjFjYmx4dUx5b3FYRzRnS2lCU1pXMXZkbVVnZEdobElHbHVhR1Z5YVhSaGJtTmxJRzltSUhSbGVIUWdkSEpoYm5ObWIzSnRJR2x1SUVWa1oyVXNJRVpwY21WbWIzZ3NJR0Z1WkNCSlJTNWNiaUFxSURFdUlGSmxiVzkyWlNCMGFHVWdhVzVvWlhKcGRHRnVZMlVnYjJZZ2RHVjRkQ0IwY21GdWMyWnZjbTBnYVc0Z1JtbHlaV1p2ZUM1Y2JpQXFMMXh1WEc1aWRYUjBiMjRzWEc1elpXeGxZM1FnZXlBdktpQXhJQ292WEc0Z0lIUmxlSFF0ZEhKaGJuTm1iM0p0T2lCdWIyNWxPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnZjbkpsWTNRZ2RHaGxJR2x1WVdKcGJHbDBlU0IwYnlCemRIbHNaU0JqYkdsamEyRmliR1VnZEhsd1pYTWdhVzRnYVU5VElHRnVaQ0JUWVdaaGNta3VYRzRnS2k5Y2JseHVZblYwZEc5dUxGeHVXM1I1Y0dVOVhDSmlkWFIwYjI1Y0lsMHNYRzViZEhsd1pUMWNJbkpsYzJWMFhDSmRMRnh1VzNSNWNHVTlYQ0p6ZFdKdGFYUmNJbDBnZTF4dUlDQXRkMlZpYTJsMExXRndjR1ZoY21GdVkyVTZJR0oxZEhSdmJqdGNibjFjYmx4dUx5b3FYRzRnS2lCU1pXMXZkbVVnZEdobElHbHVibVZ5SUdKdmNtUmxjaUJoYm1RZ2NHRmtaR2x1WnlCcGJpQkdhWEpsWm05NExseHVJQ292WEc1Y2JtSjFkSFJ2YmpvNkxXMXZlaTFtYjJOMWN5MXBibTVsY2l4Y2JsdDBlWEJsUFZ3aVluVjBkRzl1WENKZE9qb3RiVzk2TFdadlkzVnpMV2x1Ym1WeUxGeHVXM1I1Y0dVOVhDSnlaWE5sZEZ3aVhUbzZMVzF2ZWkxbWIyTjFjeTFwYm01bGNpeGNibHQwZVhCbFBWd2ljM1ZpYldsMFhDSmRPam90Ylc5NkxXWnZZM1Z6TFdsdWJtVnlJSHRjYmlBZ1ltOXlaR1Z5TFhOMGVXeGxPaUJ1YjI1bE8xeHVJQ0J3WVdSa2FXNW5PaUF3TzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsYzNSdmNtVWdkR2hsSUdadlkzVnpJSE4wZVd4bGN5QjFibk5sZENCaWVTQjBhR1VnY0hKbGRtbHZkWE1nY25Wc1pTNWNiaUFxTDF4dVhHNWlkWFIwYjI0NkxXMXZlaTFtYjJOMWMzSnBibWNzWEc1YmRIbHdaVDFjSW1KMWRIUnZibHdpWFRvdGJXOTZMV1p2WTNWemNtbHVaeXhjYmx0MGVYQmxQVndpY21WelpYUmNJbDA2TFcxdmVpMW1iMk4xYzNKcGJtY3NYRzViZEhsd1pUMWNJbk4xWW0xcGRGd2lYVG90Ylc5NkxXWnZZM1Z6Y21sdVp5QjdYRzRnSUc5MWRHeHBibVU2SURGd2VDQmtiM1IwWldRZ1FuVjBkRzl1VkdWNGREdGNibjFjYmx4dUx5b3FYRzRnS2lCRGIzSnlaV04wSUhSb1pTQndZV1JrYVc1bklHbHVJRVpwY21WbWIzZ3VYRzRnS2k5Y2JseHVabWxsYkdSelpYUWdlMXh1SUNCd1lXUmthVzVuT2lBd0xqTTFaVzBnTUM0M05XVnRJREF1TmpJMVpXMDdYRzU5WEc1Y2JpOHFLbHh1SUNvZ01TNGdRMjl5Y21WamRDQjBhR1VnZEdWNGRDQjNjbUZ3Y0dsdVp5QnBiaUJGWkdkbElHRnVaQ0JKUlM1Y2JpQXFJREl1SUVOdmNuSmxZM1FnZEdobElHTnZiRzl5SUdsdWFHVnlhWFJoYm1ObElHWnliMjBnWUdacFpXeGtjMlYwWUNCbGJHVnRaVzUwY3lCcGJpQkpSUzVjYmlBcUlETXVJRkpsYlc5MlpTQjBhR1VnY0dGa1pHbHVaeUJ6YnlCa1pYWmxiRzl3WlhKeklHRnlaU0J1YjNRZ1kyRjFaMmgwSUc5MWRDQjNhR1Z1SUhSb1pYa2dlbVZ5YnlCdmRYUmNiaUFxSUNBZ0lHQm1hV1ZzWkhObGRHQWdaV3hsYldWdWRITWdhVzRnWVd4c0lHSnliM2R6WlhKekxseHVJQ292WEc1Y2JteGxaMlZ1WkNCN1hHNGdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN0lDOHFJREVnS2k5Y2JpQWdZMjlzYjNJNklHbHVhR1Z5YVhRN0lDOHFJRElnS2k5Y2JpQWdaR2x6Y0d4aGVUb2dkR0ZpYkdVN0lDOHFJREVnS2k5Y2JpQWdiV0Y0TFhkcFpIUm9PaUF4TURBbE95QXZLaUF4SUNvdlhHNGdJSEJoWkdScGJtYzZJREE3SUM4cUlETWdLaTljYmlBZ2QyaHBkR1V0YzNCaFkyVTZJRzV2Y20xaGJEc2dMeW9nTVNBcUwxeHVmVnh1WEc0dktpcGNiaUFxSUVGa1pDQjBhR1VnWTI5eWNtVmpkQ0IyWlhKMGFXTmhiQ0JoYkdsbmJtMWxiblFnYVc0Z1EyaHliMjFsTENCR2FYSmxabTk0TENCaGJtUWdUM0JsY21FdVhHNGdLaTljYmx4dWNISnZaM0psYzNNZ2UxeHVJQ0IyWlhKMGFXTmhiQzFoYkdsbmJqb2dZbUZ6Wld4cGJtVTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVnRiM1psSUhSb1pTQmtaV1poZFd4MElIWmxjblJwWTJGc0lITmpjbTlzYkdKaGNpQnBiaUJKUlNBeE1Dc3VYRzRnS2k5Y2JseHVkR1Y0ZEdGeVpXRWdlMXh1SUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjYm4xY2JseHVMeW9xWEc0Z0tpQXhMaUJCWkdRZ2RHaGxJR052Y25KbFkzUWdZbTk0SUhOcGVtbHVaeUJwYmlCSlJTQXhNQzVjYmlBcUlESXVJRkpsYlc5MlpTQjBhR1VnY0dGa1pHbHVaeUJwYmlCSlJTQXhNQzVjYmlBcUwxeHVYRzViZEhsd1pUMWNJbU5vWldOclltOTRYQ0pkTEZ4dVczUjVjR1U5WENKeVlXUnBiMXdpWFNCN1hHNGdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN0lDOHFJREVnS2k5Y2JpQWdjR0ZrWkdsdVp6b2dNRHNnTHlvZ01pQXFMMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnZjbkpsWTNRZ2RHaGxJR04xY25OdmNpQnpkSGxzWlNCdlppQnBibU55WlcxbGJuUWdZVzVrSUdSbFkzSmxiV1Z1ZENCaWRYUjBiMjV6SUdsdUlFTm9jbTl0WlM1Y2JpQXFMMXh1WEc1YmRIbHdaVDFjSW01MWJXSmxjbHdpWFRvNkxYZGxZbXRwZEMxcGJtNWxjaTF6Y0dsdUxXSjFkSFJ2Yml4Y2JsdDBlWEJsUFZ3aWJuVnRZbVZ5WENKZE9qb3RkMlZpYTJsMExXOTFkR1Z5TFhOd2FXNHRZblYwZEc5dUlIdGNiaUFnYUdWcFoyaDBPaUJoZFhSdk8xeHVmVnh1WEc0dktpcGNiaUFxSURFdUlFTnZjbkpsWTNRZ2RHaGxJRzlrWkNCaGNIQmxZWEpoYm1ObElHbHVJRU5vY205dFpTQmhibVFnVTJGbVlYSnBMbHh1SUNvZ01pNGdRMjl5Y21WamRDQjBhR1VnYjNWMGJHbHVaU0J6ZEhsc1pTQnBiaUJUWVdaaGNta3VYRzRnS2k5Y2JseHVXM1I1Y0dVOVhDSnpaV0Z5WTJoY0lsMGdlMXh1SUNBdGQyVmlhMmwwTFdGd2NHVmhjbUZ1WTJVNklIUmxlSFJtYVdWc1pEc2dMeW9nTVNBcUwxeHVJQ0J2ZFhSc2FXNWxMVzltWm5ObGREb2dMVEp3ZURzZ0x5b2dNaUFxTDF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsYlc5MlpTQjBhR1VnYVc1dVpYSWdjR0ZrWkdsdVp5QnBiaUJEYUhKdmJXVWdZVzVrSUZOaFptRnlhU0J2YmlCdFlXTlBVeTVjYmlBcUwxeHVYRzViZEhsd1pUMWNJbk5sWVhKamFGd2lYVG82TFhkbFltdHBkQzF6WldGeVkyZ3RaR1ZqYjNKaGRHbHZiaUI3WEc0Z0lDMTNaV0pyYVhRdFlYQndaV0Z5WVc1alpUb2dibTl1WlR0Y2JuMWNibHh1THlvcVhHNGdLaUF4TGlCRGIzSnlaV04wSUhSb1pTQnBibUZpYVd4cGRIa2dkRzhnYzNSNWJHVWdZMnhwWTJ0aFlteGxJSFI1Y0dWeklHbHVJR2xQVXlCaGJtUWdVMkZtWVhKcExseHVJQ29nTWk0Z1EyaGhibWRsSUdadmJuUWdjSEp2Y0dWeWRHbGxjeUIwYnlCZ2FXNW9aWEpwZEdBZ2FXNGdVMkZtWVhKcExseHVJQ292WEc1Y2JqbzZMWGRsWW10cGRDMW1hV3hsTFhWd2JHOWhaQzFpZFhSMGIyNGdlMXh1SUNBdGQyVmlhMmwwTFdGd2NHVmhjbUZ1WTJVNklHSjFkSFJ2YmpzZ0x5b2dNU0FxTDF4dUlDQm1iMjUwT2lCcGJtaGxjbWwwT3lBdktpQXlJQ292WEc1OVhHNWNiaThxSUVsdWRHVnlZV04wYVhabFhHNGdJQ0E5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFNBcUwxeHVYRzR2S2x4dUlDb2dRV1JrSUhSb1pTQmpiM0p5WldOMElHUnBjM0JzWVhrZ2FXNGdSV1JuWlN3Z1NVVWdNVEFyTENCaGJtUWdSbWx5WldadmVDNWNiaUFxTDF4dVhHNWtaWFJoYVd4eklIdGNiaUFnWkdsemNHeGhlVG9nWW14dlkyczdYRzU5WEc1Y2JpOHFYRzRnS2lCQlpHUWdkR2hsSUdOdmNuSmxZM1FnWkdsemNHeGhlU0JwYmlCaGJHd2dZbkp2ZDNObGNuTXVYRzRnS2k5Y2JseHVjM1Z0YldGeWVTQjdYRzRnSUdScGMzQnNZWGs2SUd4cGMzUXRhWFJsYlR0Y2JuMWNibHh1THlvZ1RXbHpZMXh1SUNBZ1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMGdLaTljYmx4dUx5b3FYRzRnS2lCQlpHUWdkR2hsSUdOdmNuSmxZM1FnWkdsemNHeGhlU0JwYmlCSlJTQXhNQ3N1WEc0Z0tpOWNibHh1ZEdWdGNHeGhkR1VnZTF4dUlDQmthWE53YkdGNU9pQnViMjVsTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUZrWkNCMGFHVWdZMjl5Y21WamRDQmthWE53YkdGNUlHbHVJRWxGSURFd0xseHVJQ292WEc1Y2JsdG9hV1JrWlc1ZElIdGNiaUFnWkdsemNHeGhlVG9nYm05dVpUdGNibjFjYmlJc0lrQnBiWEJ2Y25RZ0oyTnZiRzl5Y3ljN1hHNWNiaThxSUQwOVBUMDlJRUpoYzJVZ1BUMDlQVDBnS2k5Y2JtaDBiV3dzWEc1aWIyUjVJSHRjYmlBZ2FHVnBaMmgwT2lBeE1EQWxPMXh1SUNCaVlXTnJaM0p2ZFc1a09pQkFZbWRmWTI5c2IzSTdYRzRnSUdOdmJHOXlPaUJBY0hKcGJXRnllVjkwWlhoMFgyTnZiRzl5TzF4dUlDQm1iMjUwTFhOcGVtVTZJREUwY0hnN1hHNGdJR3hwYm1VdGFHVnBaMmgwT2lBeE5UQWxPMXh1SUNCbWIyNTBMV1poYldsc2VUb2dYQ0pOYVdOeWIzTnZablFnV1dGSVpXa2dWVWxjSWl3Z1FYSnBZV3dzSUhOaGJuTXRjMlZ5YVdZN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc1Y2JtRWdlMXh1SUNBbU9teHBibXNzWEc0Z0lDWTZkbWx6YVhSbFpDeGNiaUFnSmpwb2IzWmxjaUI3WEc0Z0lDQWdZMjlzYjNJNklFQnpkV05qWlhOelgyTnZiRzl5TzF4dUlDQWdJSFJsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlR0Y2JpQWdmVnh1WEc0Z0lDWTZhRzkyWlhJZ2UxeHVJQ0FnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nZFc1a1pYSnNhVzVsTzF4dUlDQjlYRzU5WEc1Y2JtTnZaR1VnZTF4dUlDQm1iMjUwTFdaaGJXbHNlVG9nWENKVGIzVnlZMlVnUTI5a1pTQlFjbTljSWl3Z1EyOXVjMjlzWVhNc0lFZGxiM0puYVdFc0lFMXZibUZqYnl3Z2JXOXViM053WVdObExDQkJjbWxoYkN3Z2MyRnVjeTF6WlhKcFpqdGNibjFjYmlJc0lpOHFJRDA5UFQwOUlGTmpjbTlzYkdKaGNpQTlQVDA5UFNBcUwxeHVPam90ZDJWaWEybDBMWE5qY205c2JHSmhjaUI3WEc0Z0lIZHBaSFJvT2lBM2NIZzdYRzRnSUdobGFXZG9kRG9nTjNCNE8xeHVJQ0F0ZDJWaWEybDBMV0p2Y21SbGNpMXlZV1JwZFhNNklEVndlRHRjYm4xY2JseHVPam90ZDJWaWEybDBMWE5qY205c2JHSmhjaTEwY21GamF5MXdhV1ZqWlNCN1hHNGdJQzEzWldKcmFYUXRZbTl5WkdWeUxYSmhaR2wxY3pvZ05YQjRPMXh1ZlZ4dVhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlMWFJvZFcxaU9uWmxjblJwWTJGc0lIdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nY21kaVlTZ3dMQ0F3TENBd0xDQXdMakkxS1R0Y2JpQWdMWGRsWW10cGRDMWliM0prWlhJdGNtRmthWFZ6T2lBMWNIZzdYRzU5WEc1Y2JqbzZMWGRsWW10cGRDMXpZM0p2Ykd4aVlYSXRkR2gxYldJNmFHOXlhWHB2Ym5SaGJDQjdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUhKblltRW9NQ3dnTUN3Z01Dd2dNQzR5TlNrN1hHNGdJQzEzWldKcmFYUXRZbTl5WkdWeUxYSmhaR2wxY3pvZ05YQjRPMXh1ZlZ4dVhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlPbWh2ZG1WeUlIdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nY21kaVlTZ3dMQ0F3TENBd0xDQXdMakUxS1R0Y2JuMWNibHh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2kxMGFIVnRZanBvYjNabGNpQjdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUhKblltRW9NQ3dnTUN3Z01Dd2dNQzR6TlNrN1hHNTlYRzRpTENKQWFXMXdiM0owSUNkamIyeHZjbk1uTzF4dVhHNHZLaUJNWVhsdmRYUWdLaTljYmk1a2IyTnpJSHRjYmlBZ1pHbHpjR3hoZVRvZ1pteGxlRHRjYmlBZ1pteGxlQzFrYVhKbFkzUnBiMjQ2SUhKdmR6dGNiaUFnWm14bGVDMTNjbUZ3T2lCdWIzZHlZWEE3WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnZWkxcGJtUmxlRG9nTVR0Y2JpQWdhR1ZwWjJoME9pQXhNREFsTzF4dUlDQjNhV1IwYURvZ01UQXdKVHRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dVhHNHZLaUJCYzJsa1pTQXFMMXh1TG1GemFXUmxJSHRjYmlBZ1pHbHpjR3hoZVRvZ1pteGxlRHRjYmlBZ1pteGxlQzF6YUhKcGJtczZJREE3WEc0Z0lHWnNaWGd0WkdseVpXTjBhVzl1T2lCamIyeDFiVzQ3WEc0Z0lHWnNaWGd0ZDNKaGNEb2dibTkzY21Gd08xeHVJQ0IzYVdSMGFEb2dNall3Y0hnN1hHNGdJRzFoY21kcGJqb2dNRHRjYmlBZ2FHVnBaMmgwT2lBeE1EQWxPMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCQWNISnBiV0Z5ZVY5MFpYaDBYMk52Ykc5eU8xeHVJQ0JqYjJ4dmNqb2dRR0p2Y21SbGNsOWpiMnh2Y2p0Y2JpQWdZbTk0TFhOb1lXUnZkem9nTUNBd0lEVndlQ0F5Y0hnZ1FHSnZjbVJsY2w5amIyeHZjanRjYmlBZ2IzWmxjbVpzYjNjNklHRjFkRzg3WEc1OVhHNWNiaThxSUUxaGFXNGdLaTljYmk1dFlXbHVJSHRjYmlBZ1pteGxlRG9nTVR0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0JvWldsbmFIUTZJREV3TUNVN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJRUIzYUdsMFpUdGNiaUFnYjNabGNtWnNiM2M2SUdGMWRHODdYRzU5WEc0aUxDSkFhVzF3YjNKMElDZGpiMnh2Y25Nbk8xeHVYRzR1WVhOcFpHVWdlMXh1SUNCbWIyNTBMV1poYldsc2VUb2dYQ0pUYjNWeVkyVWdRMjlrWlNCUWNtOWNJaXdnUTI5dWMyOXNZWE1zSUVkbGIzSm5hV0VzSUUxdmJtRmpieXdnYlc5dWIzTndZV05sTENCQmNtbGhiQ3dnYzJGdWN5MXpaWEpwWmp0Y2JseHVJQ0FtWDE5b1pXRmtaWElnZTF4dUlDQWdJRzFoY21kcGJqb2dNQ0JoZFhSdk8xeHVJQ0FnSUdac1pYZ3RjMmh5YVc1ck9pQXdPMXh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNGdJSDFjYmx4dUlDQW1YMTl1WVhZZ2UxeHVJQ0FnSUdac1pYZzZJREU3WEc0Z0lDQWdiM1psY21ac2IzYzZJR0YxZEc4N1hHNGdJSDFjYmx4dUlDQW1YMTlvTWlCN1hHNGdJQ0FnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUNBZ2FHVnBaMmgwT2lBMU5IQjRPMXh1SUNBZ0lHeHBibVV0YUdWcFoyaDBPaUExTkhCNE8xeHVJQ0FnSUdadmJuUXRjMmw2WlRvZ01qQndlRHRjYmlBZ0lDQm1iMjUwTFhkbGFXZG9kRG9nYm05eWJXRnNPMXh1SUNBZ0lHWnZiblF0Wm1GdGFXeDVPaUJIWlc5eVoybGhMQ0JEYjI1emIyeGhjeXdnUVhKcFlXd3NJSE5oYm5NdGMyVnlhV1k3WEc0Z0lDQWdkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPMXh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNGdJSDFjYmx4dUlDQW1YMTlvTXlCN1hHNGdJQ0FnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUNBZ2NHRmtaR2x1WnpvZ01DQXlNSEI0TzF4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVRad2VEdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQjlYRzVjYmlBZ0psOWZiR2x6ZENCN1hHNGdJQ0FnYldGeVoybHVPaUF3TzF4dUlDQWdJSEJoWkdScGJtYzZJREV3Y0hnZ01EdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQjlYRzVjYmlBZ0psOWZhWFJsYlNCN1hHNGdJQ0FnYUdWcFoyaDBPaUF6TW5CNE8xeHVJQ0FnSUd4cGJtVXRhR1ZwWjJoME9pQXpNbkI0TzF4dUlDQWdJSEJoWkdScGJtYzZJREFnTXpCd2VEdGNiaUFnSUNCamRYSnpiM0k2SUhCdmFXNTBaWEk3WEc0Z0lDQWdabTl1ZEMxemFYcGxPaUF4TTNCNE8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1Y2JpQWdJQ0FtTG1GamRHbDJaU3hjYmlBZ0lDQW1PbWh2ZG1WeUlIdGNiaUFnSUNBZ0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklFQnpaV052Ym1SaGNubGZkR1Y0ZEY5amIyeHZjanRjYmlBZ0lDQjlYRzVjYmlBZ0lDQW1MbUZqZEdsMlpTQjdYRzRnSUNBZ0lDQmliM0prWlhJdGJHVm1kRG9nTTNCNElITnZiR2xrSUVCM2FHbDBaVHRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0FtWDE5aGJtTm9iM0k2YkdsdWF5QjdYRzRnSUNBZ1kyOXNiM0k2SUVCaWIzSmtaWEpmWTI5c2IzSTdYRzRnSUNBZ2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPMXh1SUNCOVhHNWNiaUFnSmw5ZllXNWphRzl5T25acGMybDBaV1FnZTF4dUlDQWdJR052Ykc5eU9pQkFZbTl5WkdWeVgyTnZiRzl5TzF4dUlDQWdJSFJsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlR0Y2JpQWdmVnh1WEc0Z0lDWmZYMkZ1WTJodmNqcG9iM1psY2lCN1hHNGdJQ0FnWTI5c2IzSTZJRUJpYjNKa1pYSmZZMjlzYjNJN1hHNGdJQ0FnZEdWNGRDMWtaV052Y21GMGFXOXVPaUIxYm1SbGNteHBibVU3WEc0Z0lIMWNibjFjYmlJc0lrQnBiWEJ2Y25RZ0oyTnZiRzl5Y3ljN1hHNWNiaTV0WVdsdUlIdGNiaUFnSmw5ZmFHVmhaR1Z5TEZ4dUlDQW1YMTltYjI5MFpYSWdlMXh1SUNBZ0lHMWhjbWRwYmpvZ01DQmhkWFJ2TzF4dUlDQWdJSEJoWkdScGJtYzZJREZsYlR0Y2JpQWdJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WEc0Z0lDQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNiaUFnZlZ4dVhHNGdJQ1pmWDJneElIdGNiaUFnSUNCdFlYSm5hVzQ2SURBZ1lYVjBienRjYmlBZ0lDQndZV1JrYVc1bkxYUnZjRG9nTVdWdE8xeHVJQ0FnSUdadmJuUXRjMmw2WlRvZ05XVnRPMXh1SUNBZ0lHWnZiblF0ZDJWcFoyaDBPaUJ1YjNKdFlXdzdYRzRnSUNBZ2JHbHVaUzFvWldsbmFIUTZJREl1TUdWdE8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc0Z0lIMWNibHh1SUNBbVgxOXVZVzFsSUh0Y2JpQWdJQ0JqYjJ4dmNqb2dRSEJ5YVcxaGNubGZZMjlzYjNJN1hHNGdJQ0FnWm05dWRDMTNaV2xuYUhRNklHNXZjbTFoYkR0Y2JpQWdmVnh1WEc0Z0lDWmZYM1JoWjJ4cGJtVWdlMXh1SUNBZ0lHMWhjbWRwYmpvZ01XVnRJR0YxZEc4N1hHNGdJQ0FnYldGNExYZHBaSFJvT2lBMk5qQndlRHRjYmlBZ0lDQnNhVzVsTFdobGFXZG9kRG9nTVM0elpXMDdYRzRnSUNBZ1ptOXVkQzF6YVhwbE9pQXlaVzA3WEc0Z0lDQWdZMjlzYjNJNklFQm1iM1Z5ZEdoZmRHVjRkRjlqYjJ4dmNqdGNiaUFnSUNCbWIyNTBMWGRsYVdkb2REb2dNVEF3TzF4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzRnSUgxY2JseHVJQ0FtWDE5alpHNGdlMXh1SUNBZ0lHMWhjbWRwYmpvZ01tVnRJREE3WEc0Z0lDQWdjR0ZrWkdsdVp6b2dNbVZ0TzF4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVRad2VEdGNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0Y2JpQWdJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WEc0Z0lDQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dRR0puWDJOdmJHOXlPMXh1SUNBZ0lHSnZjbVJsY2kxMGIzQTZJREZ3ZUNCemIyeHBaQ0JBWW05eVpHVnlYMk52Ykc5eU8xeHVJQ0FnSUdKdmNtUmxjaTFpYjNSMGIyMDZJREZ3ZUNCemIyeHBaQ0JBWW05eVpHVnlYMk52Ykc5eU8xeHVJQ0FnSUdOdmJHOXlPaUJBZEdocGNtUmZkR1Y0ZEY5amIyeHZjanRjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVJQ0I5WEc1Y2JpQWdKbDlmWkc5M2JteHZZV1I3WEc0Z0lDQWdiV0Z5WjJsdU9pQXhaVzBnWVhWMGJ6dGNiaUFnSUNCM2FXUjBhRG9nTWpBd2NIZzdYRzRnSUNBZ2RHVjRkQzFoYkdsbmJqb2dZMlZ1ZEdWeU8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc0Z0lIMWNibHh1SUNBbVgxOWlkWFIwYjI0Z2UxeHVJQ0FnSUdScGMzQnNZWGs2SUdsdWJHbHVaUzFpYkc5amF6dGNiaUFnSUNCaWIzSmtaWEl0Y21Ga2FYVnpPaUEwY0hnN1hHNGdJQ0FnY0dGa1pHbHVaem9nTVRSd2VDQXlPWEI0TzF4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVRod2VEdGNiaUFnSUNCbWIyNTBMV1poYldsc2VUb2dYQ0pUYjNWeVkyVWdRMjlrWlNCUWNtOWNJaXdnUTI5dWMyOXNZWE1zSUVkbGIzSm5hV0VzSUUxdmJtRmpieXdnYlc5dWIzTndZV05sTENCQmNtbGhiQ3dnYzJGdWN5MXpaWEpwWmp0Y2JpQWdJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUJBYzNWalkyVnpjMTlqYjJ4dmNqdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dVhHNGdJQ0FnSmpwc2FXNXJMRnh1SUNBZ0lDWTZkbWx6YVhSbFpDeGNiaUFnSUNBbU9taHZkbVZ5SUh0Y2JpQWdJQ0FnSUdOdmJHOXlPaUJBZDJocGRHVTdYRzRnSUNBZ0lDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnSmw5ZlptOXZkR1Z5SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJREFnTTJWdE8xeHVJQ0FnSUdKdmNtUmxjaTEwYjNBNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4dUlDQjlYRzU5WEc0aUxDSkFhVzF3YjNKMElDZGpiMnh2Y25Nbk8xeHVYRzR1YzJWamRHbHZiaUI3WEc0Z0lHMWhjbWRwYmpvZ01XVnRJREE3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNWNiaUFnSmw5ZmFHVmhaR1Z5TEZ4dUlDQW1YMTlqYjI1MFpXNTBMRnh1SUNBbVgxOW1iMjkwWlhJZ2UxeHVJQ0FnSUcxaGNtZHBiam9nTUNBelpXMDdYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JpQWdmVnh1WEc0Z0lDWmZYM1JwZEd4bElIdGNiaUFnSUNCamIyeHZjam9nUUhSb2FYSmtYM1JsZUhSZlkyOXNiM0k3WEc0Z0lIMWNibHh1SUNBbVgxOW9NeUI3WEc0Z0lDQWdZMjlzYjNJNklFQndjbWx0WVhKNVgyTnZiRzl5TzF4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVM0ek5XVnRPMXh1SUNCOVhHNWNiaUFnSmw5ZmFEUWdlMXh1SUNBZ0lHWnZiblF0YzJsNlpUb2dNUzR4WlcwN1hHNGdJQ0FnWTI5c2IzSTZJRUIwYUdseVpGOTBaWGgwWDJOdmJHOXlPMXh1SUNCOVhHNWNiaUFnSmw5ZmFEVWdlMXh1SUNBZ0lHWnZiblF0YzJsNlpUb2dNV1Z0TzF4dUlDQWdJR052Ykc5eU9pQkFabTkxY25Sb1gzUmxlSFJmWTI5c2IzSTdYRzRnSUgxY2JseHVJQ0FtWDE5a2JDeGNiaUFnSmw5ZlpIUXNYRzRnSUNaZlgyUmtJSHRjYmlBZ0lDQnRZWEpuYVc0NklEQTdYRzRnSUNBZ2NHRmtaR2x1WnpvZ01EdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQjlYRzVjYmlBZ0psOWZaR3dnZTF4dUlDQWdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ0lDQjZMV2x1WkdWNE9pQXhPMXh1SUNCOVhHNWNiaUFnSmw5ZlpIUWdlMXh1SUNBZ0lHUnBjM0JzWVhrNmFXNXNhVzVsTFdKc2IyTnJPMXh1SUNCOVhHNWNiaUFnSmw5ZlpHUWdlMXh1SUNBZ0lHUnBjM0JzWVhrNmFXNXNhVzVsTFdKc2IyTnJPMXh1SUNBZ0lHTnZiRzl5T2lCQWMzVmpZMlZ6YzE5amIyeHZjanRjYmlBZ2ZWeHVYRzRnSUNaZlgzQnlaU0I3WEc0Z0lDQWdiV0Z5WjJsdU9pQXlaVzBnTUR0Y2JpQWdJQ0J3WVdSa2FXNW5PaUF4WlcwN1hHNGdJQ0FnWm05dWRDMXphWHBsT2lBeE5IQjRPMXh1SUNBZ0lHeHBibVV0YUdWcFoyaDBPaUF4TlRBbE8xeHVJQ0FnSUhSbGVIUXRZV3hwWjI0NklHeGxablE3WEc0Z0lDQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dRR0puWDJOdmJHOXlPMXh1SUNBZ0lHSnZjbVJsY2pvZ01YQjRJSE52Ykdsa0lFQmliM0prWlhKZlkyOXNiM0k3WEc0Z0lDQWdZbTl5WkdWeUxYSmhaR2wxY3pvZ05IQjRPMXh1SUNBZ0lHTnZiRzl5T2lCQWRHaHBjbVJmZEdWNGRGOWpiMnh2Y2p0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNiaUFnZlZ4dVhHNGdJQ1pmWDJOdlpHVWdlMXh1SUNBZ0lHUnBjM0JzWVhrNklHSnNiMk5yTzF4dUlDQWdJRzFoY21kcGJqb2dNQ0JoZFhSdk8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc0Z0lIMWNibHh1SUNBbVgxOW1iMjkwWlhJZ2UxeHVJQ0FnSUdKdmNtUmxjaTEwYjNBNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4dUlDQWdJRzFoY21kcGJpMTBiM0E2SURObGJUdGNiaUFnSUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCQVltZGZZMjlzYjNJN1hHNGdJQ0FnWTI5c2IzSTZJRUJtYjNWeWRHaGZkR1Y0ZEY5amIyeHZjanRjYmlBZ2ZWeHVmVnh1SWl3aVFHbHRjRzl5ZENBbkxpOWpiMnh2Y25Nbk8xeHVYRzR1WTJGelpTQjdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ1pHbHpjR3hoZVRvZ1ozSnBaRHRjYmlBZ1ozSnBaQzEwWlcxd2JHRjBaUzFqYjJ4MWJXNXpPaUJ5WlhCbFlYUW9NaXdnTVdaeUtUdGNiaUFnWjJGd09pQTBNSEI0TzF4dUlDQndZV1JrYVc1bk9pQXhaVzA3WEc0Z0lHSnZjbVJsY2kxMGIzQTZNWEI0SUhOdmJHbGtJRUJpYjNKa1pYSmZZMjlzYjNJN1hHNGdJR0p2Y21SbGNpMWliM1IwYjIwNk1YQjRJSE52Ykdsa0lFQmliM0prWlhKZlkyOXNiM0k3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNWNiaUFnSmpwaFpuUmxjaUI3WEc0Z0lDQWdZMjl1ZEdWdWREb2dKeWM3WEc0Z0lDQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNBZ0lIb3RhVzVrWlhnNklESTdYRzRnSUNBZ2RHOXdPaUF3TzF4dUlDQWdJR3hsWm5RNklEVXdKVHRjYmlBZ0lDQm9aV2xuYUhRNklERXdNQ1U3WEc0Z0lDQWdkMmxrZEdnNklEQTdYRzRnSUNBZ1ltOXlaR1Z5TFd4bFpuUTZJREZ3ZUNCemIyeHBaQ0JBWW05eVpHVnlYMk52Ykc5eU8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc0Z0lIMWNibHh1SUNBbVgxOXdjbVVzWEc0Z0lDWmZYM1JsZUhSaGNtVmhJSHRjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREV6Y0hnN1hHNGdJQ0FnYkdsdVpTMW9aV2xuYUhRNklERTFNQ1U3WEc0Z0lIMWNibHh1SUNBbVgxOXdjbVVzWEc0Z0lDWmZYMk52WkdVc1hHNGdJQ1pmWDNSbGVIUmhjbVZoSUh0Y2JpQWdJQ0JtYjI1MExXWmhiV2xzZVRvZ1hDSkRiM1Z5YVdWeUlFNWxkMXdpTENCRGIyNXpiMnhoY3l3Z1IyVnZjbWRwWVN3Z1FYSnBZV3dzSUhOaGJuTXRjMlZ5YVdZN1hHNGdJSDFjYmx4dUlDQW1YMTl3Y21VZ2UxeHVJQ0FnSUcxaGNtZHBiam9nTUR0Y2JpQWdJQ0J3WVdSa2FXNW5PaUF4WlcwN1hHNGdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUdKblgyTnZiRzl5TzF4dUlDQWdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdJQ0JpYjNKa1pYSXRjbUZrYVhWek9pQTBjSGc3WEc0Z0lDQWdZbTk0TFhOcGVtbHVaem9nWW05eVpHVnlMV0p2ZUR0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNiaUFnZlZ4dVhHNGdJQ1pmWDNSdmIyeGlZWElnZTF4dUlDQWdJRzFoY21kcGJqb2dNQ0JoZFhSdk8xeHVJQ0FnSUdobGFXZG9kRG9nTXpad2VEdGNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dNelp3ZUR0Y2JpQWdJQ0JtYjI1MExYTnBlbVU2SURFMGNIZzdYRzRnSUNBZ2NHRmtaR2x1WnpvZ01DQXhObkI0TzF4dUlDQWdJSFJsZUhRdFlXeHBaMjQ2SUhKcFoyaDBPMXh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNGdJSDFjYmx4dUlDQW1YMTloWTNScGIyNHNYRzRnSUNaZlgzSmxiVzkyWlNCN1hHNGdJQ0FnWTNWeWMyOXlPaUJ3YjJsdWRHVnlPMXh1SUNBZ0lHTnZiRzl5T2lCQWMzVmpZMlZ6YzE5amIyeHZjanRjYmlBZ0lDQjFjMlZ5TFhObGJHVmpkRG9nYm05dVpUdGNiaUFnZlZ4dVhHNGdJQ1pmWDJGamRHbHZiaUI3WEc0Z0lDQWdabTl1ZEMxemFYcGxPaUF4TTNCNE8xeHVJQ0FnSUhCaFpHUnBibWN0YkdWbWREb2dNVEJ3ZUR0Y2JseHVJQ0FnSUNZNlptbHljM1F0WTJocGJHUWdlMXh1SUNBZ0lDQWdjR0ZrWkdsdVp5MXNaV1owT2lBd08xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDWmZYM0psYlc5MlpTQjdYRzRnSUNBZ1pteHZZWFE2SUhKcFoyaDBPMXh1SUNCOVhHNWNiaUFnSmw5ZlkyOXVjMjlzWlNCN1hHNGdJQ0FnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUNBZ2FHVnBaMmgwT2lBeE9EQndlRHRjYmlBZ0lDQmliM0prWlhJNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzRnSUgxY2JseHVJQ0FtWDE5MFpYaDBZWEpsWVNCN1hHNGdJQ0FnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUNBZ2QybGtkR2c2SURFd01DVTdYRzRnSUNBZ2FHVnBaMmgwT2lBeE1EQWxPMXh1SUNBZ0lHSnZjbVJsY2pvZ2JtOXVaVHRjYmlBZ0lDQnZkWFJzYVc1bE9pQnViMjVsTzF4dUlDQWdJSEJoWkdScGJtYzZJREZsYlR0Y2JpQWdJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh1SUNCOVhHNWNiaUFnSmw5ZmJHbHpkQ3hjYmlBZ0psOWZhWFJsYlNCN1hHNGdJQ0FnYldGeVoybHVPaUF3TzF4dUlDQWdJSEJoWkdScGJtYzZJREE3WEc0Z0lDQWdiR2x6ZEMxemRIbHNaUzEwZVhCbE9pQnViMjVsTzF4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzRnSUgxY2JseHVJQ0FtWDE5c2FYTjBJSHRjYmlBZ0lDQm9aV2xuYUhRNklETTJNSEI0TzF4dUlDQWdJR0p2Y21SbGNpMTBiM0E2SURGd2VDQnpiMnhwWkNCQVltOXlaR1Z5WDJOdmJHOXlPMXh1SUNBZ0lHSnZjbVJsY2kxaWIzUjBiMjA2SURGd2VDQnpiMnhwWkNCQVltOXlaR1Z5WDJOdmJHOXlPMXh1SUNBZ0lHWnZiblF0YzJsNlpUb2dNVE53ZUR0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNiaUFnZlZ4dVhHNGdJQ1pmWDJsMFpXMGdlMXh1SUNBZ0lHaGxhV2RvZERvZ016WndlRHRjYmlBZ0lDQnNhVzVsTFdobGFXZG9kRG9nTXpad2VEdGNiaUFnSUNCamRYSnpiM0k2SUhCdmFXNTBaWEk3WEc0Z0lDQWdjR0ZrWkdsdVp6b2dNQ0F4Tm5CNE8xeHVYRzRnSUNBZ0pqcG9iM1psY2lCN1hHNGdJQ0FnSUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCQWFHOTJaWEpmWW1kZlkyOXNiM0k3WEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzRpTENKQWFXMXdiM0owSUNjdUwyTnZiRzl5Y3ljN1hHNWNiaTVpZFhSMGIyNXpJSHRjYmlBZ2NHOXphWFJwYjI0NklHWnBlR1ZrTzF4dUlDQjZMV2x1WkdWNE9pQXlPMXh1SUNCMGIzQTZJRFV3SlR0Y2JpQWdjbWxuYUhRNklERXljSGc3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnZDJsa2RHZzZJRFUyY0hnN1hHNGdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV1NndE5UQWxLVHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JseHVJQ0FtWDE5cGRHVnRJSHRjYmlBZ0lDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUNBZ2VpMXBibVJsZURvZ01UdGNiaUFnSUNCdFlYSm5hVzQ2SURFd2NIZzdYRzRnSUNBZ2QybGtkR2c2SURNMmNIZzdYRzRnSUNBZ2FHVnBaMmgwT2lBek5uQjRPMXh1SUNBZ0lHSnZjbVJsY2pvZ01YQjRJSE52Ykdsa0lFQmliM0prWlhKZlkyOXNiM0k3WEc0Z0lDQWdZbTl5WkdWeUxYSmhaR2wxY3pvZ05IQjRPMXh1SUNBZ0lHSnZlQzF6YUdGa2IzYzZJREFnTUNBMmNIZ2dRR0p2Y21SbGNsOWpiMnh2Y2p0Y2JpQWdJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCM2FHbDBaVHRjYmlBZ0lDQmpkWEp6YjNJNklIQnZhVzUwWlhJN1hHNGdJQ0FnZEdWNGRDMWhiR2xuYmpvZ1kyVnVkR1Z5TzF4dUlDQWdJR052Ykc5eU9pQkFabTkxY25Sb1gzUmxlSFJmWTI5c2IzSTdYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JseHVJQ0FnSUNZNmFHOTJaWElnZTF4dUlDQWdJQ0FnWTI5c2IzSTZJRUJ6ZFdOalpYTnpYMk52Ykc5eU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUNZdWFHbGtaU0I3WEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUJ1YjI1bE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDWmZYMkZ1WTJodmNpQjdYRzRnSUNBZ0pqcHNhVzVyTEZ4dUlDQWdJQ1k2ZG1semFYUmxaQ3hjYmlBZ0lDQW1PbWh2ZG1WeUlIdGNiaUFnSUNBZ0lHTnZiRzl5T2lCQVptOTFjblJvWDNSbGVIUmZZMjlzYjNJN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnSmpwb2IzWmxjaUI3WEc0Z0lDQWdJQ0JqYjJ4dmNqb2dRSE4xWTJObGMzTmZZMjlzYjNJN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0psOWZhV052YmlCN1hHNGdJQ0FnY0c5emFYUnBiMjQ2SUdGaWMyOXNkWFJsTzF4dUlDQWdJSG90YVc1a1pYZzZJREk3WEc0Z0lDQWdkRzl3T2lBMU1DVTdYRzRnSUNBZ2JHVm1kRG9nTlRBbE8xeHVJQ0FnSUhkcFpIUm9PaUF5TUhCNE8xeHVJQ0FnSUdobGFXZG9kRG9nTWpCd2VEdGNiaUFnSUNCMGNtRnVjMlp2Y20wNklIUnlZVzV6YkdGMFpTZ3ROVEFsTENBdE5UQWxLVHRjYmlBZ0lDQm1hV3hzT2lCamRYSnlaVzUwWTI5c2IzSTdYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JpQWdmVnh1ZlZ4dUlsMTkgKi9cbiJdLCJmaWxlIjoiY3NzL2RvY3MubWluLmNzcyJ9 */ diff --git a/docs/css/example.css b/docs/css/example.css index 55db275e..5e3c35de 100644 --- a/docs/css/example.css +++ b/docs/css/example.css @@ -996,4 +996,4 @@ code, display: none; } -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLzxpbnB1dCBjc3MgMj4iLCJzY3JvbGxiYXIubGVzcyIsInNlY3Rpb24ubGVzcyIsImNhc2UubGVzcyIsInBhZ2VyLmxlc3MiLCIuLi8uLi9zcmMvdGhlbWUvc2hhZG93Lmxlc3MiLCIuLi8uLi9zcmMvdGhlbWUvaWNvbnMubGVzcyIsIi4uLy4uL3NyYy90aGVtZS92YXJpYWJsZXMubGVzcyIsIi4uLy4uL3NyYy90aGVtZS9kcmF3ZXIubGVzcyIsIi4uLy4uL3NyYy90aGVtZS9hbmNob3JzLmxlc3MiLCIuLi8uLi9zcmMvdGhlbWUvY2hhcHRlcnMubGVzcyIsIi4uLy4uL3NyYy90aGVtZS9lbGxpcHNpcy5sZXNzIiwiLi4vLi4vc3JjL3RoZW1lL3Rvb2xiYXIubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILG1EQUFtRDtBQUNuRCw0QkFBNEI7QUFDNUIsMkJBQTJCO0FDUDNCO0VBQ0UsV0FBQTtFQUNBLFlBQUE7RUFDQSwyQkFBQTtDRFNEO0FDTkQ7RUFDRSwyQkFBQTtDRFFEO0FDTEQ7RUFDRSxzQ0FBQTtFQUNBLDJCQUFBO0NET0Q7QUNKRDtFQUNFLHNDQUFBO0VBQ0EsMkJBQUE7Q0RNRDtBQ0hEO0VBQ0Usc0NBQUE7Q0RLRDtBQ0ZEO0VBQ0Usc0NBQUE7Q0RJRDtBRTVCRDtFQUNFLGNBQUE7RUFDQSxpQkFBQTtDRjhCRDtBRTVCQzs7O0VBR0UsY0FBQTtFQUNBLGlCQUFBO0NGOEJIO0FFM0JDO0VBQ0UsWUFBQTtDRjZCSDtBRTFCQztFQUNFLGVBQUE7RUFDQSxrQkFBQTtDRjRCSDtBRXpCQztFQUNFLGlCQUFBO0VBQ0EsWUFBQTtDRjJCSDtBRXhCQztFQUNFLGVBQUE7RUFDQSxZQUFBO0NGMEJIO0FFdkJDOzs7RUFHRSxVQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0NGeUJIO0FFdEJDO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0NGd0JIO0FFckJDO0VBQ0Usc0JBQUE7Q0Z1Qkg7QUVwQkM7RUFDRSxzQkFB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QUE7Q1ptd0JQO0FZandCTzs7Ozs7Ozs7RUFDRSxZQUFBO0NaMHdCVDtBWXR3Qks7O0VBQ0UsMEJBQUE7Q1p5d0JQO0FZcHdCQzs7RUFFRSxVQUFBO0VBQ0Esb0NBQUE7VUFBQSw0QkFBQTtDWnN3Qkg7QVl6d0JDOztFQU1JLHNCQUFBO0NadXdCTDtBWW53QkM7RUFDRSxVQUFBO0NacXdCSDtBWW53Qkc7RUFDRSxXQUFBO0NacXdCTDtBWWp3QkM7RUFDRSxhQUFBO0NabXdCSDtBWWp3Qkc7RUFDRSxjQUFBO0NabXdCTDtBWS92QkM7O0VBRUUsb0NBQUE7VUFBQSw0QkFBQTtFQUNBLFlBQUE7Q1ppd0JIO0FZOXZCQztFQUNFLFNBQUE7RUFDQSxZQUFBO0NaZ3dCSDtBWTl2Qkc7RUFDRSxhQUFBO0NaZ3dCTDtBWTV2QkM7RUFDRSxTQUFBO0VBQ0EsV0FBQTtDWjh2Qkg7QVk1dkJHO0VBQ0UsWUFBQTtDWjh2Qkw7QVlydkJLOzs7O0VBQ0UsY0FBQTtDWjB2QlAiLCJmaWxlIjoiZXhhbXBsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHNoYWRvdy5sZXNzIC0g6Zi05b2x5qC35byP6K6+572uIG1peGlueCDlh73mlbBcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENyZWF0ZWQgQnk6IFlhb2hhaXhpYW9cbiAqIFVwZGF0ZTogMjAyMi4zLjIwXG4gKi9cbi8qID09PT09PT09PT0gY29sb3JzLnRoZW1lIC0g5Z+656GA6aKc6Imy5Y+Y6YeP6ZuG5ZCIID09PT09PT09PT0gKi9cbi8qID09PT09PSDpmLTlvbHmoLflvI/orr7nva7lh73mlbAgPT09PT09ICovXG4vKiA9PT09PSBTY3JvbGxiYXIgPT09PT0gKi9cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogN3B4O1xuICBoZWlnaHQ6IDdweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOnZlcnRpY2FsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zNSk7XG59XG4uc2VjdGlvbiB7XG4gIG1hcmdpbjogMWVtIDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9faGVhZGVyLFxuLnNlY3Rpb25fX2NvbnRlbnQsXG4uc2VjdGlvbl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIDNlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWN0aW9uX190aXRsZSB7XG4gIGNvbG9yOiAjNjY2O1xufVxuLnNlY3Rpb25fX2gzIHtcbiAgY29sb3I6ICMxZjhkZDY7XG4gIGZvbnQtc2l6ZTogMS4zNWVtO1xufVxuLnNlY3Rpb25fX2g0IHtcbiAgZm9udC1zaXplOiAxLjFlbTtcbiAgY29sb3I6ICM2NjY7XG59XG4uc2VjdGlvbl9faDUge1xuICBmb250LXNpemU6IDFlbTtcbiAgY29sb3I6ICM5OTk7XG59XG4uc2VjdGlvbl9fZGwsXG4uc2VjdGlvbl9fZHQsXG4uc2VjdGlvbl9fZGQge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fZGwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG59XG4uc2VjdGlvbl9fZHQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uc2VjdGlvbl9fZGQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLnNlY3Rpb25fX3ByZSB7XG4gIG1hcmdpbjogMmVtIDA7XG4gIHBhZGRpbmc6IDFlbTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTUwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjb2xvcjogIzY2NjtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uc2VjdGlvbl9fY29kZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDAgYXV0bztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5zZWN0aW9uX19mb290ZXIge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgbWFyZ2luLXRvcDogM2VtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBjb2xvcjogIzk5OTtcbn1cbi5jYXNlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICBnYXA6IDQwcHg7XG4gIHBhZGRpbmc6IDFlbTtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2U6YWZ0ZXIge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDUwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB3aWR0aDogMDtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX3ByZSxcbi5jYXNlX190ZXh0YXJlYSB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG59XG4uY2FzZV9fcHJlLFxuLmNhc2VfX2NvZGUsXG4uY2FzZV9fdGV4dGFyZWEge1xuICBmb250LWZhbWlseTogXCJDb3VyaWVyIE5ld1wiLCBDb25zb2xhcywgR2VvcmdpYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG4uY2FzZV9fcHJlIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5jYXNlX190b29sYmFyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogMzZweDtcbiAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgcGFkZGluZzogMCAxNnB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlX19hY3Rpb24sXG4uY2FzZV9fcmVtb3ZlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBjb2xvcjogIzA1ODk0MjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uY2FzZV9fYWN0aW9uIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG4uY2FzZV9fYWN0aW9uOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLmNhc2VfX3JlbW92ZSB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi5jYXNlX19jb25zb2xlIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogMTgwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY2FzZV9fdGV4dGFyZWEge1xuICBtYXJnaW46IDAgYXV0bztcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAxZW07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmNhc2VfX2xpc3QsXG4uY2FzZV9faXRlbSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX2xpc3Qge1xuICBoZWlnaHQ6IDM2MHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uY2FzZV9faXRlbSB7XG4gIGhlaWdodDogMzZweDtcbiAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZzogMCAxNnB4O1xufVxuLmNhc2VfX2l0ZW06aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGY5O1xufVxuLnBhcGVyIHtcbiAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgbWFyZ2luOiAyZW0gYXV0bztcbiAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gIHBhZGRpbmc6IDJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5wYXBlci5mbGV4IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnBhcGVyLmZsZXggLmFydGljbGUge1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5wYXBlci5mbGV4IC5hcnRpY2xlX19tYWluIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5wYXBlci5mbGV4IC5hcnRpY2xlX19hc2lkZSB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4uaGVhZGVyIHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgei1pbmRleDogMztcbiAgdG9wOiAwO1xuICBtYXJnaW46IDAgYXV0bztcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5oZWFkZXJfc3RpY2t5IHtcbiAgcGFkZGluZy1sZWZ0OiAyNjBweDtcbn1cbi5hcnRpY2xlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBhZGRpbmc6IDJlbSAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xufVxuLmFydGljbGVfX21haW4ge1xuICBmbGV4OiAxO1xuICBwYWRkaW5nOiAwIDJlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5hcnRpY2xlX19tYWluIC5zZWN0aW9uIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4uYXJ0aWNsZV9fbWFpbiAuc2VjdGlvbl9fY29udGVudCxcbi5hcnRpY2xlX19tYWluIC5zZWN0aW9uX19mb290ZXIsXG4uYXJ0aWNsZV9fbWFpbiAuc2VjdGlvbl9faGVhZGVyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4uYXJ0aWNsZV9fbWFpbiAuc2VjdGlvbl9faGVhZGVyLFxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2NvbnRlbnQge1xuICBtYXJnaW46IDA7XG59XG4uYXJ0aWNsZV9fYXNpZGUge1xuICBmbGV4LXNocmluazogMDtcbiAgd2lkdGg6IDI0MHB4O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG59XG4uYXJ0aWNsZV9fYXNpZGUubHRyIHtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RkZDtcbiAgYm9yZGVyLWxlZnQ6IG5vbmU7XG59XG4uYXJ0aWNsZV9fYXNpZGUgLm91dGxpbmUtY2hhcHRlcnMge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxucHJlLFxuLnNlY3Rpb25fX3ByZSB7XG4gIHBhZGRpbmc6IDJlbTtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuY29kZSxcbi5zZWN0aW9uX19jb2RlIHtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbn1cbi5mb290ZXIge1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RjZGZlNjtcbiAgcGFkZGluZzogM2VtIDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5mb290ZXIgYTpsaW5rLFxuLmZvb3RlciBhOnZpc2l0ZWQsXG4uZm9vdGVyIGE6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLmZvb3RlciBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG4udXRpbHMtYm9yZGVyLXJpZ2h0IHtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLyogPT09PT09PT09PSBpY29uLnRoZW1lIC0gc3ZnIOWbvuagh+eahOagt+W8jyA9PT09PT09PT09ICovXG4ub3V0bGluZS1pY29uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxZW07XG4gIGhlaWdodDogMWVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtaWNvbl9fc3ZnIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgZmlsbDogY3VycmVudGNvbG9yO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbjpyb290IHtcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcbn1cbi5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogLTE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX21vZGFsIHtcbiAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjE7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC40cztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9faGVhZGVyLFxuLm91dGxpbmUtZHJhd2VyX19tYWluLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9faGVhZGVyLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBmbGV4LXNocmluazogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUsXG4ub3V0bGluZS1kcmF3ZXJfX21haW4sXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIHBhZGRpbmc6IDAgMTZweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9faGVhZGVyLFxuLm91dGxpbmUtZHJhd2VyX190aXRsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogNTJweDtcbiAgbGluZS1oZWlnaHQ6IDUycHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW46IDAgMTZweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDEycHg7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBjb2xvcjogIzk5OTtcbiAgZm9udC1zaXplOiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19jbG9zZSAub3V0bGluZS1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlOmhvdmVyIHtcbiAgY29sb3I6ICM2NjY7XG59XG4ub3V0bGluZS1kcmF3ZXJfX21haW4ge1xuICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19vdmVybGF5IHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAwLjE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICB3aWR0aDogMjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21pbmkge1xuICB3aWR0aDogNDgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3NtYWxsLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9zbWFsbCB7XG4gIHdpZHRoOiA1NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIHdpZHRoOiA2ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICB3aWR0aDogNzIwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX2xhcmdlLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9sYXJnZSB7XG4gIHdpZHRoOiA5NjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTczMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTI5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC02OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yixcbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueSB7XG4gIGhlaWdodDogMjQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21pbmkge1xuICBoZWlnaHQ6IDMyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICBoZWlnaHQ6IDM2MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyIHtcbiAgaGVpZ2h0OiA0MDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICBoZWlnaHQ6IDQ0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICBoZWlnaHQ6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB0b3A6IGluaXRpYWw7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0ZW0pO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIHJpZ2h0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBsZWZ0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl90dGIge1xuICB0b3A6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGJvdHRvbTogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfcnRsLFxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xufVxuLm91dGxpbmUtZHJhd2VyX2Z1bGwge1xuICBwYWRkaW5nOiAwO1xufVxuLm91dGxpbmUtaGVhZGluZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xufVxuLm91dGxpbmUtaGVhZGluZzpob3ZlciAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0OmhvdmVyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0IC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgbGVmdDogLTFlbTtcbn1cbi8qKlxuICogZWxsaXBzaXMubGVzcyAtIOaWh+acrOecgeeVpSBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4xMVxuICovXG4vKiA9PT09PT0g5paH5pys55yB55Wl5Ye95pWwID09PT09PSAqL1xuLm91dGxpbmUtY2hhcHRlcnMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IHZhcigtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGgpO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSB7XG4gIG1hcmdpbjogMCAxNnB4O1xuICBoZWlnaHQ6IDQwcHg7XG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICBwYWRkaW5nOiAwIDE2cHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2xpc3QsXG4ub3V0bGluZS1jaGFwdGVyc19fc3ViamVjdCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19pdGVtIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19saXN0IHtcbiAgcGFkZGluZzogMC41ZW0gMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19zdWJqZWN0IHtcbiAgcGFkZGluZy1sZWZ0OiAxZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19faXRlbSB7XG4gIG1hcmdpbjogMDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19wbGFjZWhvbGRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAzMHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmOGY5O1xuICBib3JkZXItbGVmdDogMnB4IHNvbGlkICMwNTg5NDI7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAwIDEuNWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICM1NTU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fY29kZSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfYWN0aXZlLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtY2hhcHRlcnNfYWN0aXZlLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtY2hhcHRlcnNfYWN0aXZlLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5LFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xuICB0b3A6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSB7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIG1heC1oZWlnaHQ6IHZhcigtLW91dGxpbmUtc3RpY2t5LWhlaWdodCk7XG59XG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbWF4LWhlaWdodDogMTAwJTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2hpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19mb2xkZWQge1xuICB3aWR0aDogMDtcbn1cbi8qID09PT09PT09PT0gYnV0dG9ucy50aGVtZSAtIOaMiemSruWvvOiIquagt+W8jyA9PT09PT09PT09ICovXG4ub3V0bGluZS10b29sYmFyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgbWFyZ2luOiAwO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDEwcHg7XG4gIHdpZHRoOiAzNnB4O1xuICBoZWlnaHQ6IDM2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkY2RmZTY7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjNTU1O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG4gIGJvcmRlci1jb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgZmlsbDogY3VycmVudGNvbG9yO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA1ODk0MjtcbiAgYm9yZGVyLWNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcm91bmRlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDE4cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b24sXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIGNvbG9yOiAjOTk5O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluazpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZDpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQ6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXI6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b24sXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG4ub3V0bGluZS10b29sYmFyX3R0Yixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IHtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiAub3V0bGluZS10b29sYmFyX19idXR0b24sXG4ub3V0bGluZS10b29sYmFyX2J0dCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiB7XG4gIHRvcDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICB0b3A6IC01NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9idHQge1xuICBib3R0b206IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX2J0dC5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgYm90dG9tOiAtNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsLFxuLm91dGxpbmUtdG9vbGJhcl9sdHIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIHdpZHRoOiA1NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwge1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bC5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgcmlnaHQ6IC04NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9sdHIge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfbHRyLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBsZWZ0OiAtODZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9ydGwgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX2J0dCAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfbHRyIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiIsIi8qID09PT09IFNjcm9sbGJhciA9PT09PSAqL1xyXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcclxuICB3aWR0aDogN3B4O1xyXG4gIGhlaWdodDogN3B4O1xyXG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xyXG59XHJcblxyXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlIHtcclxuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcclxufVxyXG5cclxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcclxuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcclxufVxyXG5cclxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xyXG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xyXG59XHJcblxyXG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTUpO1xyXG59XHJcblxyXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xyXG59XHJcbiIsIkBpbXBvcnQgJ2NvbG9ycyc7XHJcblxyXG4uc2VjdGlvbiB7XHJcbiAgbWFyZ2luOiAxZW0gMDtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAmX19oZWFkZXIsXHJcbiAgJl9fY29udGVudCxcclxuICAmX19mb290ZXIge1xyXG4gICAgbWFyZ2luOiAwIDNlbTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX190aXRsZSB7XHJcbiAgICBjb2xvcjogQHRoaXJkX3RleHRfY29sb3I7XHJcbiAgfVxyXG5cclxuICAmX19oMyB7XHJcbiAgICBjb2xvcjogQHByaW1hcnlfY29sb3I7XHJcbiAgICBmb250LXNpemU6IDEuMzVlbTtcclxuICB9XHJcblxyXG4gICZfX2g0IHtcclxuICAgIGZvbnQtc2l6ZTogMS4xZW07XHJcbiAgICBjb2xvcjogQHRoaXJkX3RleHRfY29sb3I7XHJcbiAgfVxyXG5cclxuICAmX19oNSB7XHJcbiAgICBmb250LXNpemU6IDFlbTtcclxuICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XHJcbiAgfVxyXG5cclxuICAmX19kbCxcclxuICAmX19kdCxcclxuICAmX19kZCB7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX2RsIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHotaW5kZXg6IDE7XHJcbiAgfVxyXG5cclxuICAmX19kdCB7XHJcbiAgICBkaXNwbGF5OmlubGluZS1ibG9jaztcclxuICB9XHJcblxyXG4gICZfX2RkIHtcclxuICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrO1xyXG4gICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xyXG4gIH1cclxuXHJcbiAgJl9fcHJlIHtcclxuICAgIG1hcmdpbjogMmVtIDA7XHJcbiAgICBwYWRkaW5nOiAxZW07XHJcbiAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICBsaW5lLWhlaWdodDogMTUwJTtcclxuICAgIHRleHQtYWxpZ246IGxlZnQ7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmdfY29sb3I7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xyXG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xyXG4gICAgY29sb3I6IEB0aGlyZF90ZXh0X2NvbG9yO1xyXG4gICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgfVxyXG5cclxuICAmX19jb2RlIHtcclxuICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fZm9vdGVyIHtcclxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xyXG4gICAgbWFyZ2luLXRvcDogM2VtO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGJnX2NvbG9yO1xyXG4gICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuICB9XHJcbn1cclxuIiwiQGltcG9ydCAnLi9jb2xvcnMnO1xyXG5cclxuLmNhc2Uge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAxO1xyXG4gIGRpc3BsYXk6IGdyaWQ7XHJcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcclxuICBnYXA6IDQwcHg7XHJcbiAgcGFkZGluZzogMWVtO1xyXG4gIGJvcmRlci10b3A6MXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgYm9yZGVyLWJvdHRvbToxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAmOmFmdGVyIHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgei1pbmRleDogMjtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHdpZHRoOiAwO1xyXG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX3ByZSxcclxuICAmX190ZXh0YXJlYSB7XHJcbiAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICBsaW5lLWhlaWdodDogMTUwJTtcclxuICB9XHJcblxyXG4gICZfX3ByZSxcclxuICAmX19jb2RlLFxyXG4gICZfX3RleHRhcmVhIHtcclxuICAgIGZvbnQtZmFtaWx5OiBcIkNvdXJpZXIgTmV3XCIsIENvbnNvbGFzLCBHZW9yZ2lhLCBBcmlhbCwgc2Fucy1zZXJpZjtcclxuICB9XHJcblxyXG4gICZfX3ByZSB7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAxZW07XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmdfY29sb3I7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgfVxyXG5cclxuICAmX190b29sYmFyIHtcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG4gICAgaGVpZ2h0OiAzNnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XHJcbiAgICBmb250LXNpemU6IDE0cHg7XHJcbiAgICBwYWRkaW5nOiAwIDE2cHg7XHJcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19hY3Rpb24sXHJcbiAgJl9fcmVtb3ZlIHtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG4gIH1cclxuXHJcbiAgJl9fYWN0aW9uIHtcclxuICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgIHBhZGRpbmctbGVmdDogMTBweDtcclxuXHJcbiAgICAmOmZpcnN0LWNoaWxkIHtcclxuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9fcmVtb3ZlIHtcclxuICAgIGZsb2F0OiByaWdodDtcclxuICB9XHJcblxyXG4gICZfX2NvbnNvbGUge1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBoZWlnaHQ6IDE4MHB4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX190ZXh0YXJlYSB7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIHBhZGRpbmc6IDFlbTtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBvdmVyZmxvdzogYXV0bztcclxuICB9XHJcblxyXG4gICZfX2xpc3QsXHJcbiAgJl9faXRlbSB7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX2xpc3Qge1xyXG4gICAgaGVpZ2h0OiAzNjBweDtcclxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICBvdmVyZmxvdzogYXV0bztcclxuICB9XHJcblxyXG4gICZfX2l0ZW0ge1xyXG4gICAgaGVpZ2h0OiAzNnB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICBwYWRkaW5nOiAwIDE2cHg7XHJcblxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IEBob3Zlcl9iZ19jb2xvcjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLnBhcGVyIHtcclxuICAuc2hhZG93X2xpZ2h0X3JlZ3VsYXIoKTtcclxuICBtYXJnaW46IDJlbSBhdXRvO1xyXG4gIG1heC13aWR0aDogMTIwMHB4O1xyXG4gIHBhZGRpbmc6IDJlbTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2hpdGU7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHJcbiAgJi5mbGV4IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgIC5hcnRpY2xlIHtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblxyXG4gICAgICAmX19tYWluIHtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBvdmVyZmxvdzogYXV0bztcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9fYXNpZGUge1xyXG4gICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmhlYWRlciB7XHJcbiAgcG9zaXRpb246IHN0aWNreTtcclxuICB6LWluZGV4OiAzO1xyXG4gIHRvcDogMDtcclxuICBtYXJnaW46IDAgYXV0bztcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2hpdGU7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgJl9zdGlja3kge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAyNjBweDtcclxuICB9XHJcbn1cclxuXHJcbi5hcnRpY2xlIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgcGFkZGluZzogMmVtIDA7XHJcbiAgZm9udC1zaXplOiAxNnB4O1xyXG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xyXG5cclxuICAmX19tYWluIHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBwYWRkaW5nOiAwIDJlbTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICAgLnNlY3Rpb24ge1xyXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTtcclxuXHJcbiAgICAgICZfX2NvbnRlbnQsXHJcbiAgICAgICZfX2Zvb3RlcixcclxuICAgICAgJl9faGVhZGVyIHtcclxuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9faGVhZGVyLFxyXG4gICAgICAmX19jb250ZW50IHtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfX2FzaWRlIHtcclxuICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gICAgd2lkdGg6IDI0MHB4O1xyXG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xyXG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcclxuXHJcbiAgICAmLmx0ciB7XHJcbiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgIC5vdXRsaW5lLWNoYXB0ZXJzIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxucHJlLFxyXG4uc2VjdGlvbl9fcHJlIHtcclxuICBwYWRkaW5nOiAyZW07XHJcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQGJnX2NvbG9yO1xyXG4gIG92ZXJmbG93OiBhdXRvO1xyXG59XHJcblxyXG5jb2RlLFxyXG4uc2VjdGlvbl9fY29kZSB7XHJcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XHJcbiAgZm9udC1zaXplOiAxNnB4O1xyXG59XHJcblxyXG4uZm9vdGVyIHtcclxuICBib3JkZXItdG9wOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG4gIHBhZGRpbmc6IDNlbSAwO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHJcbiAgYSB7XHJcbiAgICAmOmxpbmssXHJcbiAgICAmOnZpc2l0ZWQsXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLnV0aWxzLWJvcmRlci1yaWdodCB7XHJcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG59XHJcblxyXG4uaGlkZGVuIHtcclxuICBkaXNwbGF5OiBub25lO1xyXG59XHJcbiIsIi8qKlxyXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xyXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxyXG4gKi9cclxuQGltcG9ydCAnLi9jb2xvcnMnO1xyXG5cclxuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cclxuLnNoYWRvdyhAb2Zmc2V0OiAwIDAgNnB4IDFweCwgQGNvbG9yOiBAcHJpbWFyeV9ib3JkZXJfY29sb3IpIHtcclxuICBib3gtc2hhZG93OiBAb2Zmc2V0IEBjb2xvcjtcclxufVxyXG5cclxuLnNoYWRvd19yZWd1bGFyKEBjb2xvcjogQHByaW1hcnlfYm9yZGVyX2NvbG9yKSB7XHJcbiAgLnNoYWRvdygwIDAgNnB4IDFweCwgQGNvbG9yKTtcclxufVxyXG5cclxuLnNoYWRvd19sYXJnZShAY29sb3I6IEBwcmltYXJ5X2JvcmRlcl9jb2xvcikge1xyXG4gIC5zaGFkb3coMCAwIDEycHggMXB4LCBAY29sb3IpO1xyXG59XHJcblxyXG4uc2hhZG93X2xpZ2h0X3JlZ3VsYXIoKSB7XHJcbiAgLnNoYWRvd19yZWd1bGFyKCk7XHJcbn1cclxuXHJcbi5zaGFkb3dfbGlnaHRfbGFyZ2UoKSB7XHJcbiAgLnNoYWRvd19sYXJnZSgpO1xyXG59XHJcblxyXG4uc2hhZG93X2RhcmtfcmVndWxhcigpIHtcclxuICAuc2hhZG93X3JlZ3VsYXIoQHNlY29uZGFyeV9ib3JkZXJfY29sb3IpO1xyXG59XHJcblxyXG4uc2hhZG93X2RhcmtfbGFyZ2UoKSB7XHJcbiAgLnNoYWRvd19sYXJnZShAc2Vjb25kYXJ5X2JvcmRlcl9jb2xvcik7XHJcbn1cclxuIiwiLyogPT09PT09PT09PSBpY29uLnRoZW1lIC0gc3ZnIOWbvuagh+eahOagt+W8jyA9PT09PT09PT09ICovXHJcbi5vdXRsaW5lLWljb24ge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAxO1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gIHdpZHRoOiAxZW07XHJcbiAgaGVpZ2h0OiAxZW07XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgJl9fc3ZnIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIHdpZHRoOiAxZW07XHJcbiAgICBoZWlnaHQ6IDFlbTtcclxuICAgIGZpbGw6IGN1cnJlbnRjb2xvcjtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcbn1cclxuIiwiOnJvb3Qge1xyXG4gIC0tb3V0bGluZS16SW5kZXg6IDIwMDA7XHJcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XHJcbiAgLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoOiAxMDAlO1xyXG59XHJcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcclxuQGltcG9ydCAnLi9jb2xvcnMnO1xyXG5AaW1wb3J0ICcuL3NoYWRvdyc7XHJcblxyXG4ub3V0bGluZS1kcmF3ZXIge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAtMTtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMDtcclxuICBtYXJnaW46IDA7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICZfX21vZGFsIHtcclxuICAgIC5zaGFkb3dfbGlnaHRfcmVndWxhcigpO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDIxO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xyXG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC40cztcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19oZWFkZXIsXHJcbiAgJl9fbWFpbixcclxuICAmX19mb290ZXIge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gIH1cclxuXHJcbiAgJl9faGVhZGVyLFxyXG4gICZfX2Zvb3RlciB7XHJcbiAgICBmbGV4LXNocmluazogMDtcclxuICB9XHJcblxyXG4gICZfX3RpdGxlLFxyXG4gICZfX21haW4sXHJcbiAgJl9fZm9vdGVyIHtcclxuICAgIHBhZGRpbmc6IDAgMTZweDtcclxuICB9XHJcblxyXG4gICZfX2hlYWRlcixcclxuICAmX190aXRsZSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiAxO1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBoZWlnaHQ6IDUycHg7XHJcbiAgICBsaW5lLWhlaWdodDogNTJweDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX190aXRsZSB7XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgbWFyZ2luOiAwIDE2cHg7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcclxuICB9XHJcblxyXG4gICZfX2Nsb3NlIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAxMnB4O1xyXG4gICAgd2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICBsaW5lLWhlaWdodDogMjBweDtcclxuICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XHJcbiAgICBmb250LXNpemU6IDIwcHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgIC5vdXRsaW5lLWljb24ge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHotaW5kZXg6IDI7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgbGVmdDogMDtcclxuICAgIH1cclxuXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgY29sb3I6IEB0aGlyZF90ZXh0X2NvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9fbWFpbiB7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgfVxyXG5cclxuICAmX19mb290ZXIge1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19vdmVybGF5IHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcclxuICAgIG9wYWNpdHk6IDAuMTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX3J0bCxcclxuICAmX2x0ciB7XHJcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgJl90aW55IHtcclxuICAgICAgICB3aWR0aDogMjgwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgd2lkdGg6IDQ4MHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3NtYWxsIHtcclxuICAgICAgICB3aWR0aDogNTQwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfcmVndWxhciB7XHJcbiAgICAgICAgd2lkdGg6IDY4MHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgd2lkdGg6IDcyMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2xhcmdlIHtcclxuICAgICAgICB3aWR0aDogOTYwcHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfcnRsIHtcclxuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG5cclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAmX3Rpbnkge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHJpZ2h0OiAtMjkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21pbmkge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHJpZ2h0OiAtNDkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3NtYWxsIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICByaWdodDogLTU1MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9yZWd1bGFyIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICByaWdodDogLTY5MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9tZWRpdW0ge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHJpZ2h0OiAtNzMwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2xhcmdlIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICByaWdodDogLTk3MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9sdHIge1xyXG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG5cclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAmX3Rpbnkge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIGxlZnQ6IC0yOTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgbGVmdDogLTQ5MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9zbWFsbCB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgbGVmdDogLTU1MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9yZWd1bGFyIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICBsZWZ0OiAtNjkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgbGVmdDogLTczMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9sYXJnZSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgbGVmdDogLTk3MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl90dGIsXHJcbiAgJl9idHQge1xyXG4gICAgbGVmdDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG5cclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAmX3Rpbnkge1xyXG4gICAgICAgIGhlaWdodDogMjQwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgaGVpZ2h0OiAzMjBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9zbWFsbCB7XHJcbiAgICAgICAgaGVpZ2h0OiAzNjBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9yZWd1bGFyIHtcclxuICAgICAgICBoZWlnaHQ6IDQwMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgaGVpZ2h0OiA0NDBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9sYXJnZSB7XHJcbiAgICAgICAgaGVpZ2h0OiA0ODBweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl90dGIge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcclxuXHJcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgJl90aW55IHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICB0b3A6IC0yNTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgdG9wOiAtMzMwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3NtYWxsIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICB0b3A6IC0zNzBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfcmVndWxhciB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgdG9wOiAtNDEwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgdG9wOiAtNDUwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2xhcmdlIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICB0b3A6IC00OTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfYnR0IHtcclxuICAgIHRvcDogaW5pdGlhbDtcclxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XHJcblxyXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XHJcbiAgICAgICZfdGlueSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgYm90dG9tOiAtMjUwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21pbmkge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIGJvdHRvbTogLTMzMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9zbWFsbCB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgYm90dG9tOiAtMzcwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3JlZ3VsYXIge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIGJvdHRvbTogLTQxMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9tZWRpdW0ge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIGJvdHRvbTogLTQ1MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9sYXJnZSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgYm90dG9tOiAtNDkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX29wZW5lZCB7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gICAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xyXG5cclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcblxyXG4gICAgICAmX3J0bCB7XHJcbiAgICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbHRyIHtcclxuICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3R0YiB7XHJcbiAgICAgICAgdG9wOiAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2J0dCB7XHJcbiAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX29mZnNldCB7XHJcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgJl9ydGwsXHJcbiAgICAgICZfbHRyIHtcclxuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XHJcbiAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3R0YixcclxuICAgICAgJl9idHQge1xyXG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0ZW0pO1xyXG4gICAgICAgIGxlZnQ6IDUwJTtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfb3BlbmVkIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgICAgICZfcnRsIHtcclxuICAgICAgICAgICAgcmlnaHQ6IDJlbTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAmX2x0ciB7XHJcbiAgICAgICAgICAgIGxlZnQ6IDJlbTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAmX3R0YiB7XHJcbiAgICAgICAgICAgIHRvcDogMmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICZfYnR0IHtcclxuICAgICAgICAgICAgYm90dG9tOiAyZW07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX2F1dG8ge1xyXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XHJcbiAgICAgICZfcnRsLFxyXG4gICAgICAmX2x0ciB7XHJcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfZnVsbCB7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gIH1cclxufVxyXG4iLCJAaW1wb3J0ICcuL2NvbG9ycyc7XHJcblxyXG4ub3V0bGluZS1oZWFkaW5nIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgei1pbmRleDogMTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAmX19hbmNob3Ige1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuXHJcbiAgICAmOmxpbmssXHJcbiAgICAmOnZpc2l0ZWQsXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQHByaW1hcnlfY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmOmhvdmVyIHtcclxuICAgIC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfc3RhcnQge1xyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgei1pbmRleDogMjtcclxuICAgICAgdG9wOiA1MCU7XHJcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICAgICAgbGVmdDogLTFlbTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xyXG5AaW1wb3J0ICcuL2NvbG9ycyc7XHJcbkBpbXBvcnQgJy4vZWxsaXBzaXMnO1xyXG5cclxuLm91dGxpbmUtY2hhcHRlcnMge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAxO1xyXG4gIG1hcmdpbjogMDtcclxuICB3aWR0aDogdmFyKC0tb3V0bGluZS1jaGFwdGVycy13aWR0aCk7XHJcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcclxuICBvdmVyZmxvdzogYXV0bztcclxuXHJcbiAgJl9fdGl0bGUge1xyXG4gICAgbWFyZ2luOiAwIDE2cHg7XHJcbiAgICBoZWlnaHQ6IDQwcHg7XHJcbiAgICBsaW5lLWhlaWdodDogNDBweDtcclxuICAgIHBhZGRpbmc6IDAgMTZweDtcclxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX21haW4ge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19saXN0LFxyXG4gICZfX3N1YmplY3QsXHJcbiAgJl9faXRlbSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiAyO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19saXN0IHtcclxuICAgIHBhZGRpbmc6IDAuNWVtIDA7XHJcbiAgfVxyXG5cclxuICAmX19zdWJqZWN0IHtcclxuICAgIHBhZGRpbmctbGVmdDogMWVtO1xyXG4gIH1cclxuXHJcbiAgJl9faXRlbSB7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBsaW5lLWhlaWdodDogMzBweDtcclxuICAgIGZvbnQtc2l6ZTogMTNweDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19wbGFjZWhvbGRlciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB6LWluZGV4OiAxO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAzMHB4O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGhvdmVyX2JnX2NvbG9yO1xyXG4gICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBAc3VjY2Vzc19jb2xvcjtcclxuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX2FuY2hvciB7XHJcbiAgICAuZWxsaXBzaXMoMSk7XHJcbiAgICBkaXNwbGF5OiBibG9jaztcclxuICAgIHBhZGRpbmc6IDAgMS41ZW07XHJcblxyXG4gICAgJjpsaW5rLFxyXG4gICAgJjp2aXNpdGVkLFxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgICAgY29sb3I6IEBzZWNvbmRhcnlfdGV4dF9jb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9fY29kZSB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcclxuICB9XHJcblxyXG4gICZfYWN0aXZlIHtcclxuICAgICYub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yIHtcclxuICAgICAgJjpsaW5rLFxyXG4gICAgICAmOnZpc2l0ZWQsXHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuICAgICAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3N0aWNreSxcclxuICAmX2ZpeGVkIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgIC5vdXRsaW5lLWNoYXB0ZXJzIHtcclxuICAgICAgJl9fdGl0bGUsXHJcbiAgICAgICZfX21haW4ge1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfX3RpdGxlIHtcclxuICAgICAgICBmbGV4LXNocmluazogMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9fbWFpbiB7XHJcbiAgICAgICAgZmxleDogMTtcclxuICAgICAgICBvdmVyZmxvdzogYXV0bztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9zdGlja3kge1xyXG4gICAgcG9zaXRpb246IHN0aWNreTtcclxuICAgIG1heC1oZWlnaHQ6IHZhcigtLW91dGxpbmUtc3RpY2t5LWhlaWdodCk7XHJcbiAgfVxyXG5cclxuICAmX2ZpeGVkIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XHJcbiAgfVxyXG5cclxuICAmX2hpZGRlbiB7XHJcbiAgICBkaXNwbGF5OiBub25lO1xyXG4gIH1cclxuXHJcbiAgJl9mb2xkZWQge1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgfVxyXG59XHJcbiIsIi8qKlxuICogZWxsaXBzaXMubGVzcyAtIOaWh+acrOecgeeVpSBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4xMVxuICovXG5cbi8qID09PT09PSDmlofmnKznnIHnlaXlh73mlbAgPT09PT09ICovXG4uZWxsaXBzaXMgKEBsaW5lcykgd2hlbiAoQGxpbmVzPTEpIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5lbGxpcHNpcyAoQGxpbmVzKSB3aGVuIChAbGluZXM+PTIpIHtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiBAbGluZXM7XG4gIGRpc3BsYXk6IGJveDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4iLCIvKiA9PT09PT09PT09IGJ1dHRvbnMudGhlbWUgLSDmjInpkq7lr7zoiKrmoLflvI8gPT09PT09PT09PSAqL1xyXG5AaW1wb3J0ICcuL2NvbG9ycyc7XHJcbkBpbXBvcnQgJy4vc2hhZG93JztcclxuXHJcbi5vdXRsaW5lLXRvb2xiYXIge1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICB6LWluZGV4OiA5OTk5OTtcclxuICBtYXJnaW46IDA7XHJcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAmX19idXR0b24ge1xyXG4gICAgLnNoYWRvd19saWdodF9yZWd1bGFyKCk7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiAxO1xyXG4gICAgbWFyZ2luOiAxMHB4O1xyXG4gICAgd2lkdGg6IDM2cHg7XHJcbiAgICBoZWlnaHQ6IDM2cHg7XHJcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XHJcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xyXG4gICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgY29sb3I6IEBzZWNvbmRhcnlfdGV4dF9jb2xvcjtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuICAgICAgYm9yZGVyLWNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICAmLmhpZGUge1xyXG4gICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9fYW5jaG9yIHtcclxuICAgICY6bGluayxcclxuICAgICY6dmlzaXRlZCxcclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xyXG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICB9XHJcblxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfX2ljb24ge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgei1pbmRleDogMjtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgd2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxuICAgIGZpbGw6IGN1cnJlbnRjb2xvcjtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX2FjdGl2ZSB7XHJcbiAgICAmLm91dGxpbmUtdG9vbGJhciB7XHJcbiAgICAgICZfX2J1dHRvbiB7XHJcbiAgICAgICAgY29sb3I6IEB3aGl0ZTtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuICAgICAgICBib3JkZXItY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xyXG5cclxuICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgIGNvbG9yOiBAd2hpdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yIHtcclxuICAgICAgJjpsaW5rLFxyXG4gICAgICAmOnZpc2l0ZWQsXHJcbiAgICAgICY6aG92ZXIge1xyXG4gICAgICAgIGNvbG9yOiBAd2hpdGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfcm91bmRlZCB7XHJcbiAgICAmLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMThweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfZGlzYWJsZWQge1xyXG4gICAgJi5vdXRsaW5lLXRvb2xiYXIsXHJcbiAgICAub3V0bGluZS10b29sYmFyIHtcclxuICAgICAgJl9fYW5jaG9yOmxpbmssXHJcbiAgICAgICZfX2FuY2hvcjp2aXNpdGVkLFxyXG4gICAgICAmX19hbmNob3I6aG92ZXIsXHJcbiAgICAgICZfX2J1dHRvbiB7XHJcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcclxuICAgICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xyXG5cclxuICAgICAgICAmOmhvdmVyIHtcclxuICAgICAgICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX19idXR0b24ge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBkaXNhYmxlZF9iZ19jb2xvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl90dGIsXHJcbiAgJl9idHQge1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xyXG5cclxuICAgIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XHJcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfdHRiIHtcclxuICAgIHRvcDogMTJweDtcclxuXHJcbiAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xyXG4gICAgICB0b3A6IC01NnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9idHQge1xyXG4gICAgYm90dG9tOiAxMnB4O1xyXG5cclxuICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XHJcbiAgICAgIGJvdHRvbTogLTU2cHg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3J0bCxcclxuICAmX2x0ciB7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICB3aWR0aDogNTZweDtcclxuICB9XHJcblxyXG4gICZfcnRsIHtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgcmlnaHQ6IDEycHg7XHJcblxyXG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcclxuICAgICAgcmlnaHQ6IC04NnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9sdHIge1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICBsZWZ0OiAxMnB4O1xyXG5cclxuICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XHJcbiAgICAgIGxlZnQ6IC04NnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl90dGIsXHJcbiAgJl9ydGwsXHJcbiAgJl9idHQsXHJcbiAgJl9sdHIge1xyXG4gICAgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcclxuICAgICAgJi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcclxuICAgICAgICBkaXNwbGF5OiBub25lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ== */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLzxpbnB1dCBjc3MgMj4iLCJzY3JvbGxiYXIubGVzcyIsInNlY3Rpb24ubGVzcyIsImNhc2UubGVzcyIsInBhZ2VyLmxlc3MiLCIuLi8uLi9zcmMvdGhlbWUvc2hhZG93Lmxlc3MiLCIuLi8uLi9zcmMvdGhlbWUvaWNvbnMubGVzcyIsIi4uLy4uL3NyYy90aGVtZS92YXJpYWJsZXMubGVzcyIsIi4uLy4uL3NyYy90aGVtZS9kcmF3ZXIubGVzcyIsIi4uLy4uL3NyYy90aGVtZS9hbmNob3JzLmxlc3MiLCIuLi8uLi9zcmMvdGhlbWUvY2hhcHRlcnMubGVzcyIsIi4uLy4uL3NyYy90aGVtZS9lbGxpcHNpcy5sZXNzIiwiLi4vLi4vc3JjL3RoZW1lL3Rvb2xiYXIubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILG1EQUFtRDtBQUNuRCw0QkFBNEI7QUFDNUIsMkJBQTJCO0FDUDNCO0VBQ0UsV0FBQTtFQUNBLFlBQUE7RUFDQSwyQkFBQTtDRFNEO0FDTkQ7RUFDRSwyQkFBQTtDRFFEO0FDTEQ7RUFDRSxzQ0FBQTtFQUNBLDJCQUFBO0NET0Q7QUNKRDtFQUNFLHNDQUFBO0VBQ0EsMkJBQUE7Q0RNRDtBQ0hEO0VBQ0Usc0NBQUE7Q0RLRDtBQ0ZEO0VBQ0Usc0NBQUE7Q0RJRDtBRTVCRDtFQUNFLGNBQUE7RUFDQSxpQkFBQTtDRjhCRDtBRTVCQzs7O0VBR0UsY0FBQTtFQUNBLGlCQUFBO0NGOEJIO0FFM0JDO0VBQ0UsWUFBQTtDRjZCSDtBRTFCQztFQUNFLGVBQUE7RUFDQSxrQkFBQTtDRjRCSDtBRXpCQztFQUNFLGlCQUFBO0VBQ0EsWUFBQTtDRjJCSDtBRXhCQztFQUNFLGVBQUE7RUFDQSxZQUFBO0NGMEJIO0FFdkJDOzs7RUFHRSxVQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0NGeUJIO0FFdEJDO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0NGd0JIO0FFckJDO0VBQ0Usc0JBQUE7Q0Z1Qkg7QUVwQkM7RUFDRSxzQkFB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UDtBWWp3Qk87Ozs7Ozs7O0VBQ0UsWUFBQTtDWjB3QlQ7QVl0d0JLOztFQUNFLDBCQUFBO0NaeXdCUDtBWXB3QkM7O0VBRUUsVUFBQTtFQUNBLG9DQUFBO1VBQUEsNEJBQUE7Q1pzd0JIO0FZendCQzs7RUFNSSxzQkFBQTtDWnV3Qkw7QVlud0JDO0VBQ0UsVUFBQTtDWnF3Qkg7QVlud0JHO0VBQ0UsV0FBQTtDWnF3Qkw7QVlqd0JDO0VBQ0UsYUFBQTtDWm13Qkg7QVlqd0JHO0VBQ0UsY0FBQTtDWm13Qkw7QVkvdkJDOztFQUVFLG9DQUFBO1VBQUEsNEJBQUE7RUFDQSxZQUFBO0NaaXdCSDtBWTl2QkM7RUFDRSxTQUFBO0VBQ0EsWUFBQTtDWmd3Qkg7QVk5dkJHO0VBQ0UsYUFBQTtDWmd3Qkw7QVk1dkJDO0VBQ0UsU0FBQTtFQUNBLFdBQUE7Q1o4dkJIO0FZNXZCRztFQUNFLFlBQUE7Q1o4dkJMO0FZcnZCSzs7OztFQUNFLGNBQUE7Q1owdkJQIiwiZmlsZSI6ImV4YW1wbGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxuICovXG4vKiA9PT09PT09PT09IGNvbG9ycy50aGVtZSAtIOWfuuehgOminOiJsuWPmOmHj+mbhuWQiCA9PT09PT09PT09ICovXG4vKiA9PT09PT0g6Zi05b2x5qC35byP6K6+572u5Ye95pWwID09PT09PSAqL1xuLyogPT09PT0gU2Nyb2xsYmFyID09PT09ICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDdweDtcbiAgaGVpZ2h0OiA3cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuLnNlY3Rpb24ge1xuICBtYXJnaW46IDFlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2hlYWRlcixcbi5zZWN0aW9uX19jb250ZW50LFxuLnNlY3Rpb25fX2Zvb3RlciB7XG4gIG1hcmdpbjogMCAzZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fdGl0bGUge1xuICBjb2xvcjogIzY2Njtcbn1cbi5zZWN0aW9uX19oMyB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xuICBmb250LXNpemU6IDEuMzVlbTtcbn1cbi5zZWN0aW9uX19oNCB7XG4gIGZvbnQtc2l6ZTogMS4xZW07XG4gIGNvbG9yOiAjNjY2O1xufVxuLnNlY3Rpb25fX2g1IHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGNvbG9yOiAjOTk5O1xufVxuLnNlY3Rpb25fX2RsLFxuLnNlY3Rpb25fX2R0LFxuLnNlY3Rpb25fX2RkIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2RsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xufVxuLnNlY3Rpb25fX2R0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnNlY3Rpb25fX2RkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5zZWN0aW9uX19wcmUge1xuICBtYXJnaW46IDJlbSAwO1xuICBwYWRkaW5nOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29sb3I6ICM2NjY7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLnNlY3Rpb25fX2NvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIG1hcmdpbi10b3A6IDNlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgY29sb3I6ICM5OTk7XG59XG4uY2FzZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgZ2FwOiA0MHB4O1xuICBwYWRkaW5nOiAxZW07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlOmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlX19wcmUsXG4uY2FzZV9fdGV4dGFyZWEge1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xufVxuLmNhc2VfX3ByZSxcbi5jYXNlX19jb2RlLFxuLmNhc2VfX3RleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ29uc29sYXMsIEdlb3JnaWEsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLmNhc2VfX3ByZSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uY2FzZV9fdG9vbGJhciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDM2cHg7XG4gIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIHBhZGRpbmc6IDAgMTZweDtcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY2FzZV9fYWN0aW9uLFxuLmNhc2VfX3JlbW92ZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6ICMwNTg5NDI7XG4gIHVzZXItc2VsZWN0OiBub25lO1xufVxuLmNhc2VfX2FjdGlvbiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xufVxuLmNhc2VfX2FjdGlvbjpmaXJzdC1jaGlsZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbn1cbi5jYXNlX19yZW1vdmUge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uY2FzZV9fY29uc29sZSB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDE4MHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX3RleHRhcmVhIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogMWVtO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5jYXNlX19saXN0LFxuLmNhc2VfX2l0ZW0ge1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlX19saXN0IHtcbiAgaGVpZ2h0OiAzNjBweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuICBmb250LXNpemU6IDEzcHg7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmNhc2VfX2l0ZW0ge1xuICBoZWlnaHQ6IDM2cHg7XG4gIGxpbmUtaGVpZ2h0OiAzNnB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmc6IDAgMTZweDtcbn1cbi5jYXNlX19pdGVtOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmOTtcbn1cbi5wYXBlciB7XG4gIGJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gIG1hcmdpbjogMmVtIGF1dG87XG4gIG1heC13aWR0aDogMTIwMHB4O1xuICBwYWRkaW5nOiAyZW07XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ucGFwZXIuZmxleCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5wYXBlci5mbGV4IC5hcnRpY2xlIHtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ucGFwZXIuZmxleCAuYXJ0aWNsZV9fbWFpbiB7XG4gIGhlaWdodDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ucGFwZXIuZmxleCAuYXJ0aWNsZV9fYXNpZGUge1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLmhlYWRlciB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIHotaW5kZXg6IDM7XG4gIHRvcDogMDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uaGVhZGVyX3N0aWNreSB7XG4gIHBhZGRpbmctbGVmdDogMjYwcHg7XG59XG4uYXJ0aWNsZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBwYWRkaW5nOiAyZW0gMDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMTUwJTtcbn1cbi5hcnRpY2xlX19tYWluIHtcbiAgZmxleDogMTtcbiAgcGFkZGluZzogMCAyZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYXJ0aWNsZV9fbWFpbiAuc2VjdGlvbiB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2NvbnRlbnQsXG4uYXJ0aWNsZV9fbWFpbiAuc2VjdGlvbl9fZm9vdGVyLFxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2hlYWRlciB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2hlYWRlcixcbi5hcnRpY2xlX19tYWluIC5zZWN0aW9uX19jb250ZW50IHtcbiAgbWFyZ2luOiAwO1xufVxuLmFydGljbGVfX2FzaWRlIHtcbiAgZmxleC1zaHJpbms6IDA7XG4gIHdpZHRoOiAyNDBweDtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGRkO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xufVxuLmFydGljbGVfX2FzaWRlLmx0ciB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1sZWZ0OiBub25lO1xufVxuLmFydGljbGVfX2FzaWRlIC5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbnByZSxcbi5zZWN0aW9uX19wcmUge1xuICBwYWRkaW5nOiAyZW07XG4gIGZvbnQtZmFtaWx5OiBcIkNvdXJpZXIgTmV3XCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbmNvZGUsXG4uc2VjdGlvbl9fY29kZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkNvdXJpZXIgTmV3XCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE2cHg7XG59XG4uZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkY2RmZTY7XG4gIHBhZGRpbmc6IDNlbSAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZm9vdGVyIGE6bGluayxcbi5mb290ZXIgYTp2aXNpdGVkLFxuLmZvb3RlciBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5mb290ZXIgYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLnV0aWxzLWJvcmRlci1yaWdodCB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qID09PT09PT09PT0gaWNvbi50aGVtZSAtIHN2ZyDlm77moIfnmoTmoLflvI8gPT09PT09PT09PSAqL1xuLm91dGxpbmUtaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWljb25fX3N2ZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDFlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG46cm9vdCB7XG4gIC0tb3V0bGluZS16SW5kZXg6IDIwMDA7XG4gIC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0OiAxMDAlO1xuICAtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGg6IDEwMCU7XG59XG4ub3V0bGluZS1kcmF3ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IC0xO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19tb2RhbCB7XG4gIGJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDIxO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlLFxuLm91dGxpbmUtZHJhd2VyX19tYWluLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDUycHg7XG4gIGxpbmUtaGVpZ2h0OiA1MnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX19jbG9zZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxMnB4O1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICM5OTk7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2UgLm91dGxpbmUtaWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX19jbG9zZTpob3ZlciB7XG4gIGNvbG9yOiAjNjY2O1xufVxuLm91dGxpbmUtZHJhd2VyX19tYWluIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fb3ZlcmxheSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgb3BhY2l0eTogMC4xO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl90aW55LFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl90aW55IHtcbiAgd2lkdGg6IDI4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9taW5pLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pIHtcbiAgd2lkdGg6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICB3aWR0aDogNTQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIsXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIge1xuICB3aWR0aDogNjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtIHtcbiAgd2lkdGg6IDcyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICB3aWR0aDogOTYwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtMjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC01NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTY5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC05NzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC01NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC05NzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICBoZWlnaHQ6IDI0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pIHtcbiAgaGVpZ2h0OiAzMjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfc21hbGwsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3NtYWxsIHtcbiAgaGVpZ2h0OiAzNjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIGhlaWdodDogNDAwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21lZGl1bSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtIHtcbiAgaGVpZ2h0OiA0NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbGFyZ2UsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX2xhcmdlIHtcbiAgaGVpZ2h0OiA0ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0yNTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zMzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtMzcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDEwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgdG9wOiBpbml0aWFsO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0yNTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zMzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtMzcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDEwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgcmlnaHQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGxlZnQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIHRvcDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgYm90dG9tOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9ydGwsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfdHRiLFxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB3aWR0aDogY2FsYygxMDAlIC0gNGVtKTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9hdXRvLm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9hdXRvLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9mdWxsIHtcbiAgcGFkZGluZzogMDtcbn1cbi5vdXRsaW5lLWhlYWRpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzFmOGRkNjtcbn1cbi5vdXRsaW5lLWhlYWRpbmc6aG92ZXIgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLm91dGxpbmUtaGVhZGluZ19zdGFydDpob3ZlciB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLm91dGxpbmUtaGVhZGluZ19zdGFydCAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGxlZnQ6IC0xZW07XG59XG4vKipcbiAqIGVsbGlwc2lzLmxlc3MgLSDmlofmnKznnIHnlaUgbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMTFcbiAqL1xuLyogPT09PT09IOaWh+acrOecgeeVpeWHveaVsCA9PT09PT0gKi9cbi5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiB2YXIoLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoKTtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICBtYXJnaW46IDAgMTZweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBsaW5lLWhlaWdodDogNDBweDtcbiAgcGFkZGluZzogMCAxNnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19saXN0LFxuLm91dGxpbmUtY2hhcHRlcnNfX3N1YmplY3QsXG4ub3V0bGluZS1jaGFwdGVyc19faXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbGlzdCB7XG4gIHBhZGRpbmc6IDAuNWVtIDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fc3ViamVjdCB7XG4gIHBhZGRpbmctbGVmdDogMWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2l0ZW0ge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fcGxhY2Vob2xkZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmOTtcbiAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMDU4OTQyO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMCAxLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjNTU1O1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2NvZGUge1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHotaW5kZXg6IHZhcigtLW91dGxpbmUtekluZGV4KTtcbiAgdG9wOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICBmbGV4LXNocmluazogMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICBtYXgtaGVpZ2h0OiB2YXIoLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQpO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZm9sZGVkIHtcbiAgd2lkdGg6IDA7XG59XG4vKiA9PT09PT09PT09IGJ1dHRvbnMudGhlbWUgLSDmjInpkq7lr7zoiKrmoLflvI8gPT09PT09PT09PSAqL1xuLm91dGxpbmUtdG9vbGJhciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogOTk5OTk7XG4gIG1hcmdpbjogMDtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAxMHB4O1xuICB3aWR0aDogMzZweDtcbiAgaGVpZ2h0OiAzNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGNkZmU2O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzU1NTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICBib3JkZXItY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b24uaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNTg5NDI7XG4gIGJvcmRlci1jb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ub3V0bGluZS10b29sYmFyX3JvdW5kZWQub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAxOHB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBjb2xvcjogIzk5OTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluazpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbms6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQ6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIsXG4ub3V0bGluZS10b29sYmFyX2J0dCB7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9idHQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIge1xuICB0b3A6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX3R0Yi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgdG9wOiAtNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYnR0IHtcbiAgYm90dG9tOiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9idHQub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGJvdHRvbTogLTU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bCxcbi5vdXRsaW5lLXRvb2xiYXJfbHRyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB3aWR0aDogNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsIHtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIHJpZ2h0OiAtODZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfbHRyIHtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX2x0ci5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgbGVmdDogLTg2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfcnRsIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9idHQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX2x0ciAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4iLCIvKiA9PT09PSBTY3JvbGxiYXIgPT09PT0gKi9cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogN3B4O1xuICBoZWlnaHQ6IDdweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2Uge1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhcjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuIiwiQGltcG9ydCAnY29sb3JzJztcblxuLnNlY3Rpb24ge1xuICBtYXJnaW46IDFlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICZfX2hlYWRlcixcbiAgJl9fY29udGVudCxcbiAgJl9fZm9vdGVyIHtcbiAgICBtYXJnaW46IDAgM2VtO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX190aXRsZSB7XG4gICAgY29sb3I6IEB0aGlyZF90ZXh0X2NvbG9yO1xuICB9XG5cbiAgJl9faDMge1xuICAgIGNvbG9yOiBAcHJpbWFyeV9jb2xvcjtcbiAgICBmb250LXNpemU6IDEuMzVlbTtcbiAgfVxuXG4gICZfX2g0IHtcbiAgICBmb250LXNpemU6IDEuMWVtO1xuICAgIGNvbG9yOiBAdGhpcmRfdGV4dF9jb2xvcjtcbiAgfVxuXG4gICZfX2g1IHtcbiAgICBmb250LXNpemU6IDFlbTtcbiAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xuICB9XG5cbiAgJl9fZGwsXG4gICZfX2R0LFxuICAmX19kZCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX2RsIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgfVxuXG4gICZfX2R0IHtcbiAgICBkaXNwbGF5OmlubGluZS1ibG9jaztcbiAgfVxuXG4gICZfX2RkIHtcbiAgICBkaXNwbGF5OmlubGluZS1ibG9jaztcbiAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG4gIH1cblxuICAmX19wcmUge1xuICAgIG1hcmdpbjogMmVtIDA7XG4gICAgcGFkZGluZzogMWVtO1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBsaW5lLWhlaWdodDogMTUwJTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBiZ19jb2xvcjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBjb2xvcjogQHRoaXJkX3RleHRfY29sb3I7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cblxuICAmX19jb2RlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fZm9vdGVyIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcbiAgICBtYXJnaW4tdG9wOiAzZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGJnX2NvbG9yO1xuICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XG4gIH1cbn1cbiIsIkBpbXBvcnQgJy4vY29sb3JzJztcblxuLmNhc2Uge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7XG4gIGdhcDogNDBweDtcbiAgcGFkZGluZzogMWVtO1xuICBib3JkZXItdG9wOjFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICBib3JkZXItYm90dG9tOjFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAwO1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fcHJlLFxuICAmX190ZXh0YXJlYSB7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAxNTAlO1xuICB9XG5cbiAgJl9fcHJlLFxuICAmX19jb2RlLFxuICAmX190ZXh0YXJlYSB7XG4gICAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ29uc29sYXMsIEdlb3JnaWEsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICB9XG5cbiAgJl9fcHJlIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMWVtO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBiZ19jb2xvcjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cblxuICAmX190b29sYmFyIHtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBoZWlnaHQ6IDM2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIHBhZGRpbmc6IDAgMTZweDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fYWN0aW9uLFxuICAmX19yZW1vdmUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIH1cblxuICAmX19hY3Rpb24ge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICB9XG4gIH1cblxuICAmX19yZW1vdmUge1xuICAgIGZsb2F0OiByaWdodDtcbiAgfVxuXG4gICZfX2NvbnNvbGUge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGhlaWdodDogMTgwcHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fdGV4dGFyZWEge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBwYWRkaW5nOiAxZW07XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gICZfX2xpc3QsXG4gICZfX2l0ZW0ge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fbGlzdCB7XG4gICAgaGVpZ2h0OiAzNjBweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gIH1cblxuICAmX19pdGVtIHtcbiAgICBoZWlnaHQ6IDM2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDM2cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDAgMTZweDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGhvdmVyX2JnX2NvbG9yO1xuICAgIH1cbiAgfVxufVxuIiwiLnBhcGVyIHtcclxuICAuc2hhZG93X2xpZ2h0X3JlZ3VsYXIoKTtcclxuICBtYXJnaW46IDJlbSBhdXRvO1xyXG4gIG1heC13aWR0aDogMTIwMHB4O1xyXG4gIHBhZGRpbmc6IDJlbTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2hpdGU7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuXHJcbiAgJi5mbGV4IHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gICAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgIC5hcnRpY2xlIHtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcblxyXG4gICAgICAmX19tYWluIHtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgICBvdmVyZmxvdzogYXV0bztcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9fYXNpZGUge1xyXG4gICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLmhlYWRlciB7XHJcbiAgcG9zaXRpb246IHN0aWNreTtcclxuICB6LWluZGV4OiAzO1xyXG4gIHRvcDogMDtcclxuICBtYXJnaW46IDAgYXV0bztcclxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQGJvcmRlcl9jb2xvcjtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2hpdGU7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgJl9zdGlja3kge1xyXG4gICAgcGFkZGluZy1sZWZ0OiAyNjBweDtcclxuICB9XHJcbn1cclxuXHJcbi5hcnRpY2xlIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XHJcbiAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgcGFkZGluZzogMmVtIDA7XHJcbiAgZm9udC1zaXplOiAxNnB4O1xyXG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xyXG5cclxuICAmX19tYWluIHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBwYWRkaW5nOiAwIDJlbTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICAgLnNlY3Rpb24ge1xyXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTtcclxuXHJcbiAgICAgICZfX2NvbnRlbnQsXHJcbiAgICAgICZfX2Zvb3RlcixcclxuICAgICAgJl9faGVhZGVyIHtcclxuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9faGVhZGVyLFxyXG4gICAgICAmX19jb250ZW50IHtcclxuICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfX2FzaWRlIHtcclxuICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gICAgd2lkdGg6IDI0MHB4O1xyXG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBAYm9yZGVyX2NvbG9yO1xyXG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcclxuXHJcbiAgICAmLmx0ciB7XHJcbiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIEBib3JkZXJfY29sb3I7XHJcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgIC5vdXRsaW5lLWNoYXB0ZXJzIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxucHJlLFxyXG4uc2VjdGlvbl9fcHJlIHtcclxuICBwYWRkaW5nOiAyZW07XHJcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogQGJnX2NvbG9yO1xyXG4gIG92ZXJmbG93OiBhdXRvO1xyXG59XHJcblxyXG5jb2RlLFxyXG4uc2VjdGlvbl9fY29kZSB7XHJcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQXJpYWwsIHNhbnMtc2VyaWY7XHJcbiAgZm9udC1zaXplOiAxNnB4O1xyXG59XHJcblxyXG4uZm9vdGVyIHtcclxuICBib3JkZXItdG9wOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG4gIHBhZGRpbmc6IDNlbSAwO1xyXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHJcbiAgYSB7XHJcbiAgICAmOmxpbmssXHJcbiAgICAmOnZpc2l0ZWQsXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLnV0aWxzLWJvcmRlci1yaWdodCB7XHJcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG59XHJcblxyXG4uaGlkZGVuIHtcclxuICBkaXNwbGF5OiBub25lO1xyXG59XHJcbiIsIi8qKlxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMjBcbiAqL1xuQGltcG9ydCAnLi9jb2xvcnMnO1xuXG4vKiA9PT09PT0g6Zi05b2x5qC35byP6K6+572u5Ye95pWwID09PT09PSAqL1xuLnNoYWRvdyhAb2Zmc2V0OiAwIDAgNnB4IDFweCwgQGNvbG9yOiBAcHJpbWFyeV9ib3JkZXJfY29sb3IpIHtcbiAgYm94LXNoYWRvdzogQG9mZnNldCBAY29sb3I7XG59XG5cbi5zaGFkb3dfcmVndWxhcihAY29sb3I6IEBwcmltYXJ5X2JvcmRlcl9jb2xvcikge1xuICAuc2hhZG93KDAgMCA2cHggMXB4LCBAY29sb3IpO1xufVxuXG4uc2hhZG93X2xhcmdlKEBjb2xvcjogQHByaW1hcnlfYm9yZGVyX2NvbG9yKSB7XG4gIC5zaGFkb3coMCAwIDEycHggMXB4LCBAY29sb3IpO1xufVxuXG4uc2hhZG93X2xpZ2h0X3JlZ3VsYXIoKSB7XG4gIC5zaGFkb3dfcmVndWxhcigpO1xufVxuXG4uc2hhZG93X2xpZ2h0X2xhcmdlKCkge1xuICAuc2hhZG93X2xhcmdlKCk7XG59XG5cbi5zaGFkb3dfZGFya19yZWd1bGFyKCkge1xuICAuc2hhZG93X3JlZ3VsYXIoQHNlY29uZGFyeV9ib3JkZXJfY29sb3IpO1xufVxuXG4uc2hhZG93X2RhcmtfbGFyZ2UoKSB7XG4gIC5zaGFkb3dfbGFyZ2UoQHNlY29uZGFyeV9ib3JkZXJfY29sb3IpO1xufVxuIiwiLyogPT09PT09PT09PSBpY29uLnRoZW1lIC0gc3ZnIOWbvuagh+eahOagt+W8jyA9PT09PT09PT09ICovXG4ub3V0bGluZS1pY29uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxZW07XG4gIGhlaWdodDogMWVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICZfX3N2ZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHdpZHRoOiAxZW07XG4gICAgaGVpZ2h0OiAxZW07XG4gICAgZmlsbDogY3VycmVudGNvbG9yO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cbn1cbiIsIjpyb290IHtcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcbn1cbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcbkBpbXBvcnQgJy4vY29sb3JzJztcbkBpbXBvcnQgJy4vc2hhZG93JztcblxuLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAtMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmX19tb2RhbCB7XG4gICAgLnNoYWRvd19saWdodF9yZWd1bGFyKCk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAyMTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX2hlYWRlcixcbiAgJl9fbWFpbixcbiAgJl9fZm9vdGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgJl9faGVhZGVyLFxuICAmX19mb290ZXIge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICB9XG5cbiAgJl9fdGl0bGUsXG4gICZfX21haW4sXG4gICZfX2Zvb3RlciB7XG4gICAgcGFkZGluZzogMCAxNnB4O1xuICB9XG5cbiAgJl9faGVhZGVyLFxuICAmX190aXRsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgaGVpZ2h0OiA1MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX190aXRsZSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xuICB9XG5cbiAgJl9fY2xvc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiAxMnB4O1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLm91dGxpbmUtaWNvbiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAdGhpcmRfdGV4dF9jb2xvcjtcbiAgICB9XG4gIH1cblxuICAmX19tYWluIHtcbiAgICBmbGV4OiAxO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgJl9fZm9vdGVyIHtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fb3ZlcmxheSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcbiAgICBvcGFjaXR5OiAwLjE7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfcnRsLFxuICAmX2x0ciB7XG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICAmX3Rpbnkge1xuICAgICAgICB3aWR0aDogMjgwcHg7XG4gICAgICB9XG5cbiAgICAgICZfbWluaSB7XG4gICAgICAgIHdpZHRoOiA0ODBweDtcbiAgICAgIH1cblxuICAgICAgJl9zbWFsbCB7XG4gICAgICAgIHdpZHRoOiA1NDBweDtcbiAgICAgIH1cblxuICAgICAgJl9yZWd1bGFyIHtcbiAgICAgICAgd2lkdGg6IDY4MHB4O1xuICAgICAgfVxuXG4gICAgICAmX21lZGl1bSB7XG4gICAgICAgIHdpZHRoOiA3MjBweDtcbiAgICAgIH1cblxuICAgICAgJl9sYXJnZSB7XG4gICAgICAgIHdpZHRoOiA5NjBweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX3J0bCB7XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XG5cbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfdGlueSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICByaWdodDogLTI5MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbWluaSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICByaWdodDogLTQ5MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfc21hbGwge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgcmlnaHQ6IC01NTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3JlZ3VsYXIge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgcmlnaHQ6IC02OTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX21lZGl1bSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICByaWdodDogLTczMHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbGFyZ2Uge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgcmlnaHQ6IC05NzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfbHRyIHtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XG5cbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfdGlueSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBsZWZ0OiAtMjkwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9taW5pIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGxlZnQ6IC00OTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3NtYWxsIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGxlZnQ6IC01NTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3JlZ3VsYXIge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgbGVmdDogLTY5MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbWVkaXVtIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGxlZnQ6IC03MzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX2xhcmdlIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGxlZnQ6IC05NzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfdHRiLFxuICAmX2J0dCB7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYub3V0bGluZS1kcmF3ZXIge1xuICAgICAgJl90aW55IHtcbiAgICAgICAgaGVpZ2h0OiAyNDBweDtcbiAgICAgIH1cblxuICAgICAgJl9taW5pIHtcbiAgICAgICAgaGVpZ2h0OiAzMjBweDtcbiAgICAgIH1cblxuICAgICAgJl9zbWFsbCB7XG4gICAgICAgIGhlaWdodDogMzYwcHg7XG4gICAgICB9XG5cbiAgICAgICZfcmVndWxhciB7XG4gICAgICAgIGhlaWdodDogNDAwcHg7XG4gICAgICB9XG5cbiAgICAgICZfbWVkaXVtIHtcbiAgICAgICAgaGVpZ2h0OiA0NDBweDtcbiAgICAgIH1cblxuICAgICAgJl9sYXJnZSB7XG4gICAgICAgIGhlaWdodDogNDgwcHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl90dGIge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XG5cbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfdGlueSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICB0b3A6IC0yNTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX21pbmkge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgdG9wOiAtMzMwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9zbWFsbCB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICB0b3A6IC0zNzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3JlZ3VsYXIge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgdG9wOiAtNDEwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9tZWRpdW0ge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgdG9wOiAtNDUwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9sYXJnZSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICB0b3A6IC00OTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfYnR0IHtcbiAgICB0b3A6IGluaXRpYWw7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcblxuICAgICYub3V0bGluZS1kcmF3ZXIge1xuICAgICAgJl90aW55IHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGJvdHRvbTogLTI1MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbWluaSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBib3R0b206IC0zMzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3NtYWxsIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGJvdHRvbTogLTM3MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfcmVndWxhciB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBib3R0b206IC00MTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX21lZGl1bSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBib3R0b206IC00NTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX2xhcmdlIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGJvdHRvbTogLTQ5MHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9vcGVuZWQge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xuXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG5cbiAgICAgICZfcnRsIHtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgICZfbHRyIHtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cblxuICAgICAgJl90dGIge1xuICAgICAgICB0b3A6IDA7XG4gICAgICB9XG5cbiAgICAgICZfYnR0IHtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfb2Zmc2V0IHtcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfcnRsLFxuICAgICAgJl9sdHIge1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICB9XG5cbiAgICAgICZfdHRiLFxuICAgICAgJl9idHQge1xuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gNGVtKTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG5cbiAgICAgICZfb3BlbmVkIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICAgICAgJl9ydGwge1xuICAgICAgICAgICAgcmlnaHQ6IDJlbTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmX2x0ciB7XG4gICAgICAgICAgICBsZWZ0OiAyZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJl90dGIge1xuICAgICAgICAgICAgdG9wOiAyZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJl9idHQge1xuICAgICAgICAgICAgYm90dG9tOiAyZW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9hdXRvIHtcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfcnRsLFxuICAgICAgJl9sdHIge1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9mdWxsIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4iLCJAaW1wb3J0ICcuL2NvbG9ycyc7XG5cbi5vdXRsaW5lLWhlYWRpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJl9fYW5jaG9yIHtcbiAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgJjpsaW5rLFxuICAgICY6dmlzaXRlZCxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQHByaW1hcnlfY29sb3I7XG4gICAgfVxuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gIH1cblxuICAmX3N0YXJ0IHtcbiAgICAmOmhvdmVyIHtcbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIH1cblxuICAgIC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICBsZWZ0OiAtMWVtO1xuICAgIH1cbiAgfVxufVxuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuQGltcG9ydCAnLi9jb2xvcnMnO1xuQGltcG9ydCAnLi9lbGxpcHNpcyc7XG5cbi5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiB2YXIoLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoKTtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGF1dG87XG5cbiAgJl9fdGl0bGUge1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICBwYWRkaW5nOiAwIDE2cHg7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fbWFpbiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgbWFyZ2luOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19saXN0LFxuICAmX19zdWJqZWN0LFxuICAmX19pdGVtIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMjtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX2xpc3Qge1xuICAgIHBhZGRpbmc6IDAuNWVtIDA7XG4gIH1cblxuICAmX19zdWJqZWN0IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgfVxuXG4gICZfX2l0ZW0ge1xuICAgIG1hcmdpbjogMDtcbiAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX3BsYWNlaG9sZGVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDMwcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQGhvdmVyX2JnX2NvbG9yO1xuICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgQHN1Y2Nlc3NfY29sb3I7XG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19hbmNob3Ige1xuICAgIC5lbGxpcHNpcygxKTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwIDEuNWVtO1xuXG4gICAgJjpsaW5rLFxuICAgICY6dmlzaXRlZCxcbiAgICAmOmhvdmVyIHtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgIGNvbG9yOiBAc2Vjb25kYXJ5X3RleHRfY29sb3I7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG4gICAgfVxuICB9XG5cbiAgJl9fY29kZSB7XG4gICAgcGFkZGluZy1yaWdodDogMC41ZW07XG4gIH1cblxuICAmX2FjdGl2ZSB7XG4gICAgJi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3Ige1xuICAgICAgJjpsaW5rLFxuICAgICAgJjp2aXNpdGVkLFxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX3N0aWNreSxcbiAgJl9maXhlZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIHotaW5kZXg6IHZhcigtLW91dGxpbmUtekluZGV4KTtcbiAgICB0b3A6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgICAgICZfX3RpdGxlLFxuICAgICAgJl9fbWFpbiB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICB9XG5cbiAgICAgICZfX3RpdGxlIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG5cbiAgICAgICZfX21haW4ge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX3N0aWNreSB7XG4gICAgcG9zaXRpb246IHN0aWNreTtcbiAgICBtYXgtaGVpZ2h0OiB2YXIoLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQpO1xuICB9XG5cbiAgJl9maXhlZCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAmX2hpZGRlbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gICZfZm9sZGVkIHtcbiAgICB3aWR0aDogMDtcbiAgfVxufVxuIiwiLyoqXG4gKiBlbGxpcHNpcy5sZXNzIC0g5paH5pys55yB55WlIG1peGlueCDlh73mlbBcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENyZWF0ZWQgQnk6IFlhb2hhaXhpYW9cbiAqIFVwZGF0ZTogMjAyMi4zLjExXG4gKi9cblxuLyogPT09PT09IOaWh+acrOecgeeVpeWHveaVsCA9PT09PT0gKi9cbi5lbGxpcHNpcyAoQGxpbmVzKSB3aGVuIChAbGluZXM9MSkge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmVsbGlwc2lzIChAbGluZXMpIHdoZW4gKEBsaW5lcz49Mikge1xuICAtd2Via2l0LWxpbmUtY2xhbXA6IEBsaW5lcztcbiAgZGlzcGxheTogYm94O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbiIsIi8qID09PT09PT09PT0gYnV0dG9ucy50aGVtZSAtIOaMiemSruWvvOiIquagt+W8jyA9PT09PT09PT09ICovXG5AaW1wb3J0ICcuL2NvbG9ycyc7XG5AaW1wb3J0ICcuL3NoYWRvdyc7XG5cbi5vdXRsaW5lLXRvb2xiYXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5O1xuICBtYXJnaW46IDA7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJl9fYnV0dG9uIHtcbiAgICAuc2hhZG93X2xpZ2h0X3JlZ3VsYXIoKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTtcbiAgICBtYXJnaW46IDEwcHg7XG4gICAgd2lkdGg6IDM2cHg7XG4gICAgaGVpZ2h0OiAzNnB4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2hpdGU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogQHNlY29uZGFyeV90ZXh0X2NvbG9yO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcbiAgICAgIGJvcmRlci1jb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG4gICAgfVxuXG4gICAgJi5oaWRlIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICB9XG5cbiAgJl9fYW5jaG9yIHtcbiAgICAmOmxpbmssXG4gICAgJjp2aXNpdGVkLFxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcbiAgICB9XG4gIH1cblxuICAmX19pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMjtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9hY3RpdmUge1xuICAgICYub3V0bGluZS10b29sYmFyIHtcbiAgICAgICZfX2J1dHRvbiB7XG4gICAgICAgIGNvbG9yOiBAd2hpdGU7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xuICAgICAgICBib3JkZXItY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiBAd2hpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAub3V0bGluZS10b29sYmFyX19hbmNob3Ige1xuICAgICAgJjpsaW5rLFxuICAgICAgJjp2aXNpdGVkLFxuICAgICAgJjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiBAd2hpdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9yb3VuZGVkIHtcbiAgICAmLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7XG4gICAgfVxuICB9XG5cbiAgJl9kaXNhYmxlZCB7XG4gICAgJi5vdXRsaW5lLXRvb2xiYXIsXG4gICAgLm91dGxpbmUtdG9vbGJhciB7XG4gICAgICAmX19hbmNob3I6bGluayxcbiAgICAgICZfX2FuY2hvcjp2aXNpdGVkLFxuICAgICAgJl9fYW5jaG9yOmhvdmVyLFxuICAgICAgJl9fYnV0dG9uIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfX2J1dHRvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IEBkaXNhYmxlZF9iZ19jb2xvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX3R0YixcbiAgJl9idHQge1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG5cbiAgICAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgfVxuXG4gICZfdHRiIHtcbiAgICB0b3A6IDEycHg7XG5cbiAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICAgICAgdG9wOiAtNTZweDtcbiAgICB9XG4gIH1cblxuICAmX2J0dCB7XG4gICAgYm90dG9tOiAxMnB4O1xuXG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgICAgIGJvdHRvbTogLTU2cHg7XG4gICAgfVxuICB9XG5cbiAgJl9ydGwsXG4gICZfbHRyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgd2lkdGg6IDU2cHg7XG4gIH1cblxuICAmX3J0bCB7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDEycHg7XG5cbiAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICAgICAgcmlnaHQ6IC04NnB4O1xuICAgIH1cbiAgfVxuXG4gICZfbHRyIHtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiAxMnB4O1xuXG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgICAgIGxlZnQ6IC04NnB4O1xuICAgIH1cbiAgfVxuXG4gICZfdHRiLFxuICAmX3J0bCxcbiAgJl9idHQsXG4gICZfbHRyIHtcbiAgICAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICAgICAgJi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ== */ diff --git a/docs/css/example.min.css b/docs/css/example.min.css index 098f7d73..ed3bf5bc 100644 --- a/docs/css/example.min.css +++ b/docs/css/example.min.css @@ -1,2 +1,2 @@ .section__dd,.section__dt{display:inline-block}.case,.section__dl{position:relative;z-index:1}.case:after,.outline-drawer__overlay{content:''}.case,.section__footer{border-top:1px solid #ddd}::-webkit-scrollbar{width:7px;height:7px;-webkit-border-radius:5px}::-webkit-scrollbar-track-piece{-webkit-border-radius:5px}::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.25);-webkit-border-radius:5px}::-webkit-scrollbar-thumb:horizontal{background-color:rgba(0,0,0,.25);-webkit-border-radius:5px}::-webkit-scrollbar:hover{background-color:rgba(0,0,0,.15)}::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.35)}.section{margin:1em 0;overflow:hidden}.section__content,.section__footer,.section__header{margin:0 3em;overflow:hidden}.section__title{color:#666}.section__h3{color:#1f8dd6;font-size:1.35em}.section__h4{font-size:1.1em;color:#666}.section__h5{font-size:1em;color:#999}.section__dd,.section__dl,.section__dt{margin:0;padding:0;overflow:hidden}.section__dd{color:#058942}.section__pre{margin:2em 0;font-size:14px;line-height:150%;text-align:left;border:1px solid #ddd;border-radius:4px;color:#666}.section__code{display:block;margin:0 auto;overflow:hidden}.section__footer{margin-top:3em;background-color:#fafafa;color:#999}.case{display:grid;grid-template-columns:repeat(2,1fr);gap:40px;padding:1em;border-bottom:1px solid #ddd;overflow:hidden}.case:after{position:absolute;z-index:2;top:0;left:50%;height:100%;width:0;border-left:1px solid #ddd;overflow:hidden}.case__pre,.case__textarea{font-size:13px;line-height:150%}.case__code,.case__pre,.case__textarea{font-family:"Courier New",Consolas,Georgia,Arial,sans-serif}.case__pre{margin:0;padding:1em;background-color:#fafafa;height:100%;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto}.case__textarea,.paper,.paper.flex .article{-webkit-box-sizing:border-box}.case__toolbar{margin:0 auto;height:36px;line-height:36px;font-size:14px;padding:0 16px;text-align:right;overflow:hidden}.case__action,.case__remove{cursor:pointer;color:#058942;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.case__action{font-size:13px;padding-left:10px}.case__action:first-child{padding-left:0}.case__remove{float:right}.case__console{margin:0 auto;height:180px;border:1px solid #ddd;overflow:hidden}.case__textarea{margin:0 auto;width:100%;height:100%;border:none;outline:0;padding:1em;box-sizing:border-box;overflow:auto}.case__list,.header{border-bottom:1px solid #ddd}.case__item,.case__list{margin:0;padding:0;list-style-type:none;overflow:hidden}.case__list{height:360px;border-top:1px solid #ddd;font-size:13px;overflow:auto}.footer,.outline-drawer_btt{border-top:1px solid #dcdfe6}.case__item{height:36px;line-height:36px;cursor:pointer;padding:0 16px}.case__item:hover{background-color:#f7f8f9}.article__aside .outline-chapters,.header,.outline-drawer__modal,.outline-drawer__overlay,.paper{background-color:#fff}.paper{-webkit-box-shadow:0 0 6px 1px #dcdfe6;box-shadow:0 0 6px 1px #dcdfe6;margin:2em auto;max-width:1200px;padding:2em;box-sizing:border-box}.paper.flex{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;margin:0;width:100%;max-width:100%;height:100%;padding:0;overflow:hidden}.outline-chapters_fixed,.outline-chapters_sticky,.outline-drawer__modal,.paper.flex .article{-webkit-box-orient:vertical;-webkit-box-direction:normal}.paper.flex .article{-ms-flex-direction:column;flex-direction:column;width:100%;box-sizing:border-box}.paper.flex .article__main{height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:auto}.paper.flex .article__aside{border-right:1px solid #dcdfe6}.header{position:sticky;z-index:3;top:0;margin:0 auto;text-align:center;-webkit-transition-duration:.3s;transition-duration:.3s;overflow:hidden}.header_sticky{padding-left:260px}.article{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:2em 0;font-size:16px;line-height:150%}.hidden,.outline-heading__anchor{display:none}.article__main{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 2em;overflow:hidden}.article__main .section,.article__main .section__content,.article__main .section__footer,.article__main .section__header{overflow:visible}.article__main .section__content,.article__main .section__header{margin:0}.article__aside{-ms-flex-negative:0;flex-shrink:0;width:240px;border-left:1px solid #ddd;-webkit-transition-duration:.3s;transition-duration:.3s}.article__aside.ltr{border-right:1px solid #ddd;border-left:none}.outline-drawer_ltr,.utils-border-right{border-right:1px solid #dcdfe6}.section__pre,pre{padding:2em;font-family:"Courier New",Arial,sans-serif;background-color:#fafafa;overflow:auto}.section__code,code{font-family:"Courier New",Arial,sans-serif;font-size:16px}.footer{padding:3em 0;text-align:center}.footer a:hover,.footer a:link,.footer a:visited{text-decoration:none;color:#058942}.footer a:hover{text-decoration:underline}.outline-icon{position:relative;z-index:1;display:inline-block;vertical-align:middle;width:1em;height:1em;overflow:hidden}.outline-icon__svg{position:absolute;z-index:2;top:50%;left:50%;width:1em;height:1em;fill:currentcolor;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);overflow:hidden}:root{--outline-zIndex:2000;--outline-sticky-height:100%;--outline-chapters-width:100%}.outline-drawer{position:relative;z-index:-1;top:0;left:0;margin:0;width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;visibility:hidden;overflow:hidden}.outline-drawer__modal{-webkit-box-shadow:0 0 6px 1px #dcdfe6;box-shadow:0 0 6px 1px #dcdfe6;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:absolute;z-index:21;height:100%;-webkit-transition-duration:.4s;transition-duration:.4s;overflow:hidden}.outline-drawer__footer,.outline-drawer__header,.outline-drawer__main{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.outline-drawer__footer,.outline-drawer__header{-ms-flex-negative:0;flex-shrink:0}.outline-drawer__footer,.outline-drawer__main,.outline-drawer__title{padding:0 16px}.outline-drawer__header,.outline-drawer__title{position:relative;z-index:1;margin:0 auto;height:52px;line-height:52px;overflow:hidden}.outline-drawer__title{font-size:16px;font-weight:400;margin:0 16px;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #dcdfe6}.outline-drawer__close{position:absolute;z-index:2;top:50%;right:12px;width:20px;height:20px;line-height:20px;color:#999;font-size:20px;text-align:center;cursor:pointer;-webkit-transform:translateY(-50%);transform:translateY(-50%);overflow:hidden}.outline-drawer__close .outline-icon{position:absolute;z-index:2;top:0;left:0}.outline-drawer__close:hover{color:#666}.outline-drawer__main{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.outline-drawer__footer{margin:0 auto;text-align:right;overflow:hidden}.outline-drawer__overlay{position:relative;z-index:1;top:0;left:0;width:100%;height:100%;opacity:.1;overflow:hidden}.outline-drawer_ltr.outline-drawer_tiny,.outline-drawer_rtl.outline-drawer_tiny{width:280px}.outline-drawer_ltr.outline-drawer_mini,.outline-drawer_rtl.outline-drawer_mini{width:480px}.outline-drawer_ltr.outline-drawer_small,.outline-drawer_rtl.outline-drawer_small{width:540px}.outline-drawer_ltr.outline-drawer_regular,.outline-drawer_rtl.outline-drawer_regular{width:680px}.outline-drawer_ltr.outline-drawer_medium,.outline-drawer_rtl.outline-drawer_medium{width:720px}.outline-drawer_ltr.outline-drawer_large,.outline-drawer_rtl.outline-drawer_large{width:960px}.outline-drawer_rtl{border-left:1px solid #dcdfe6}.outline-drawer_rtl.outline-drawer_tiny.outline-drawer_closed{right:-290px}.outline-drawer_rtl.outline-drawer_mini.outline-drawer_closed{right:-490px}.outline-drawer_rtl.outline-drawer_small.outline-drawer_closed{right:-550px}.outline-drawer_rtl.outline-drawer_regular.outline-drawer_closed{right:-690px}.outline-drawer_rtl.outline-drawer_medium.outline-drawer_closed{right:-730px}.outline-drawer_rtl.outline-drawer_large.outline-drawer_closed{right:-970px}.outline-drawer_ltr.outline-drawer_tiny.outline-drawer_closed{left:-290px}.outline-drawer_ltr.outline-drawer_mini.outline-drawer_closed{left:-490px}.outline-drawer_ltr.outline-drawer_small.outline-drawer_closed{left:-550px}.outline-drawer_ltr.outline-drawer_regular.outline-drawer_closed{left:-690px}.outline-drawer_ltr.outline-drawer_medium.outline-drawer_closed{left:-730px}.outline-drawer_ltr.outline-drawer_large.outline-drawer_closed{left:-970px}.outline-drawer_btt,.outline-drawer_ttb{left:0;width:100%}.outline-drawer_btt.outline-drawer_tiny,.outline-drawer_ttb.outline-drawer_tiny{height:240px}.outline-drawer_btt.outline-drawer_mini,.outline-drawer_ttb.outline-drawer_mini{height:320px}.outline-drawer_btt.outline-drawer_small,.outline-drawer_ttb.outline-drawer_small{height:360px}.outline-drawer_btt.outline-drawer_regular,.outline-drawer_ttb.outline-drawer_regular{height:400px}.outline-drawer_btt.outline-drawer_medium,.outline-drawer_ttb.outline-drawer_medium{height:440px}.outline-drawer_btt.outline-drawer_large,.outline-drawer_ttb.outline-drawer_large{height:480px}.outline-drawer_ttb{border-bottom:1px solid #dcdfe6}.outline-drawer_ttb.outline-drawer_tiny.outline-drawer_closed{top:-250px}.outline-drawer_ttb.outline-drawer_mini.outline-drawer_closed{top:-330px}.outline-drawer_ttb.outline-drawer_small.outline-drawer_closed{top:-370px}.outline-drawer_ttb.outline-drawer_regular.outline-drawer_closed{top:-410px}.outline-drawer_ttb.outline-drawer_medium.outline-drawer_closed{top:-450px}.outline-drawer_ttb.outline-drawer_large.outline-drawer_closed{top:-490px}.outline-drawer_btt{top:initial}.outline-drawer_btt.outline-drawer_tiny.outline-drawer_closed{bottom:-250px}.outline-drawer_btt.outline-drawer_mini.outline-drawer_closed{bottom:-330px}.outline-drawer_btt.outline-drawer_small.outline-drawer_closed{bottom:-370px}.outline-drawer_btt.outline-drawer_regular.outline-drawer_closed{bottom:-410px}.outline-drawer_btt.outline-drawer_medium.outline-drawer_closed{bottom:-450px}.outline-drawer_btt.outline-drawer_large.outline-drawer_closed{bottom:-490px}.outline-drawer_opened{visibility:visible;z-index:var(--outline-zIndex)}.outline-drawer_opened.outline-drawer{position:fixed}.outline-drawer_opened.outline-drawer_rtl{right:0}.outline-drawer_opened.outline-drawer_ltr{left:0}.outline-drawer_opened.outline-drawer_ttb{top:0}.outline-drawer_opened.outline-drawer_btt{bottom:0}.outline-drawer_offset.outline-drawer_ltr,.outline-drawer_offset.outline-drawer_rtl{height:calc(100% - 4em);top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.outline-drawer_offset.outline-drawer_btt,.outline-drawer_offset.outline-drawer_ttb{width:calc(100% - 4em);left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.outline-drawer_offset.outline-drawer_opened.outline-drawer_rtl{right:2em}.outline-drawer_offset.outline-drawer_opened.outline-drawer_ltr{left:2em}.outline-drawer_offset.outline-drawer_opened.outline-drawer_ttb{top:2em}.outline-drawer_offset.outline-drawer_opened.outline-drawer_btt{bottom:2em}.outline-drawer_auto.outline-drawer_ltr,.outline-drawer_auto.outline-drawer_rtl{height:auto;max-height:calc(100% - 4em)}.outline-drawer_full{padding:0}.outline-heading{position:relative;z-index:1;overflow:hidden}.outline-heading__anchor:hover,.outline-heading__anchor:link,.outline-heading__anchor:visited{color:#999;text-decoration:none}.outline-heading__anchor:hover{color:#1f8dd6}.outline-heading:hover .outline-heading__anchor{display:inline-block}.outline-heading_start:hover{overflow:visible}.outline-heading_start .outline-heading__anchor{position:absolute;z-index:2;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:-1em}.outline-chapters{position:relative;z-index:1;margin:0;width:var(--outline-chapters-width);-webkit-transition-duration:.3s;transition-duration:.3s;overflow:auto}.outline-chapters__title{margin:0 16px;height:40px;line-height:40px;padding:0 16px;border-bottom:1px solid #dcdfe6;font-size:16px;font-weight:400;overflow:hidden}.outline-chapters__main{position:relative;z-index:1;margin:0;overflow:hidden}.outline-chapters__item,.outline-chapters__list,.outline-chapters__subject{position:relative;z-index:2;margin:0;padding:0;list-style-type:none;overflow:hidden}.outline-chapters__list{padding:.5em 0}.outline-chapters__subject{padding-left:1em}.outline-chapters__item{margin:0;line-height:30px;font-size:13px;overflow:hidden}.outline-chapters__placeholder{position:absolute;z-index:1;top:0;left:0;width:100%;height:30px;background-color:#f7f8f9;border-left:2px solid #058942;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.outline-chapters__anchor{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;padding:0 1.5em}.outline-chapters__anchor:hover,.outline-chapters__anchor:link,.outline-chapters__anchor:visited{text-decoration:none;color:#555}.outline-chapters__anchor:hover{color:#058942}.outline-chapters__code{padding-right:.5em}.outline-chapters_active.outline-chapters__anchor:hover,.outline-chapters_active.outline-chapters__anchor:link,.outline-chapters_active.outline-chapters__anchor:visited{color:#058942;font-weight:400}.outline-chapters_fixed,.outline-chapters_sticky{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-direction:column;flex-direction:column;z-index:var(--outline-zIndex);top:0;overflow:hidden}.outline-chapters_hidden,.outline-toolbar__button.hide{display:none}.outline-chapters_fixed .outline-chapters__main,.outline-chapters_fixed .outline-chapters__title,.outline-chapters_sticky .outline-chapters__main,.outline-chapters_sticky .outline-chapters__title{-webkit-box-sizing:border-box;box-sizing:border-box}.outline-chapters_fixed .outline-chapters__title,.outline-chapters_sticky .outline-chapters__title{-ms-flex-negative:0;flex-shrink:0}.outline-chapters_fixed .outline-chapters__main,.outline-chapters_sticky .outline-chapters__main{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.outline-chapters_sticky{position:sticky;max-height:var(--outline-sticky-height)}.outline-chapters_fixed{position:fixed;max-height:100%}.outline-chapters_folded{width:0}.outline-toolbar{position:fixed;z-index:99999;margin:0;-webkit-transition-duration:.3s;transition-duration:.3s;overflow:hidden}.outline-toolbar__button{-webkit-box-shadow:0 0 6px 1px #dcdfe6;box-shadow:0 0 6px 1px #dcdfe6;position:relative;z-index:1;margin:10px;width:36px;height:36px;border:1px solid #dcdfe6;border-radius:3px;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;cursor:pointer;text-align:center;color:#555;overflow:hidden}.outline-toolbar__button:hover{color:#058942;border-color:#058942}.outline-toolbar__anchor:hover,.outline-toolbar__anchor:link,.outline-toolbar__anchor:visited{color:#999;text-decoration:none}.outline-toolbar__anchor:hover{color:#058942}.outline-toolbar__icon{position:absolute;z-index:2;top:50%;left:50%;width:20px;height:20px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);fill:currentcolor;overflow:hidden}.outline-toolbar_active.outline-toolbar__button{color:#fff;background-color:#058942;border-color:#058942}.outline-toolbar_active .outline-toolbar__anchor:hover,.outline-toolbar_active .outline-toolbar__anchor:link,.outline-toolbar_active .outline-toolbar__anchor:visited,.outline-toolbar_active.outline-toolbar__button:hover{color:#fff}.outline-toolbar_rounded.outline-toolbar__button{border-radius:18px}.outline-toolbar_disabled .outline-toolbar__anchor:hover,.outline-toolbar_disabled .outline-toolbar__anchor:link,.outline-toolbar_disabled .outline-toolbar__anchor:visited,.outline-toolbar_disabled .outline-toolbar__button,.outline-toolbar_disabled.outline-toolbar__anchor:hover,.outline-toolbar_disabled.outline-toolbar__anchor:link,.outline-toolbar_disabled.outline-toolbar__anchor:visited,.outline-toolbar_disabled.outline-toolbar__button{cursor:not-allowed;color:#999}.outline-toolbar_disabled .outline-toolbar__anchor:hover:hover,.outline-toolbar_disabled .outline-toolbar__anchor:link:hover,.outline-toolbar_disabled .outline-toolbar__anchor:visited:hover,.outline-toolbar_disabled .outline-toolbar__button:hover,.outline-toolbar_disabled.outline-toolbar__anchor:hover:hover,.outline-toolbar_disabled.outline-toolbar__anchor:link:hover,.outline-toolbar_disabled.outline-toolbar__anchor:visited:hover,.outline-toolbar_disabled.outline-toolbar__button:hover{color:#999}.outline-toolbar_disabled .outline-toolbar__button,.outline-toolbar_disabled.outline-toolbar__button{background-color:#f5f5f5}.outline-toolbar_btt,.outline-toolbar_ttb{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.outline-toolbar_btt .outline-toolbar__button,.outline-toolbar_ttb .outline-toolbar__button{display:inline-block}.outline-toolbar_ttb{top:12px}.outline-toolbar_ttb.outline-toolbar_hidden{top:-56px}.outline-toolbar_btt{bottom:12px}.outline-toolbar_btt.outline-toolbar_hidden{bottom:-56px}.outline-toolbar_ltr,.outline-toolbar_rtl{-webkit-transform:translateY(-50%);transform:translateY(-50%);width:56px}.outline-toolbar_rtl{top:50%;right:12px}.outline-toolbar_rtl.outline-toolbar_hidden{right:-86px}.outline-toolbar_ltr{top:50%;left:12px}.outline-toolbar_ltr.outline-toolbar_hidden{left:-86px}.outline-toolbar_btt .outline-toolbar__button.outline-toolbar_hidden,.outline-toolbar_ltr .outline-toolbar__button.outline-toolbar_hidden,.outline-toolbar_rtl .outline-toolbar__button.outline-toolbar_hidden,.outline-toolbar_ttb .outline-toolbar__button.outline-toolbar_hidden{display:none} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJjc3MvZXhhbXBsZS5jc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxuICovXG4vKiA9PT09PT09PT09IGNvbG9ycy50aGVtZSAtIOWfuuehgOminOiJsuWPmOmHj+mbhuWQiCA9PT09PT09PT09ICovXG4vKiA9PT09PT0g6Zi05b2x5qC35byP6K6+572u5Ye95pWwID09PT09PSAqL1xuLyogPT09PT0gU2Nyb2xsYmFyID09PT09ICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDdweDtcbiAgaGVpZ2h0OiA3cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuLnNlY3Rpb24ge1xuICBtYXJnaW46IDFlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2hlYWRlcixcbi5zZWN0aW9uX19jb250ZW50LFxuLnNlY3Rpb25fX2Zvb3RlciB7XG4gIG1hcmdpbjogMCAzZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fdGl0bGUge1xuICBjb2xvcjogIzY2Njtcbn1cbi5zZWN0aW9uX19oMyB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xuICBmb250LXNpemU6IDEuMzVlbTtcbn1cbi5zZWN0aW9uX19oNCB7XG4gIGZvbnQtc2l6ZTogMS4xZW07XG4gIGNvbG9yOiAjNjY2O1xufVxuLnNlY3Rpb25fX2g1IHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGNvbG9yOiAjOTk5O1xufVxuLnNlY3Rpb25fX2RsLFxuLnNlY3Rpb25fX2R0LFxuLnNlY3Rpb25fX2RkIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2RsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xufVxuLnNlY3Rpb25fX2R0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnNlY3Rpb25fX2RkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5zZWN0aW9uX19wcmUge1xuICBtYXJnaW46IDJlbSAwO1xuICBwYWRkaW5nOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29sb3I6ICM2NjY7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLnNlY3Rpb25fX2NvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIG1hcmdpbi10b3A6IDNlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgY29sb3I6ICM5OTk7XG59XG4uY2FzZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgZ2FwOiA0MHB4O1xuICBwYWRkaW5nOiAxZW07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlOmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlX19wcmUsXG4uY2FzZV9fdGV4dGFyZWEge1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xufVxuLmNhc2VfX3ByZSxcbi5jYXNlX19jb2RlLFxuLmNhc2VfX3RleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ29uc29sYXMsIEdlb3JnaWEsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLmNhc2VfX3ByZSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmNhc2VfX3Rvb2xiYXIge1xuICBtYXJnaW46IDAgYXV0bztcbiAgaGVpZ2h0OiAzNnB4O1xuICBsaW5lLWhlaWdodDogMzZweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBwYWRkaW5nOiAwIDE2cHg7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX2FjdGlvbixcbi5jYXNlX19yZW1vdmUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuLmNhc2VfX2FjdGlvbiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xufVxuLmNhc2VfX2FjdGlvbjpmaXJzdC1jaGlsZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbn1cbi5jYXNlX19yZW1vdmUge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uY2FzZV9fY29uc29sZSB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDE4MHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX3RleHRhcmVhIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogMWVtO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uY2FzZV9fbGlzdCxcbi5jYXNlX19pdGVtIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY2FzZV9fbGlzdCB7XG4gIGhlaWdodDogMzYwcHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5jYXNlX19pdGVtIHtcbiAgaGVpZ2h0OiAzNnB4O1xuICBsaW5lLWhlaWdodDogMzZweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4uY2FzZV9faXRlbTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y4Zjk7XG59XG4ucGFwZXIge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgbWFyZ2luOiAyZW0gYXV0bztcbiAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gIHBhZGRpbmc6IDJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ucGFwZXIuZmxleCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5wYXBlci5mbGV4IC5hcnRpY2xlIHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ucGFwZXIuZmxleCAuYXJ0aWNsZV9fbWFpbiB7XG4gIGhlaWdodDogMTAwJTtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLnBhcGVyLmZsZXggLmFydGljbGVfX2FzaWRlIHtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5oZWFkZXIge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB6LWluZGV4OiAzO1xuICB0b3A6IDA7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5oZWFkZXJfc3RpY2t5IHtcbiAgcGFkZGluZy1sZWZ0OiAyNjBweDtcbn1cbi5hcnRpY2xlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBhZGRpbmc6IDJlbSAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xufVxuLmFydGljbGVfX21haW4ge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgcGFkZGluZzogMCAyZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYXJ0aWNsZV9fbWFpbiAuc2VjdGlvbiB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2NvbnRlbnQsXG4uYXJ0aWNsZV9fbWFpbiAuc2VjdGlvbl9fZm9vdGVyLFxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2hlYWRlciB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2hlYWRlcixcbi5hcnRpY2xlX19tYWluIC5zZWN0aW9uX19jb250ZW50IHtcbiAgbWFyZ2luOiAwO1xufVxuLmFydGljbGVfX2FzaWRlIHtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgd2lkdGg6IDI0MHB4O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xufVxuLmFydGljbGVfX2FzaWRlLmx0ciB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1sZWZ0OiBub25lO1xufVxuLmFydGljbGVfX2FzaWRlIC5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbnByZSxcbi5zZWN0aW9uX19wcmUge1xuICBwYWRkaW5nOiAyZW07XG4gIGZvbnQtZmFtaWx5OiBcIkNvdXJpZXIgTmV3XCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbmNvZGUsXG4uc2VjdGlvbl9fY29kZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkNvdXJpZXIgTmV3XCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE2cHg7XG59XG4uZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkY2RmZTY7XG4gIHBhZGRpbmc6IDNlbSAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZm9vdGVyIGE6bGluayxcbi5mb290ZXIgYTp2aXNpdGVkLFxuLmZvb3RlciBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5mb290ZXIgYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLnV0aWxzLWJvcmRlci1yaWdodCB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qID09PT09PT09PT0gaWNvbi50aGVtZSAtIHN2ZyDlm77moIfnmoTmoLflvI8gPT09PT09PT09PSAqL1xuLm91dGxpbmUtaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWljb25fX3N2ZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDFlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbjpyb290IHtcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcbn1cbi5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogLTE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19tb2RhbCB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjE7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlLFxuLm91dGxpbmUtZHJhd2VyX19tYWluLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDUycHg7XG4gIGxpbmUtaGVpZ2h0OiA1MnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXNpemU6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIC5vdXRsaW5lLWljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2U6aG92ZXIge1xuICBjb2xvcjogIzY2Njtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbWFpbiB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19vdmVybGF5IHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAwLjE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICB3aWR0aDogMjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21pbmkge1xuICB3aWR0aDogNDgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3NtYWxsLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9zbWFsbCB7XG4gIHdpZHRoOiA1NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIHdpZHRoOiA2ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICB3aWR0aDogNzIwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX2xhcmdlLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9sYXJnZSB7XG4gIHdpZHRoOiA5NjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTczMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTI5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC02OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yixcbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueSB7XG4gIGhlaWdodDogMjQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21pbmkge1xuICBoZWlnaHQ6IDMyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICBoZWlnaHQ6IDM2MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyIHtcbiAgaGVpZ2h0OiA0MDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICBoZWlnaHQ6IDQ0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICBoZWlnaHQ6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB0b3A6IGluaXRpYWw7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xuICB0b3A6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0ZW0pO1xuICBsZWZ0OiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIHJpZ2h0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBsZWZ0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl90dGIge1xuICB0b3A6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGJvdHRvbTogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfcnRsLFxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xufVxuLm91dGxpbmUtZHJhd2VyX2Z1bGwge1xuICBwYWRkaW5nOiAwO1xufVxuLm91dGxpbmUtaGVhZGluZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xufVxuLm91dGxpbmUtaGVhZGluZzpob3ZlciAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0OmhvdmVyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0IC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgbGVmdDogLTFlbTtcbn1cbi8qKlxuICogZWxsaXBzaXMubGVzcyAtIOaWh+acrOecgeeVpSBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4xMVxuICovXG4vKiA9PT09PT0g5paH5pys55yB55Wl5Ye95pWwID09PT09PSAqL1xuLm91dGxpbmUtY2hhcHRlcnMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IHZhcigtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGgpO1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICBtYXJnaW46IDAgMTZweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBsaW5lLWhlaWdodDogNDBweDtcbiAgcGFkZGluZzogMCAxNnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19saXN0LFxuLm91dGxpbmUtY2hhcHRlcnNfX3N1YmplY3QsXG4ub3V0bGluZS1jaGFwdGVyc19faXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbGlzdCB7XG4gIHBhZGRpbmc6IDAuNWVtIDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fc3ViamVjdCB7XG4gIHBhZGRpbmctbGVmdDogMWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2l0ZW0ge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fcGxhY2Vob2xkZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmOTtcbiAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMDU4OTQyO1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAwIDEuNWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICM1NTU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fY29kZSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfYWN0aXZlLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtY2hhcHRlcnNfYWN0aXZlLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtY2hhcHRlcnNfYWN0aXZlLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5LFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHotaW5kZXg6IHZhcigtLW91dGxpbmUtekluZGV4KTtcbiAgdG9wOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlIHtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgbWF4LWhlaWdodDogdmFyKC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0KTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2ZvbGRlZCB7XG4gIHdpZHRoOiAwO1xufVxuLyogPT09PT09PT09PSBidXR0b25zLnRoZW1lIC0g5oyJ6ZKu5a+86Iiq5qC35byPID09PT09PT09PT0gKi9cbi5vdXRsaW5lLXRvb2xiYXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5O1xuICBtYXJnaW46IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAxMHB4O1xuICB3aWR0aDogMzZweDtcbiAgaGVpZ2h0OiAzNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGNkZmU2O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICM1NTU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgYm9yZGVyLWNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLmhpZGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2ljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNTg5NDI7XG4gIGJvcmRlci1jb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ub3V0bGluZS10b29sYmFyX3JvdW5kZWQub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAxOHB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBjb2xvcjogIzk5OTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluazpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbms6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQ6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIsXG4ub3V0bGluZS10b29sYmFyX2J0dCB7XG4gIGxlZnQ6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9idHQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIge1xuICB0b3A6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX3R0Yi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgdG9wOiAtNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYnR0IHtcbiAgYm90dG9tOiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9idHQub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGJvdHRvbTogLTU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bCxcbi5vdXRsaW5lLXRvb2xiYXJfbHRyIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB3aWR0aDogNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsIHtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIHJpZ2h0OiAtODZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfbHRyIHtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX2x0ci5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgbGVmdDogLTg2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfcnRsIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9idHQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX2x0ciAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zjg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMenhwYm5CMWRDQmpjM01nTWo0aUxDSnpZM0p2Ykd4aVlYSXViR1Z6Y3lJc0luTmxZM1JwYjI0dWJHVnpjeUlzSW1OaGMyVXViR1Z6Y3lJc0luQmhaMlZ5TG14bGMzTWlMQ0l1TGk4dUxpOXpjbU12ZEdobGJXVXZjMmhoWkc5M0xteGxjM01pTENJdUxpOHVMaTl6Y21NdmRHaGxiV1V2YVdOdmJuTXViR1Z6Y3lJc0lpNHVMeTR1TDNOeVl5OTBhR1Z0WlM5MllYSnBZV0pzWlhNdWJHVnpjeUlzSWk0dUx5NHVMM055WXk5MGFHVnRaUzlrY21GM1pYSXViR1Z6Y3lJc0lpNHVMeTR1TDNOeVl5OTBhR1Z0WlM5aGJtTm9iM0p6TG14bGMzTWlMQ0l1TGk4dUxpOXpjbU12ZEdobGJXVXZZMmhoY0hSbGNuTXViR1Z6Y3lJc0lpNHVMeTR1TDNOeVl5OTBhR1Z0WlM5bGJHeHBjSE5wY3k1c1pYTnpJaXdpTGk0dkxpNHZjM0pqTDNSb1pXMWxMM1J2YjJ4aVlYSXViR1Z6Y3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFUczdPenM3UjBGTFJ6dEJRVU5JTEcxRVFVRnRSRHRCUVVOdVJDdzBRa0ZCTkVJN1FVRkROVUlzTWtKQlFUSkNPMEZEVUROQ08wVkJRMFVzVjBGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN3eVFrRkJRVHREUkZORU8wRkRUa1E3UlVGRFJTd3lRa0ZCUVR0RFJGRkVPMEZEVEVRN1JVRkRSU3h6UTBGQlFUdEZRVU5CTERKQ1FVRkJPME5FVDBRN1FVTktSRHRGUVVORkxITkRRVUZCTzBWQlEwRXNNa0pCUVVFN1EwUk5SRHRCUTBoRU8wVkJRMFVzYzBOQlFVRTdRMFJMUkR0QlEwWkVPMFZCUTBVc2MwTkJRVUU3UTBSSlJEdEJSVFZDUkR0RlFVTkZMR05CUVVFN1JVRkRRU3hwUWtGQlFUdERSamhDUkR0QlJUVkNRenM3TzBWQlIwVXNZMEZCUVR0RlFVTkJMR2xDUVVGQk8wTkdPRUpJTzBGRk0wSkRPMFZCUTBVc1dVRkJRVHREUmpaQ1NEdEJSVEZDUXp0RlFVTkZMR1ZCUVVFN1JVRkRRU3hyUWtGQlFUdERSalJDU0R0QlJYcENRenRGUVVORkxHbENRVUZCTzBWQlEwRXNXVUZCUVR0RFJqSkNTRHRCUlhoQ1F6dEZRVU5GTEdWQlFVRTdSVUZEUVN4WlFVRkJPME5HTUVKSU8wRkZka0pET3pzN1JVRkhSU3hWUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEdsQ1FVRkJPME5HZVVKSU8wRkZkRUpETzBWQlEwVXNiVUpCUVVFN1JVRkRRU3hYUVVGQk8wTkdkMEpJTzBGRmNrSkRPMFZCUTBVc2MwSkJRVUU3UTBaMVFrZzdRVVZ3UWtNN1JVRkRSU3h6UWtGQlFUdEZRVU5CTEdWQlFVRTdRMFp6UWtnN1FVVnVRa003UlVGRFJTeGpRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzYTBKQlFVRTdSVUZEUVN4cFFrRkJRVHRGUVVOQkxEQkNRVUZCTzBWQlEwRXNkVUpCUVVFN1JVRkRRU3h0UWtGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4bFFVRkJPME5HY1VKSU8wRkZiRUpETzBWQlEwVXNaVUZCUVR0RlFVTkJMR1ZCUVVFN1JVRkRRU3hwUWtGQlFUdERSbTlDU0R0QlJXcENRenRGUVVORkxESkNRVUZCTzBWQlEwRXNaMEpCUVVFN1JVRkRRU3d3UWtGQlFUdEZRVU5CTEZsQlFVRTdRMFp0UWtnN1FVYzVSa1E3UlVGRFJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hqUVVGQk8wVkJRMEVzYzBOQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxESkNRVUZCTzBWQlEwRXNPRUpCUVVFN1JVRkRRU3hwUWtGQlFUdERTR2RIUkR0QlJ6bEdRenRGUVVORkxGbEJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hQUVVGQk8wVkJRMEVzVlVGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4VFFVRkJPMFZCUTBFc05FSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFNHZEhTRHRCUnpkR1F6czdSVUZGUlN4blFrRkJRVHRGUVVOQkxHdENRVUZCTzBOSUswWklPMEZITlVaRE96czdSVUZIUlN4cFJVRkJRVHREU0RoR1NEdEJSek5HUXp0RlFVTkZMRlZCUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzTUVKQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc2JVSkJRVUU3UlVGRFFTd3JRa0ZCUVR0VlFVRkJMSFZDUVVGQk8wVkJRMEVzWlVGQlFUdERTRFpHU0R0QlJ6RkdRenRGUVVORkxHVkJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2EwSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFNEUkdTRHRCUjNwR1F6czdSVUZGUlN4blFrRkJRVHRGUVVOQkxHVkJRVUU3UlVGRFFTd3dRa0ZCUVR0TFFVRkJMSFZDUVVGQk8wMUJRVUVzYzBKQlFVRTdWVUZCUVN4clFrRkJRVHREU0RKR1NEdEJSM2hHUXp0RlFVTkZMR2RDUVVGQk8wVkJRMEVzYlVKQlFVRTdRMGd3UmtnN1FVZDRSa2M3UlVGRFJTeG5Ra0ZCUVR0RFNEQkdURHRCUjNSR1F6dEZRVU5GTEdGQlFVRTdRMGgzUmtnN1FVZHlSa003UlVGRFJTeGxRVUZCTzBWQlEwRXNZMEZCUVR0RlFVTkJMSFZDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMGgxUmtnN1FVZHdSa003UlVGRFJTeGxRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzWTBGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWQlEwRXNaVUZCUVR0RFNITkdTRHRCUjI1R1F6czdSVUZGUlN4VlFVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxITkNRVUZCTzBWQlEwRXNhVUpCUVVFN1EwaHhSa2c3UVVkc1JrTTdSVUZEUlN4alFVRkJPMFZCUTBFc01rSkJRVUU3UlVGRFFTdzRRa0ZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzWlVGQlFUdERTRzlHU0R0QlIycEdRenRGUVVORkxHRkJRVUU3UlVGRFFTeHJRa0ZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzWjBKQlFVRTdRMGh0UmtnN1FVZHFSa2M3UlVGRFJTd3dRa0ZCUVR0RFNHMUdURHRCU1hwTlJEdEZRMU4zUkN4M1EwRkJRVHRWUVVGQkxHZERRVUZCTzBWRVVIUkVMR2xDUVVGQk8wVkJRMEVzYTBKQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc2RVSkJRVUU3UlVGRFFTd3JRa0ZCUVR0VlFVRkJMSFZDUVVGQk8wTktNazFFTzBGSmVrMURPMFZCUTBVc2NVSkJRVUU3UlVGQlFTeHhRa0ZCUVR0RlFVRkJMR05CUVVFN1JVRkRRU3dyUWtGQlFUdEZRVUZCTERoQ1FVRkJPMDFCUVVFc2QwSkJRVUU3VlVGQlFTeHZRa0ZCUVR0RlFVTkJMSE5DUVVGQk8wMUJRVUVzYTBKQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHZENRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hwUWtGQlFUdERTakpOU0R0QlNYQk9RenRGUVZsSkxEWkNRVUZCTzBWQlFVRXNPRUpCUVVFN1RVRkJRU3d5UWtGQlFUdFZRVUZCTEhWQ1FVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxDdENRVUZCTzFWQlFVRXNkVUpCUVVFN1Ewb3lUVXc3UVVsNlRVczdSVUZEUlN4aFFVRkJPMFZCUTBFc0swSkJRVUU3VlVGQlFTeDFRa0ZCUVR0RlFVTkJMR1ZCUVVFN1Ewb3lUVkE3UVVsNFRVczdSVUZEUlN4blEwRkJRVHREU2pCTlVEdEJTWEJOUkR0RlFVTkZMR2xDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEU5QlFVRTdSVUZEUVN4bFFVRkJPMFZCUTBFc09FSkJRVUU3UlVGRFFTeDFRa0ZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzYTBOQlFVRTdWVUZCUVN3d1FrRkJRVHRGUVVOQkxHbENRVUZCTzBOS2MwMUVPMEZKY0UxRE8wVkJRMFVzYjBKQlFVRTdRMHB6VFVnN1FVbHNUVVE3UlVGRFJTeHhRa0ZCUVR0RlFVRkJMSEZDUVVGQk8wVkJRVUVzWTBGQlFUdEZRVU5CTEN0Q1FVRkJPMFZCUVVFc09FSkJRVUU3VFVGQlFTeDNRa0ZCUVR0VlFVRkJMRzlDUVVGQk8wVkJRMEVzYzBKQlFVRTdUVUZCUVN4clFrRkJRVHRGUVVOQkxHVkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMR3RDUVVGQk8wTktiMDFFTzBGSmJFMURPMFZCUTBVc2IwSkJRVUU3VFVGQlFTeFpRVUZCTzFWQlFVRXNVVUZCUVR0RlFVTkJMR1ZCUVVFN1JVRkRRU3hwUWtGQlFUdERTbTlOU0R0QlNYWk5RenRGUVUxSkxHdENRVUZCTzBOS2IwMU1PMEZKYkUxTE96czdSVUZIUlN4clFrRkJRVHREU205TlVEdEJTV3BOU3pzN1JVRkZSU3hWUVVGQk8wTktiVTFRTzBGSk9VeERPMFZCUTBVc2NVSkJRVUU3VFVGQlFTeGxRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMRFJDUVVGQk8wVkJRMEVzYTBOQlFVRTdWVUZCUVN3d1FrRkJRVHREU21kTlNEdEJTVGxNUnp0RlFVTkZMRFpDUVVGQk8wVkJRMEVzYTBKQlFVRTdRMHBuVFV3N1FVbDRUVU03UlVGWlNTeDFRa0ZCUVR0RFNpdE1URHRCU1RGTVJEczdSVUZGUlN4aFFVRkJPMFZCUTBFc09FTkJRVUU3UlVGRFFTd3dRa0ZCUVR0RlFVTkJMR1ZCUVVFN1EwbzBURVE3UVVsNlRFUTdPMFZCUlVVc09FTkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RFNqSk1SRHRCU1hoTVJEdEZRVU5GTERoQ1FVRkJPMFZCUTBFc1pVRkJRVHRGUVVOQkxHMUNRVUZCTzBOS01FeEVPMEZKZGt4SE96czdSVUZIUlN4elFrRkJRVHRGUVVOQkxHVkJRVUU3UTBwNVRFdzdRVWwwVEVjN1JVRkRSU3d5UWtGQlFUdERTbmRNVER0QlNXNU1SRHRGUVVORkxHZERRVUZCTzBOS2NVeEVPMEZKYkV4RU8wVkJRMFVzWTBGQlFUdERTbTlNUkR0QlFVTkVMR3RFUVVGclJEdEJUVGRVYkVRN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4elFrRkJRVHRGUVVOQkxIVkNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMRmxCUVVFN1JVRkRRU3hwUWtGQlFUdERUaXRVUkR0QlRUZFVRenRGUVVORkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMRk5CUVVFN1JVRkRRU3hWUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4dFFrRkJRVHRGUVVOQkxIbERRVUZCTzFWQlFVRXNhVU5CUVVFN1JVRkRRU3hwUWtGQlFUdERUaXRVU0R0QlQyeFdSRHRGUVVORExIVkNRVUZCTzBWQlEwUXNPRUpCUVVFN1JVRkJhVU1zSzBKQlFVRTdRMUJ4Vm1oRE8wRlJibFpFTzBWQlEwVXNiVUpCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzVDBGQlFUdEZRVU5CTEZGQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTd3JRa0ZCUVR0VlFVRkJMSFZDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4cFFrRkJRVHREVW5GV1JEdEJVVzVXUXp0RlNGQnpSQ3gzUTBGQlFUdFZRVUZCTEdkRFFVRkJPMFZIVTNCRUxIRkNRVUZCTzBWQlFVRXNjVUpCUVVFN1JVRkJRU3hqUVVGQk8wVkJRMEVzTmtKQlFVRTdSVUZCUVN3NFFrRkJRVHROUVVGQkxESkNRVUZCTzFWQlFVRXNkVUpCUVVFN1JVRkRRU3h6UWtGQlFUdE5RVUZCTEd0Q1FVRkJPMFZCUTBFc2JVSkJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMSFZDUVVGQk8wVkJRMEVzYTBOQlFVRTdWVUZCUVN3d1FrRkJRVHRGUVVOQkxHbENRVUZCTzBOU2NWWklPMEZSYkZaRE96czdSVUZIUlN4WlFVRkJPMFZCUTBFc0swSkJRVUU3VlVGQlFTeDFRa0ZCUVR0RFVtOVdTRHRCVVdwV1F6czdSVUZGUlN4eFFrRkJRVHROUVVGQkxHVkJRVUU3UTFKdFZrZzdRVkZvVmtNN096dEZRVWRGTEdkQ1FVRkJPME5TYTFaSU8wRlJMMVZET3p0RlFVVkZMRzFDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEdWQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc2EwSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFVtbFdTRHRCVVRsVlF6dEZRVU5GTEdkQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UlVGRFFTeGxRVUZCTzBWQlEwRXNLMEpCUVVFN1ZVRkJRU3gxUWtGQlFUdEZRVU5CTEdsRFFVRkJPME5TWjFaSU8wRlJOMVZETzBWQlEwVXNiVUpCUVVFN1JVRkRRU3hYUVVGQk8wVkJRMEVzVTBGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4WlFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxHdENRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4blFrRkJRVHRGUVVOQkxHOURRVUZCTzFWQlFVRXNORUpCUVVFN1JVRkRRU3hwUWtGQlFUdERVaXRWU0R0QlVUVldRenRGUVdkQ1NTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hQUVVGQk8wVkJRMEVzVVVGQlFUdERVaXRWVER0QlVUVlZSenRGUVVORkxGbEJRVUU3UTFJNFZVdzdRVkV4VlVNN1JVRkRSU3h2UWtGQlFUdE5RVUZCTEZsQlFVRTdWVUZCUVN4UlFVRkJPMFZCUTBFc1pVRkJRVHREVWpSVlNEdEJVWHBWUXp0RlFVTkZMR1ZCUVVFN1JVRkRRU3hyUWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5TTWxWSU8wRlJlRlZETzBWQlEwVXNXVUZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEU5QlFVRTdSVUZEUVN4UlFVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTeDFRa0ZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3hwUWtGQlFUdERVakJWU0R0QlVYQlZTenM3UlVGRFJTeGhRVUZCTzBOU2RWVlFPMEZSY0ZWTE96dEZRVU5GTEdGQlFVRTdRMUoxVlZBN1FWRndWVXM3TzBWQlEwVXNZVUZCUVR0RFVuVlZVRHRCVVhCVlN6czdSVUZEUlN4aFFVRkJPME5TZFZWUU8wRlJjRlZMT3p0RlFVTkZMR0ZCUVVFN1ExSjFWVkE3UVZGd1ZVczdPMFZCUTBVc1lVRkJRVHREVW5WVlVEdEJVV3hWUXp0RlFVTkZMQ3RDUVVGQk8wTlNiMVZJTzBGUmFGVlBPMFZCUTBVc1kwRkJRVHREVW10VlZEdEJVVGRVVHp0RlFVTkZMR05CUVVFN1ExSXJWRlE3UVZFeFZFODdSVUZEUlN4alFVRkJPME5TTkZSVU8wRlJkbFJQTzBWQlEwVXNZMEZCUVR0RFVubFVWRHRCVVhCVVR6dEZRVU5GTEdOQlFVRTdRMUp6VkZRN1FWRnFWRTg3UlVGRFJTeGpRVUZCTzBOU2JWUlVPMEZSTjFORE8wVkJRMFVzWjBOQlFVRTdRMUlyVTBnN1FWRXpVMDg3UlVGRFJTeGhRVUZCTzBOU05sTlVPMEZSZUZOUE8wVkJRMFVzWVVGQlFUdERVakJUVkR0QlVYSlRUenRGUVVORkxHRkJRVUU3UTFKMVUxUTdRVkZzVTA4N1JVRkRSU3hoUVVGQk8wTlNiMU5VTzBGUkwxSlBPMFZCUTBVc1lVRkJRVHREVW1sVFZEdEJVVFZTVHp0RlFVTkZMR0ZCUVVFN1ExSTRVbFE3UVZGNFVrTTdPMFZCUlVVc1VVRkJRVHRGUVVOQkxGbEJRVUU3UTFJd1VrZzdRVkYyVWtzN08wVkJRMFVzWTBGQlFUdERVakJTVUR0QlVYWlNTenM3UlVGRFJTeGpRVUZCTzBOU01GSlFPMEZSZGxKTE96dEZRVU5GTEdOQlFVRTdRMUl3VWxBN1FWRjJVa3M3TzBWQlEwVXNZMEZCUVR0RFVqQlNVRHRCVVhaU1N6czdSVUZEUlN4alFVRkJPME5TTUZKUU8wRlJkbEpMT3p0RlFVTkZMR05CUVVFN1ExSXdVbEE3UVZGeVVrTTdSVUZEUlN4cFEwRkJRVHREVW5WU1NEdEJVVzVTVHp0RlFVTkZMRmxCUVVFN1ExSnhVbFE3UVZGb1VrODdSVUZEUlN4WlFVRkJPME5TYTFKVU8wRlJOMUZQTzBWQlEwVXNXVUZCUVR0RFVpdFJWRHRCVVRGUlR6dEZRVU5GTEZsQlFVRTdRMUkwVVZRN1FWRjJVVTg3UlVGRFJTeFpRVUZCTzBOU2VWRlVPMEZSY0ZGUE8wVkJRMFVzV1VGQlFUdERVbk5SVkR0QlVXaFJRenRGUVVORkxHRkJRVUU3UlVGRFFTdzRRa0ZCUVR0RFVtdFJTRHRCVVRsUVR6dEZRVU5GTEdWQlFVRTdRMUpuVVZRN1FWRXpVRTg3UlVGRFJTeGxRVUZCTzBOU05sQlVPMEZSZUZCUE8wVkJRMFVzWlVGQlFUdERVakJRVkR0QlVYSlFUenRGUVVORkxHVkJRVUU3UTFKMVVGUTdRVkZzVUU4N1JVRkRSU3hsUVVGQk8wTlNiMUJVTzBGUkwwOVBPMFZCUTBVc1pVRkJRVHREVW1sUVZEdEJVVE5QUXp0RlFVTkZMRzlDUVVGQk8wVkJRMEVzSzBKQlFVRTdRMUkyVDBnN1FWRXpUMGM3UlVGRFJTeG5Ra0ZCUVR0RFVqWlBURHRCVVROUFN6dEZRVU5GTEZOQlFVRTdRMUkyVDFBN1FWRXhUMHM3UlVGRFJTeFJRVUZCTzBOU05FOVFPMEZSZWs5TE8wVkJRMFVzVDBGQlFUdERVakpQVUR0QlVYaFBTenRGUVVORkxGVkJRVUU3UTFJd1QxQTdRVkZ1VDBzN08wVkJSVVVzZVVKQlFVRTdSVUZEUVN4VFFVRkJPMFZCUTBFc2IwTkJRVUU3VlVGQlFTdzBRa0ZCUVR0RFVuRlBVRHRCVVd4UFN6czdSVUZGUlN4M1FrRkJRVHRGUVVOQkxGVkJRVUU3UlVGRFFTeHZRMEZCUVR0VlFVRkJMRFJDUVVGQk8wTlNiMDlRTzBGUkwwNVRPMFZCUTBVc1YwRkJRVHREVW1sUFdEdEJVVGxPVXp0RlFVTkZMRlZCUVVFN1ExSm5UMWc3UVZFM1RsTTdSVUZEUlN4VFFVRkJPME5TSzA1WU8wRlJOVTVUTzBWQlEwVXNXVUZCUVR0RFVqaE9XRHRCVVhKT1N6czdSVUZGUlN4aFFVRkJPMFZCUTBFc05rSkJRVUU3UTFKMVRsQTdRVkZzVGtNN1JVRkRSU3hYUVVGQk8wTlNiMDVJTzBGVGRHNUNSRHRGUVVORkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMR2xDUVVGQk8wTlVkMjVDUkR0QlUzUnVRa003UlVGRFJTeGpRVUZCTzBOVWQyNUNTRHRCVTNSdVFrYzdPenRGUVVkRkxGbEJRVUU3UlVGRFFTeHpRa0ZCUVR0RFZIZHVRa3c3UVZOeWJrSkhPMFZCUTBVc1pVRkJRVHREVkhWdVFrdzdRVk51YmtKRE8wVkJSVWtzYzBKQlFVRTdRMVJ2YmtKTU8wRlRMMjFDUnp0RlFVTkZMR3RDUVVGQk8wTlVhVzVDVER0QlUyNXVRa003UlVGTlNTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hUUVVGQk8wVkJRMEVzYjBOQlFVRTdWVUZCUVN3MFFrRkJRVHRGUVVOQkxGZEJRVUU3UTFSbmJrSk1PMEZCUTBRN096czdPMGRCUzBjN1FVRkRTQ3d3UWtGQk1FSTdRVlY2Y0VJeFFqdEZRVU5GTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxGVkJRVUU3UlVGRFFTeHhRMEZCUVR0RlFVTkJMR3REUVVGQk8xVkJRVUVzTUVKQlFVRTdSVUZEUVN4bFFVRkJPME5XTW5CQ1JEdEJWWHB3UWtNN1JVRkRSU3hsUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEd0Q1FVRkJPMFZCUTBFc1owSkJRVUU3UlVGRFFTeHBRMEZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzYVVKQlFVRTdSVUZEUVN4cFFrRkJRVHREVmpKd1FrZzdRVlY0Y0VKRE8wVkJRMFVzYlVKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxHbENRVUZCTzBOV01IQkNTRHRCVlhad1FrTTdPenRGUVVkRkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMRlZCUVVFN1JVRkRRU3hYUVVGQk8wVkJRMEVzYzBKQlFVRTdSVUZEUVN4cFFrRkJRVHREVm5sd1FrZzdRVlYwY0VKRE8wVkJRMFVzYVVKQlFVRTdRMVozY0VKSU8wRlZjbkJDUXp0RlFVTkZMR3RDUVVGQk8wTldkWEJDU0R0QlZYQndRa003UlVGRFJTeFZRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5XYzNCQ1NEdEJWVzV3UWtNN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4UFFVRkJPMFZCUTBFc1VVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNNRUpCUVVFN1JVRkRRU3dyUWtGQlFUdEZRVU5CTEd0RFFVRkJPMVZCUVVFc01FSkJRVUU3UlVGRFFTd3JRa0ZCUVR0VlFVRkJMSFZDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMVp4Y0VKSU8wRlZiSEJDUXp0RlF6ZEVRU3h2UWtGQlFUdEZRVU5CTEhkQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UlVRMlJFVXNaVUZCUVR0RlFVTkJMR2xDUVVGQk8wTldjM0JDU0R0QlZYQndRa2M3T3p0RlFVZEZMSE5DUVVGQk8wVkJRMEVzV1VGQlFUdERWbk53UWt3N1FWVnVjRUpITzBWQlEwVXNaVUZCUVR0RFZuRndRa3c3UVZWcWNFSkRPMFZCUTBVc2NVSkJRVUU3UTFadGNFSklPMEZWT1c5Q1N6czdPMFZCUjBVc1pVRkJRVHRGUVVOQkxHbENRVUZCTzBOV1ozQkNVRHRCVlROdlFrTTdPMFZCUlVVc2NVSkJRVUU3UlVGQlFTeHhRa0ZCUVR0RlFVRkJMR05CUVVFN1JVRkRRU3h6UWtGQlFUdE5RVUZCTEd0Q1FVRkJPMFZCUTBFc05rSkJRVUU3UlVGQlFTdzRRa0ZCUVR0TlFVRkJMREpDUVVGQk8xVkJRVUVzZFVKQlFVRTdSVUZEUVN3clFrRkJRVHRGUVVOQkxFOUJRVUU3UlVGRFFTeHBRa0ZCUVR0RFZqWnZRa2c3UVZVeGIwSkxPenM3TzBWQlJVVXNLMEpCUVVFN1ZVRkJRU3gxUWtGQlFUdERWamh2UWxBN1FWVXpiMEpMT3p0RlFVTkZMSEZDUVVGQk8wMUJRVUVzWlVGQlFUdERWamh2UWxBN1FWVXpiMEpMT3p0RlFVTkZMRzlDUVVGQk8wMUJRVUVzV1VGQlFUdFZRVUZCTEZGQlFVRTdSVUZEUVN4bFFVRkJPME5XT0c5Q1VEdEJWWHB2UWtNN1JVRkRSU3hwUWtGQlFUdEZRVU5CTEhsRFFVRkJPME5XTW05Q1NEdEJWWGh2UWtNN1JVRkRSU3huUWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5XTUc5Q1NEdEJWWFp2UWtNN1JVRkRSU3hqUVVGQk8wTldlVzlDU0R0QlZYUnZRa003UlVGRFJTeFRRVUZCTzBOV2QyOUNTRHRCUVVORUxHdEVRVUZyUkR0QldYQjRRbXhFTzBWQlEwVXNaMEpCUVVFN1JVRkRRU3hsUVVGQk8wVkJRMEVzVlVGQlFUdEZRVU5CTEd0RFFVRkJPMVZCUVVFc01FSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFduTjRRa1E3UVZsd2VFSkRPMFZRUm5ORUxIZERRVUZCTzFWQlFVRXNaME5CUVVFN1JVOUpjRVFzYlVKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNNRUpCUVVFN1JVRkRRU3h0UWtGQlFUdEZRVU5CTEN0Q1FVRkJPMVZCUVVFc2RVSkJRVUU3UlVGRFFTeDFRa0ZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4WlFVRkJPMFZCUTBFc2FVSkJRVUU3UTFwemVFSklPMEZaY0hoQ1J6dEZRVU5GTEdWQlFVRTdSVUZEUVN4elFrRkJRVHREV25ONFFrdzdRVmx1ZUVKSE8wVkJRMFVzWTBGQlFUdERXbkY0UWt3N1FWbG9lRUpIT3pzN1JVRkhSU3haUVVGQk8wVkJRMEVzYzBKQlFVRTdRMXByZUVKTU8wRlpMM2RDUnp0RlFVTkZMR1ZCUVVFN1ExcHBlRUpNTzBGWk4zZENRenRGUVVORkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMRk5CUVVFN1JVRkRRU3hWUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4NVEwRkJRVHRWUVVGQkxHbERRVUZCTzBWQlEwRXNiVUpCUVVFN1JVRkRRU3hwUWtGQlFUdERXaXQzUWtnN1FWa3hkMEpMTzBWQlEwVXNXVUZCUVR0RlFVTkJMREJDUVVGQk8wVkJRMEVzYzBKQlFVRTdRMW8wZDBKUU8wRlpNWGRDVHp0RlFVTkZMRmxCUVVFN1ExbzBkMEpVTzBGWmRIZENTenM3TzBWQlIwVXNXVUZCUVR0RFduZDNRbEE3UVZsc2QwSkhPMFZCUTBVc2IwSkJRVUU3UTFwdmQwSk1PMEZaTjNaQ1N6czdPenM3T3pzN1JVRkpSU3h2UWtGQlFUdEZRVU5CTEZsQlFVRTdRMXB0ZDBKUU8wRlphbmRDVHpzN096czdPenM3UlVGRFJTeFpRVUZCTzBOYU1IZENWRHRCV1hSM1FrczdPMFZCUTBVc01FSkJRVUU3UTFwNWQwSlFPMEZaY0hkQ1F6czdSVUZGUlN4VlFVRkJPMFZCUTBFc2IwTkJRVUU3VlVGQlFTdzBRa0ZCUVR0RFduTjNRa2c3UVZsNmQwSkRPenRGUVUxSkxITkNRVUZCTzBOYWRYZENURHRCV1c1M1FrTTdSVUZEUlN4VlFVRkJPME5hY1hkQ1NEdEJXVzUzUWtjN1JVRkRSU3hYUVVGQk8wTmFjWGRDVER0QldXcDNRa003UlVGRFJTeGhRVUZCTzBOYWJYZENTRHRCV1dwM1FrYzdSVUZEUlN4alFVRkJPME5hYlhkQ1REdEJXUzkyUWtNN08wVkJSVVVzYjBOQlFVRTdWVUZCUVN3MFFrRkJRVHRGUVVOQkxGbEJRVUU3UTFwcGQwSklPMEZaT1haQ1F6dEZRVU5GTEZOQlFVRTdSVUZEUVN4WlFVRkJPME5hWjNkQ1NEdEJXVGwyUWtjN1JVRkRSU3hoUVVGQk8wTmFaM2RDVER0QldUVjJRa003UlVGRFJTeFRRVUZCTzBWQlEwRXNWMEZCUVR0RFdqaDJRa2c3UVZrMWRrSkhPMFZCUTBVc1dVRkJRVHREV2poMlFrdzdRVmx5ZGtKTE96czdPMFZCUTBVc1kwRkJRVHREV2pCMlFsQWlMQ0ptYVd4bElqb2laWGhoYlhCc1pTNWpjM01pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUhOb1lXUnZkeTVzWlhOeklDMGc2WmkwNWIyeDVxQzM1YnlQNks2KzU3MnVJRzFwZUdsdWVDRGxoNzNtbGJCY2JpQXFJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNiaUFxSUVOeVpXRjBaV1FnUW5rNklGbGhiMmhoYVhocFlXOWNiaUFxSUZWd1pHRjBaVG9nTWpBeU1pNHpMakl3WEc0Z0tpOWNiaThxSUQwOVBUMDlQVDA5UFQwZ1kyOXNiM0p6TG5Sb1pXMWxJQzBnNVorNjU2R0E2YUtjNklteTVZK1k2WWVQNlp1RzVaQ0lJRDA5UFQwOVBUMDlQVDBnS2k5Y2JpOHFJRDA5UFQwOVBTRHBtTFRsdmJIbW9MZmx2SS9vcnI3bnZhN2xoNzNtbGJBZ1BUMDlQVDA5SUNvdlhHNHZLaUE5UFQwOVBTQlRZM0p2Ykd4aVlYSWdQVDA5UFQwZ0tpOWNiam82TFhkbFltdHBkQzF6WTNKdmJHeGlZWElnZTF4dUlDQjNhV1IwYURvZ04zQjRPMXh1SUNCb1pXbG5hSFE2SURkd2VEdGNiaUFnTFhkbFltdHBkQzFpYjNKa1pYSXRjbUZrYVhWek9pQTFjSGc3WEc1OVhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlMWFJ5WVdOckxYQnBaV05sSUh0Y2JpQWdMWGRsWW10cGRDMWliM0prWlhJdGNtRmthWFZ6T2lBMWNIZzdYRzU5WEc0Nk9pMTNaV0pyYVhRdGMyTnliMnhzWW1GeUxYUm9kVzFpT25abGNuUnBZMkZzSUh0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2djbWRpWVNnd0xDQXdMQ0F3TENBd0xqSTFLVHRjYmlBZ0xYZGxZbXRwZEMxaWIzSmtaWEl0Y21Ga2FYVnpPaUExY0hnN1hHNTlYRzQ2T2kxM1pXSnJhWFF0YzJOeWIyeHNZbUZ5TFhSb2RXMWlPbWh2Y21sNmIyNTBZV3dnZTF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQnlaMkpoS0RBc0lEQXNJREFzSURBdU1qVXBPMXh1SUNBdGQyVmlhMmwwTFdKdmNtUmxjaTF5WVdScGRYTTZJRFZ3ZUR0Y2JuMWNiam82TFhkbFltdHBkQzF6WTNKdmJHeGlZWEk2YUc5MlpYSWdlMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCeVoySmhLREFzSURBc0lEQXNJREF1TVRVcE8xeHVmVnh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2kxMGFIVnRZanBvYjNabGNpQjdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUhKblltRW9NQ3dnTUN3Z01Dd2dNQzR6TlNrN1hHNTlYRzR1YzJWamRHbHZiaUI3WEc0Z0lHMWhjbWRwYmpvZ01XVnRJREE3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YzJWamRHbHZibDlmYUdWaFpHVnlMRnh1TG5ObFkzUnBiMjVmWDJOdmJuUmxiblFzWEc0dWMyVmpkR2x2Ymw5ZlptOXZkR1Z5SUh0Y2JpQWdiV0Z5WjJsdU9pQXdJRE5sYlR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1elpXTjBhVzl1WDE5MGFYUnNaU0I3WEc0Z0lHTnZiRzl5T2lBak5qWTJPMXh1ZlZ4dUxuTmxZM1JwYjI1ZlgyZ3pJSHRjYmlBZ1kyOXNiM0k2SUNNeFpqaGtaRFk3WEc0Z0lHWnZiblF0YzJsNlpUb2dNUzR6TldWdE8xeHVmVnh1TG5ObFkzUnBiMjVmWDJnMElIdGNiaUFnWm05dWRDMXphWHBsT2lBeExqRmxiVHRjYmlBZ1kyOXNiM0k2SUNNMk5qWTdYRzU5WEc0dWMyVmpkR2x2Ymw5ZmFEVWdlMXh1SUNCbWIyNTBMWE5wZW1VNklERmxiVHRjYmlBZ1kyOXNiM0k2SUNNNU9UazdYRzU5WEc0dWMyVmpkR2x2Ymw5ZlpHd3NYRzR1YzJWamRHbHZibDlmWkhRc1hHNHVjMlZqZEdsdmJsOWZaR1FnZTF4dUlDQnRZWEpuYVc0NklEQTdYRzRnSUhCaFpHUnBibWM2SURBN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWMyVmpkR2x2Ymw5ZlpHd2dlMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc1OVhHNHVjMlZqZEdsdmJsOWZaSFFnZTF4dUlDQmthWE53YkdGNU9pQnBibXhwYm1VdFlteHZZMnM3WEc1OVhHNHVjMlZqZEdsdmJsOWZaR1FnZTF4dUlDQmthWE53YkdGNU9pQnBibXhwYm1VdFlteHZZMnM3WEc0Z0lHTnZiRzl5T2lBak1EVTRPVFF5TzF4dWZWeHVMbk5sWTNScGIyNWZYM0J5WlNCN1hHNGdJRzFoY21kcGJqb2dNbVZ0SURBN1hHNGdJSEJoWkdScGJtYzZJREZsYlR0Y2JpQWdabTl1ZEMxemFYcGxPaUF4TkhCNE8xeHVJQ0JzYVc1bExXaGxhV2RvZERvZ01UVXdKVHRjYmlBZ2RHVjRkQzFoYkdsbmJqb2diR1ZtZER0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlpoWm1GbVlUdGNiaUFnWW05eVpHVnlPaUF4Y0hnZ2MyOXNhV1FnSTJSa1pEdGNiaUFnWW05eVpHVnlMWEpoWkdsMWN6b2dOSEI0TzF4dUlDQmpiMnh2Y2pvZ0l6WTJOanRjYmlBZ2IzWmxjbVpzYjNjNklHRjFkRzg3WEc1OVhHNHVjMlZqZEdsdmJsOWZZMjlrWlNCN1hHNGdJR1JwYzNCc1lYazZJR0pzYjJOck8xeHVJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXpaV04wYVc5dVgxOW1iMjkwWlhJZ2UxeHVJQ0JpYjNKa1pYSXRkRzl3T2lBeGNIZ2djMjlzYVdRZ0kyUmtaRHRjYmlBZ2JXRnlaMmx1TFhSdmNEb2dNMlZ0TzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpabUZtWVdaaE8xeHVJQ0JqYjJ4dmNqb2dJems1T1R0Y2JuMWNiaTVqWVhObElIdGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCa2FYTndiR0Y1T2lCbmNtbGtPMXh1SUNCbmNtbGtMWFJsYlhCc1lYUmxMV052YkhWdGJuTTZJSEpsY0dWaGRDZ3lMQ0F4Wm5JcE8xeHVJQ0JuWVhBNklEUXdjSGc3WEc0Z0lIQmhaR1JwYm1jNklERmxiVHRjYmlBZ1ltOXlaR1Z5TFhSdmNEb2dNWEI0SUhOdmJHbGtJQ05rWkdRN1hHNGdJR0p2Y21SbGNpMWliM1IwYjIwNklERndlQ0J6YjJ4cFpDQWpaR1JrTzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG1OaGMyVTZZV1owWlhJZ2UxeHVJQ0JqYjI1MFpXNTBPaUFuSnp0Y2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0IwYjNBNklEQTdYRzRnSUd4bFpuUTZJRFV3SlR0Y2JpQWdhR1ZwWjJoME9pQXhNREFsTzF4dUlDQjNhV1IwYURvZ01EdGNiaUFnWW05eVpHVnlMV3hsWm5RNklERndlQ0J6YjJ4cFpDQWpaR1JrTzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG1OaGMyVmZYM0J5WlN4Y2JpNWpZWE5sWDE5MFpYaDBZWEpsWVNCN1hHNGdJR1p2Ym5RdGMybDZaVG9nTVROd2VEdGNiaUFnYkdsdVpTMW9aV2xuYUhRNklERTFNQ1U3WEc1OVhHNHVZMkZ6WlY5ZmNISmxMRnh1TG1OaGMyVmZYMk52WkdVc1hHNHVZMkZ6WlY5ZmRHVjRkR0Z5WldFZ2UxeHVJQ0JtYjI1MExXWmhiV2xzZVRvZ1hDSkRiM1Z5YVdWeUlFNWxkMXdpTENCRGIyNXpiMnhoY3l3Z1IyVnZjbWRwWVN3Z1FYSnBZV3dzSUhOaGJuTXRjMlZ5YVdZN1hHNTlYRzR1WTJGelpWOWZjSEpsSUh0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1SUNCd1lXUmthVzVuT2lBeFpXMDdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVlXWmhabUU3WEc0Z0lHaGxhV2RvZERvZ01UQXdKVHRjYmlBZ1ltOXlaR1Z5TFhKaFpHbDFjem9nTkhCNE8xeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNibjFjYmk1allYTmxYMTkwYjI5c1ltRnlJSHRjYmlBZ2JXRnlaMmx1T2lBd0lHRjFkRzg3WEc0Z0lHaGxhV2RvZERvZ016WndlRHRjYmlBZ2JHbHVaUzFvWldsbmFIUTZJRE0yY0hnN1hHNGdJR1p2Ym5RdGMybDZaVG9nTVRSd2VEdGNiaUFnY0dGa1pHbHVaem9nTUNBeE5uQjRPMXh1SUNCMFpYaDBMV0ZzYVdkdU9pQnlhV2RvZER0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1allYTmxYMTloWTNScGIyNHNYRzR1WTJGelpWOWZjbVZ0YjNabElIdGNiaUFnWTNWeWMyOXlPaUJ3YjJsdWRHVnlPMXh1SUNCamIyeHZjam9nSXpBMU9EazBNanRjYmlBZ2RYTmxjaTF6Wld4bFkzUTZJRzV2Ym1VN1hHNTlYRzR1WTJGelpWOWZZV04wYVc5dUlIdGNiaUFnWm05dWRDMXphWHBsT2lBeE0zQjRPMXh1SUNCd1lXUmthVzVuTFd4bFpuUTZJREV3Y0hnN1hHNTlYRzR1WTJGelpWOWZZV04wYVc5dU9tWnBjbk4wTFdOb2FXeGtJSHRjYmlBZ2NHRmtaR2x1Wnkxc1pXWjBPaUF3TzF4dWZWeHVMbU5oYzJWZlgzSmxiVzkyWlNCN1hHNGdJR1pzYjJGME9pQnlhV2RvZER0Y2JuMWNiaTVqWVhObFgxOWpiMjV6YjJ4bElIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUdobGFXZG9kRG9nTVRnd2NIZzdYRzRnSUdKdmNtUmxjam9nTVhCNElITnZiR2xrSUNOa1pHUTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHVZMkZ6WlY5ZmRHVjRkR0Z5WldFZ2UxeHVJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNiaUFnZDJsa2RHZzZJREV3TUNVN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdZbTl5WkdWeU9pQnViMjVsTzF4dUlDQnZkWFJzYVc1bE9pQnViMjVsTzF4dUlDQndZV1JrYVc1bk9pQXhaVzA3WEc0Z0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEc0Z0lHOTJaWEptYkc5M09pQmhkWFJ2TzF4dWZWeHVMbU5oYzJWZlgyeHBjM1FzWEc0dVkyRnpaVjlmYVhSbGJTQjdYRzRnSUcxaGNtZHBiam9nTUR0Y2JpQWdjR0ZrWkdsdVp6b2dNRHRjYmlBZ2JHbHpkQzF6ZEhsc1pTMTBlWEJsT2lCdWIyNWxPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbU5oYzJWZlgyeHBjM1FnZTF4dUlDQm9aV2xuYUhRNklETTJNSEI0TzF4dUlDQmliM0prWlhJdGRHOXdPaUF4Y0hnZ2MyOXNhV1FnSTJSa1pEdGNiaUFnWW05eVpHVnlMV0p2ZEhSdmJUb2dNWEI0SUhOdmJHbGtJQ05rWkdRN1hHNGdJR1p2Ym5RdGMybDZaVG9nTVROd2VEdGNiaUFnYjNabGNtWnNiM2M2SUdGMWRHODdYRzU5WEc0dVkyRnpaVjlmYVhSbGJTQjdYRzRnSUdobGFXZG9kRG9nTXpad2VEdGNiaUFnYkdsdVpTMW9aV2xuYUhRNklETTJjSGc3WEc0Z0lHTjFjbk52Y2pvZ2NHOXBiblJsY2p0Y2JpQWdjR0ZrWkdsdVp6b2dNQ0F4Tm5CNE8xeHVmVnh1TG1OaGMyVmZYMmwwWlcwNmFHOTJaWElnZTF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpaamRtT0dZNU8xeHVmVnh1TG5CaGNHVnlJSHRjYmlBZ1ltOTRMWE5vWVdSdmR6b2dNQ0F3SURad2VDQXhjSGdnSTJSalpHWmxOanRjYmlBZ2JXRnlaMmx1T2lBeVpXMGdZWFYwYnp0Y2JpQWdiV0Y0TFhkcFpIUm9PaUF4TWpBd2NIZzdYRzRnSUhCaFpHUnBibWM2SURKbGJUdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJabVpqdGNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNibjFjYmk1d1lYQmxjaTVtYkdWNElIdGNiaUFnWkdsemNHeGhlVG9nWm14bGVEdGNiaUFnWm14bGVDMWthWEpsWTNScGIyNDZJSEp2ZHp0Y2JpQWdabXhsZUMxM2NtRndPaUJ1YjNkeVlYQTdYRzRnSUcxaGNtZHBiam9nTUR0Y2JpQWdkMmxrZEdnNklERXdNQ1U3WEc0Z0lHMWhlQzEzYVdSMGFEb2dNVEF3SlR0Y2JpQWdhR1ZwWjJoME9pQXhNREFsTzF4dUlDQndZV1JrYVc1bk9pQXdPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbkJoY0dWeUxtWnNaWGdnTG1GeWRHbGpiR1VnZTF4dUlDQm1iR1Y0TFdScGNtVmpkR2x2YmpvZ1kyOXNkVzF1TzF4dUlDQjNhV1IwYURvZ01UQXdKVHRjYmlBZ1ltOTRMWE5wZW1sdVp6b2dZbTl5WkdWeUxXSnZlRHRjYm4xY2JpNXdZWEJsY2k1bWJHVjRJQzVoY25ScFkyeGxYMTl0WVdsdUlIdGNiaUFnYUdWcFoyaDBPaUF4TURBbE8xeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNibjFjYmk1d1lYQmxjaTVtYkdWNElDNWhjblJwWTJ4bFgxOWhjMmxrWlNCN1hHNGdJR0p2Y21SbGNpMXlhV2RvZERvZ01YQjRJSE52Ykdsa0lDTmtZMlJtWlRZN1hHNTlYRzR1YUdWaFpHVnlJSHRjYmlBZ2NHOXphWFJwYjI0NklITjBhV05yZVR0Y2JpQWdlaTFwYm1SbGVEb2dNenRjYmlBZ2RHOXdPaUF3TzF4dUlDQnRZWEpuYVc0NklEQWdZWFYwYnp0Y2JpQWdZbTl5WkdWeUxXSnZkSFJ2YlRvZ01YQjRJSE52Ykdsa0lDTmtaR1E3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3WEc0Z0lIUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdGNiaUFnZEhKaGJuTnBkR2x2Ymkxa2RYSmhkR2x2YmpvZ01DNHpjenRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTVvWldGa1pYSmZjM1JwWTJ0NUlIdGNiaUFnY0dGa1pHbHVaeTFzWldaME9pQXlOakJ3ZUR0Y2JuMWNiaTVoY25ScFkyeGxJSHRjYmlBZ1pHbHpjR3hoZVRvZ1pteGxlRHRjYmlBZ1pteGxlQzFrYVhKbFkzUnBiMjQ2SUhKdmR6dGNiaUFnWm14bGVDMTNjbUZ3T2lCdWIzZHlZWEE3WEc0Z0lIQmhaR1JwYm1jNklESmxiU0F3TzF4dUlDQm1iMjUwTFhOcGVtVTZJREUyY0hnN1hHNGdJR3hwYm1VdGFHVnBaMmgwT2lBeE5UQWxPMXh1ZlZ4dUxtRnlkR2xqYkdWZlgyMWhhVzRnZTF4dUlDQm1iR1Y0T2lBeE8xeHVJQ0J3WVdSa2FXNW5PaUF3SURKbGJUdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNWhjblJwWTJ4bFgxOXRZV2x1SUM1elpXTjBhVzl1SUh0Y2JpQWdiM1psY21ac2IzYzZJSFpwYzJsaWJHVTdYRzU5WEc0dVlYSjBhV05zWlY5ZmJXRnBiaUF1YzJWamRHbHZibDlmWTI5dWRHVnVkQ3hjYmk1aGNuUnBZMnhsWDE5dFlXbHVJQzV6WldOMGFXOXVYMTltYjI5MFpYSXNYRzR1WVhKMGFXTnNaVjlmYldGcGJpQXVjMlZqZEdsdmJsOWZhR1ZoWkdWeUlIdGNiaUFnYjNabGNtWnNiM2M2SUhacGMybGliR1U3WEc1OVhHNHVZWEowYVdOc1pWOWZiV0ZwYmlBdWMyVmpkR2x2Ymw5ZmFHVmhaR1Z5TEZ4dUxtRnlkR2xqYkdWZlgyMWhhVzRnTG5ObFkzUnBiMjVmWDJOdmJuUmxiblFnZTF4dUlDQnRZWEpuYVc0NklEQTdYRzU5WEc0dVlYSjBhV05zWlY5ZllYTnBaR1VnZTF4dUlDQm1iR1Y0TFhOb2NtbHVhem9nTUR0Y2JpQWdkMmxrZEdnNklESTBNSEI0TzF4dUlDQmliM0prWlhJdGJHVm1kRG9nTVhCNElITnZiR2xrSUNOa1pHUTdYRzRnSUhSeVlXNXphWFJwYjI0dFpIVnlZWFJwYjI0NklEQXVNM003WEc1OVhHNHVZWEowYVdOc1pWOWZZWE5wWkdVdWJIUnlJSHRjYmlBZ1ltOXlaR1Z5TFhKcFoyaDBPaUF4Y0hnZ2MyOXNhV1FnSTJSa1pEdGNiaUFnWW05eVpHVnlMV3hsWm5RNklHNXZibVU3WEc1OVhHNHVZWEowYVdOc1pWOWZZWE5wWkdVZ0xtOTFkR3hwYm1VdFkyaGhjSFJsY25NZ2UxeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUFqWm1abU8xeHVmVnh1Y0hKbExGeHVMbk5sWTNScGIyNWZYM0J5WlNCN1hHNGdJSEJoWkdScGJtYzZJREpsYlR0Y2JpQWdabTl1ZEMxbVlXMXBiSGs2SUZ3aVEyOTFjbWxsY2lCT1pYZGNJaXdnUVhKcFlXd3NJSE5oYm5NdGMyVnlhV1k3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1ZV1poWm1FN1hHNGdJRzkyWlhKbWJHOTNPaUJoZFhSdk8xeHVmVnh1WTI5a1pTeGNiaTV6WldOMGFXOXVYMTlqYjJSbElIdGNiaUFnWm05dWRDMW1ZVzFwYkhrNklGd2lRMjkxY21sbGNpQk9aWGRjSWl3Z1FYSnBZV3dzSUhOaGJuTXRjMlZ5YVdZN1hHNGdJR1p2Ym5RdGMybDZaVG9nTVRad2VEdGNibjFjYmk1bWIyOTBaWElnZTF4dUlDQmliM0prWlhJdGRHOXdPaUF4Y0hnZ2MyOXNhV1FnSTJSalpHWmxOanRjYmlBZ2NHRmtaR2x1WnpvZ00yVnRJREE3WEc0Z0lIUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdGNibjFjYmk1bWIyOTBaWElnWVRwc2FXNXJMRnh1TG1admIzUmxjaUJoT25acGMybDBaV1FzWEc0dVptOXZkR1Z5SUdFNmFHOTJaWElnZTF4dUlDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3WEc0Z0lHTnZiRzl5T2lBak1EVTRPVFF5TzF4dWZWeHVMbVp2YjNSbGNpQmhPbWh2ZG1WeUlIdGNiaUFnZEdWNGRDMWtaV052Y21GMGFXOXVPaUIxYm1SbGNteHBibVU3WEc1OVhHNHVkWFJwYkhNdFltOXlaR1Z5TFhKcFoyaDBJSHRjYmlBZ1ltOXlaR1Z5TFhKcFoyaDBPaUF4Y0hnZ2MyOXNhV1FnSTJSalpHWmxOanRjYm4xY2JpNW9hV1JrWlc0Z2UxeHVJQ0JrYVhOd2JHRjVPaUJ1YjI1bE8xeHVmVnh1THlvZ1BUMDlQVDA5UFQwOVBTQnBZMjl1TG5Sb1pXMWxJQzBnYzNabklPV2J2dWFnaCtlYWhPYWd0K1c4anlBOVBUMDlQVDA5UFQwOUlDb3ZYRzR1YjNWMGJHbHVaUzFwWTI5dUlIdGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzRnSUhabGNuUnBZMkZzTFdGc2FXZHVPaUJ0YVdSa2JHVTdYRzRnSUhkcFpIUm9PaUF4WlcwN1hHNGdJR2hsYVdkb2REb2dNV1Z0TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0YVdOdmJsOWZjM1puSUh0Y2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0IwYjNBNklEVXdKVHRjYmlBZ2JHVm1kRG9nTlRBbE8xeHVJQ0IzYVdSMGFEb2dNV1Z0TzF4dUlDQm9aV2xuYUhRNklERmxiVHRjYmlBZ1ptbHNiRG9nWTNWeWNtVnVkR052Ykc5eU8xeHVJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlNndE5UQWxMQ0F0TlRBbEtUdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JqcHliMjkwSUh0Y2JpQWdMUzF2ZFhSc2FXNWxMWHBKYm1SbGVEb2dNakF3TUR0Y2JpQWdMUzF2ZFhSc2FXNWxMWE4wYVdOcmVTMW9aV2xuYUhRNklERXdNQ1U3WEc0Z0lDMHRiM1YwYkdsdVpTMWphR0Z3ZEdWeWN5MTNhV1IwYURvZ01UQXdKVHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2VpMXBibVJsZURvZ0xURTdYRzRnSUhSdmNEb2dNRHRjYmlBZ2JHVm1kRG9nTUR0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1SUNCM2FXUjBhRG9nTVRBd0pUdGNiaUFnYUdWcFoyaDBPaUF4TURBbE8xeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0IyYVhOcFltbHNhWFI1T2lCb2FXUmtaVzQ3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMjF2WkdGc0lIdGNiaUFnWW05NExYTm9ZV1J2ZHpvZ01DQXdJRFp3ZUNBeGNIZ2dJMlJqWkdabE5qdGNiaUFnWkdsemNHeGhlVG9nWm14bGVEdGNiaUFnWm14bGVDMWthWEpsWTNScGIyNDZJR052YkhWdGJqdGNiaUFnWm14bGVDMTNjbUZ3T2lCdWIzZHlZWEE3WEc0Z0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnZWkxcGJtUmxlRG9nTWpFN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWmp0Y2JpQWdkSEpoYm5OcGRHbHZiaTFrZFhKaGRHbHZiam9nTUM0MGN6dGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmFHVmhaR1Z5TEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5dFlXbHVMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTltYjI5MFpYSWdlMXh1SUNCM2FXUjBhRG9nTVRBd0pUdGNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmYUdWaFpHVnlMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTltYjI5MFpYSWdlMXh1SUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmRHbDBiR1VzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDIxaGFXNHNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMlp2YjNSbGNpQjdYRzRnSUhCaFpHUnBibWM2SURBZ01UWndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmFHVmhaR1Z5TEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5MGFYUnNaU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnZWkxcGJtUmxlRG9nTVR0Y2JpQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hHNGdJR2hsYVdkb2REb2dOVEp3ZUR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURVeWNIZzdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgzUnBkR3hsSUh0Y2JpQWdabTl1ZEMxemFYcGxPaUF4Tm5CNE8xeHVJQ0JtYjI1MExYZGxhV2RvZERvZ05EQXdPMXh1SUNCdFlYSm5hVzQ2SURBZ01UWndlRHRjYmlBZ1ltOTRMWE5wZW1sdVp6b2dZbTl5WkdWeUxXSnZlRHRjYmlBZ1ltOXlaR1Z5TFdKdmRIUnZiVG9nTVhCNElITnZiR2xrSUNOa1kyUm1aVFk3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyTnNiM05sSUh0Y2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0IwYjNBNklEVXdKVHRjYmlBZ2NtbG5hSFE2SURFeWNIZzdYRzRnSUhkcFpIUm9PaUF5TUhCNE8xeHVJQ0JvWldsbmFIUTZJREl3Y0hnN1hHNGdJR3hwYm1VdGFHVnBaMmgwT2lBeU1IQjRPMXh1SUNCamIyeHZjam9nSXprNU9UdGNiaUFnWm05dWRDMXphWHBsT2lBeU1IQjRPMXh1SUNCMFpYaDBMV0ZzYVdkdU9pQmpaVzUwWlhJN1hHNGdJR04xY25OdmNqb2djRzlwYm5SbGNqdGNiaUFnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWktDMDFNQ1VwTzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTlqYkc5elpTQXViM1YwYkdsdVpTMXBZMjl1SUh0Y2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0IwYjNBNklEQTdYRzRnSUd4bFpuUTZJREE3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyTnNiM05sT21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNMk5qWTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDIxaGFXNGdlMXh1SUNCbWJHVjRPaUF4TzF4dUlDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZabTl2ZEdWeUlIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUhSbGVIUXRZV3hwWjI0NklISnBaMmgwTzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTl2ZG1WeWJHRjVJSHRjYmlBZ1kyOXVkR1Z1ZERvZ0p5YzdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ2RHOXdPaUF3TzF4dUlDQnNaV1owT2lBd08xeHVJQ0IzYVdSMGFEb2dNVEF3SlR0Y2JpQWdhR1ZwWjJoME9pQXhNREFsTzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpabVptTzF4dUlDQnZjR0ZqYVhSNU9pQXdMakU3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTG05MWRHeHBibVV0WkhKaGQyVnlYM1JwYm5rc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUnBibmtnZTF4dUlDQjNhV1IwYURvZ01qZ3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMXBibWtzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDIxcGJta2dlMXh1SUNCM2FXUjBhRG9nTkRnd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0xtOTFkR3hwYm1VdFpISmhkMlZ5WDNOdFlXeHNMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMngwY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDl6YldGc2JDQjdYRzRnSUhkcFpIUm9PaUExTkRCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl5ZEd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmY21WbmRXeGhjaXhjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmY21WbmRXeGhjaUI3WEc0Z0lIZHBaSFJvT2lBMk9EQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZmJXVmthWFZ0TEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5dFpXUnBkVzBnZTF4dUlDQjNhV1IwYURvZ056SXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeGhjbWRsTEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5c1lYSm5aU0I3WEc0Z0lIZHBaSFJvT2lBNU5qQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd2dlMXh1SUNCaWIzSmtaWEl0YkdWbWREb2dNWEI0SUhOdmJHbGtJQ05rWTJSbVpUWTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0xtOTFkR3hwYm1VdFpISmhkMlZ5WDNScGJua3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdjbWxuYUhRNklDMHlPVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3d1YjNWMGJHbHVaUzFrY21GM1pYSmZiV2x1YVM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCeWFXZG9kRG9nTFRRNU1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDNXZkWFJzYVc1bExXUnlZWGRsY2w5emJXRnNiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0J5YVdkb2REb2dMVFUxTUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkM1dmRYUnNhVzVsTFdSeVlYZGxjbDl5WldkMWJHRnlMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSEpwWjJoME9pQXROamt3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTG05MWRHeHBibVV0WkhKaGQyVnlYMjFsWkdsMWJTNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQnlhV2RvZERvZ0xUY3pNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNZWEpuWlM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCeWFXZG9kRG9nTFRrM01IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpQjdYRzRnSUdKdmNtUmxjaTF5YVdkb2REb2dNWEI0SUhOdmJHbGtJQ05rWTJSbVpUWTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNScGJua3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdiR1ZtZERvZ0xUSTVNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRhVzVwTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUd4bFpuUTZJQzAwT1RCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYzIxaGJHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdiR1ZtZERvZ0xUVTFNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlaV2QxYkdGeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lHeGxablE2SUMwMk9UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISXViM1YwYkdsdVpTMWtjbUYzWlhKZmJXVmthWFZ0TG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUd4bFpuUTZJQzAzTXpCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYkdGeVoyVXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdiR1ZtZERvZ0xUazNNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaXhjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRZ2UxeHVJQ0JzWldaME9pQXdPMXh1SUNCM2FXUjBhRG9nTVRBd0pUdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJdWIzVjBiR2x1WlMxa2NtRjNaWEpmZEdsdWVTeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZkR2x1ZVNCN1hHNGdJR2hsYVdkb2REb2dNalF3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpTG05MWRHeHBibVV0WkhKaGQyVnlYMjFwYm1rc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMXBibWtnZTF4dUlDQm9aV2xuYUhRNklETXlNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXpiV0ZzYkN4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5aWRIUXViM1YwYkdsdVpTMWtjbUYzWlhKZmMyMWhiR3dnZTF4dUlDQm9aV2xuYUhRNklETTJNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlaV2QxYkdGeUxGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlaV2QxYkdGeUlIdGNiaUFnYUdWcFoyaDBPaUEwTURCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYldWa2FYVnRMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMkowZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDl0WldScGRXMGdlMXh1SUNCb1pXbG5hSFE2SURRME1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNSMFlpNXZkWFJzYVc1bExXUnlZWGRsY2w5c1lYSm5aU3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRdWIzVjBiR2x1WlMxa2NtRjNaWEpmYkdGeVoyVWdlMXh1SUNCb1pXbG5hSFE2SURRNE1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNSMFlpQjdYRzRnSUdKdmNtUmxjaTFpYjNSMGIyMDZJREZ3ZUNCemIyeHBaQ0FqWkdOa1ptVTJPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNSMFlpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGFXNTVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSFJ2Y0RvZ0xUSTFNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRhVzVwTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUhSdmNEb2dMVE16TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM1IwWWk1dmRYUnNhVzVsTFdSeVlYZGxjbDl6YldGc2JDNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQjBiM0E2SUMwek56QndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXViM1YwYkdsdVpTMWtjbUYzWlhKZmNtVm5kV3hoY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCMGIzQTZJQzAwTVRCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYldWa2FYVnRMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSFJ2Y0RvZ0xUUTFNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNZWEpuWlM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCMGIzQTZJQzAwT1RCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRZ2UxeHVJQ0IwYjNBNklHbHVhWFJwWVd3N1hHNGdJR0p2Y21SbGNpMTBiM0E2SURGd2VDQnpiMnhwWkNBalpHTmtabVUyTzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBhVzU1TG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUdKdmRIUnZiVG9nTFRJMU1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJKMGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5dGFXNXBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJR0p2ZEhSdmJUb2dMVE16TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMkowZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDl6YldGc2JDNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQmliM1IwYjIwNklDMHpOekJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZjbVZuZFd4aGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQmliM1IwYjIwNklDMDBNVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZiV1ZrYVhWdExtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lHSnZkSFJ2YlRvZ0xUUTFNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNZWEpuWlM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCaWIzUjBiMjA2SUMwME9UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5dmNHVnVaV1FnZTF4dUlDQjJhWE5wWW1sc2FYUjVPaUIyYVhOcFlteGxPMXh1SUNCNkxXbHVaR1Y0T2lCMllYSW9MUzF2ZFhSc2FXNWxMWHBKYm1SbGVDazdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjNCbGJtVmtMbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNiaUFnY0c5emFYUnBiMjQ2SUdacGVHVmtPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3dnZTF4dUlDQnlhV2RvZERvZ01EdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Y0dWdVpXUXViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlJSHRjYmlBZ2JHVm1kRG9nTUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXZjR1Z1WldRdWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUlIdGNiaUFnZEc5d09pQXdPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFFnZTF4dUlDQmliM1IwYjIwNklEQTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjJabWMyVjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQ3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Wm1aelpYUXViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlJSHRjYmlBZ2FHVnBaMmgwT2lCallXeGpLREV3TUNVZ0xTQTBaVzBwTzF4dUlDQjBiM0E2SURVd0pUdGNiaUFnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWktDMDFNQ1VwTzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOW1abk5sZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmIyWm1jMlYwTG05MWRHeHBibVV0WkhKaGQyVnlYMkowZENCN1hHNGdJSGRwWkhSb09pQmpZV3hqS0RFd01DVWdMU0EwWlcwcE8xeHVJQ0JzWldaME9pQTFNQ1U3WEc0Z0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxXQ2d0TlRBbEtUdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Wm1aelpYUXViM1YwYkdsdVpTMWtjbUYzWlhKZmIzQmxibVZrTG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkNCN1hHNGdJSEpwWjJoME9pQXlaVzA3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmIyWm1jMlYwTG05MWRHeHBibVV0WkhKaGQyVnlYMjl3Wlc1bFpDNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISWdlMXh1SUNCc1pXWjBPaUF5WlcwN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiMlptYzJWMExtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0lnZTF4dUlDQjBiM0E2SURKbGJUdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Wm1aelpYUXViM1YwYkdsdVpTMWtjbUYzWlhKZmIzQmxibVZrTG05MWRHeHBibVV0WkhKaGQyVnlYMkowZENCN1hHNGdJR0p2ZEhSdmJUb2dNbVZ0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyRjFkRzh1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJGMWRHOHViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlJSHRjYmlBZ2FHVnBaMmgwT2lCaGRYUnZPMXh1SUNCdFlYZ3RhR1ZwWjJoME9pQmpZV3hqS0RFd01DVWdMU0EwWlcwcE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMloxYkd3Z2UxeHVJQ0J3WVdSa2FXNW5PaUF3TzF4dWZWeHVMbTkxZEd4cGJtVXRhR1ZoWkdsdVp5QjdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV2hsWVdScGJtZGZYMkZ1WTJodmNpQjdYRzRnSUdScGMzQnNZWGs2SUc1dmJtVTdYRzU5WEc0dWIzVjBiR2x1WlMxb1pXRmthVzVuWDE5aGJtTm9iM0k2YkdsdWF5eGNiaTV2ZFhSc2FXNWxMV2hsWVdScGJtZGZYMkZ1WTJodmNqcDJhWE5wZEdWa0xGeHVMbTkxZEd4cGJtVXRhR1ZoWkdsdVoxOWZZVzVqYUc5eU9taHZkbVZ5SUh0Y2JpQWdZMjlzYjNJNklDTTVPVGs3WEc0Z0lIUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHRjYm4xY2JpNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2pwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBak1XWTRaR1EyTzF4dWZWeHVMbTkxZEd4cGJtVXRhR1ZoWkdsdVp6cG9iM1psY2lBdWIzVjBiR2x1WlMxb1pXRmthVzVuWDE5aGJtTm9iM0lnZTF4dUlDQmthWE53YkdGNU9pQnBibXhwYm1VdFlteHZZMnM3WEc1OVhHNHViM1YwYkdsdVpTMW9aV0ZrYVc1blgzTjBZWEowT21odmRtVnlJSHRjYmlBZ2IzWmxjbVpzYjNjNklIWnBjMmxpYkdVN1hHNTlYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5YM04wWVhKMElDNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2lCN1hHNGdJSEJ2YzJsMGFXOXVPaUJoWW5OdmJIVjBaVHRjYmlBZ2VpMXBibVJsZURvZ01qdGNiaUFnZEc5d09pQTFNQ1U3WEc0Z0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxXU2d0TlRBbEtUdGNiaUFnYkdWbWREb2dMVEZsYlR0Y2JuMWNiaThxS2x4dUlDb2daV3hzYVhCemFYTXViR1Z6Y3lBdElPYVdoK2Fjck9lY2dlZVZwU0J0YVhocGJuZ2c1WWU5NXBXd1hHNGdLaUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzRnS2lCRGNtVmhkR1ZrSUVKNU9pQlpZVzlvWVdsNGFXRnZYRzRnS2lCVmNHUmhkR1U2SURJd01qSXVNeTR4TVZ4dUlDb3ZYRzR2S2lBOVBUMDlQVDBnNXBhSDVweXM1NXlCNTVXbDVZZTk1cFd3SUQwOVBUMDlQU0FxTDF4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25NZ2UxeHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lIb3RhVzVrWlhnNklERTdYRzRnSUcxaGNtZHBiam9nTUR0Y2JpQWdkMmxrZEdnNklIWmhjaWd0TFc5MWRHeHBibVV0WTJoaGNIUmxjbk10ZDJsa2RHZ3BPMXh1SUNCMGNtRnVjMmwwYVc5dUxXUjFjbUYwYVc5dU9pQXdMak56TzF4dUlDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTkwYVhSc1pTQjdYRzRnSUcxaGNtZHBiam9nTUNBeE5uQjRPMXh1SUNCb1pXbG5hSFE2SURRd2NIZzdYRzRnSUd4cGJtVXRhR1ZwWjJoME9pQTBNSEI0TzF4dUlDQndZV1JrYVc1bk9pQXdJREUyY0hnN1hHNGdJR0p2Y21SbGNpMWliM1IwYjIwNklERndlQ0J6YjJ4cFpDQWpaR05rWm1VMk8xeHVJQ0JtYjI1MExYTnBlbVU2SURFMmNIZzdYRzRnSUdadmJuUXRkMlZwWjJoME9pQTBNREE3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmYldGcGJpQjdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyeHBjM1FzWEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmMzVmlhbVZqZEN4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOXBkR1Z0SUh0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0J0WVhKbmFXNDZJREE3WEc0Z0lIQmhaR1JwYm1jNklEQTdYRzRnSUd4cGMzUXRjM1I1YkdVdGRIbHdaVG9nYm05dVpUdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOXNhWE4wSUh0Y2JpQWdjR0ZrWkdsdVp6b2dNQzQxWlcwZ01EdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5emRXSnFaV04wSUh0Y2JpQWdjR0ZrWkdsdVp5MXNaV1owT2lBeFpXMDdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmFYUmxiU0I3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnYkdsdVpTMW9aV2xuYUhRNklETXdjSGc3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVE53ZUR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5d2JHRmpaV2h2YkdSbGNpQjdYRzRnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ2RHOXdPaUF3TzF4dUlDQnNaV1owT2lBd08xeHVJQ0IzYVdSMGFEb2dNVEF3SlR0Y2JpQWdhR1ZwWjJoME9pQXpNSEI0TzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpaamRtT0dZNU8xeHVJQ0JpYjNKa1pYSXRiR1ZtZERvZ01uQjRJSE52Ykdsa0lDTXdOVGc1TkRJN1hHNGdJSFJ5WVc1emFYUnBiMjR0WkhWeVlYUnBiMjQ2SURBdU1uTTdYRzRnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZZVzVqYUc5eUlIdGNiaUFnZDJocGRHVXRjM0JoWTJVNklHNXZkM0poY0R0Y2JpQWdkR1Y0ZEMxdmRtVnlabXh2ZHpvZ1pXeHNhWEJ6YVhNN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzRnSUdScGMzQnNZWGs2SUdKc2IyTnJPMXh1SUNCd1lXUmthVzVuT2lBd0lERXVOV1Z0TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMkZ1WTJodmNqcHNhVzVyTEZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrTEZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyRnVZMmh2Y2pwb2IzWmxjaUI3WEc0Z0lIUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHRjYmlBZ1kyOXNiM0k2SUNNMU5UVTdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZllXNWphRzl5T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNd05UZzVOREk3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZZMjlrWlNCN1hHNGdJSEJoWkdScGJtY3RjbWxuYUhRNklEQXVOV1Z0TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZZV04wYVhabExtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyRnVZMmh2Y2pwc2FXNXJMRnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWVdOMGFYWmxMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMkZ1WTJodmNqcDJhWE5wZEdWa0xGeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZZV04wYVhabExtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyRnVZMmh2Y2pwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBak1EVTRPVFF5TzF4dUlDQm1iMjUwTFhkbGFXZG9kRG9nTkRBd08xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mYzNScFkydDVMRnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWm1sNFpXUWdlMXh1SUNCa2FYTndiR0Y1T2lCbWJHVjRPMXh1SUNCbWJHVjRMWGR5WVhBNklHNXZkM0poY0R0Y2JpQWdabXhsZUMxa2FYSmxZM1JwYjI0NklHTnZiSFZ0Ymp0Y2JpQWdlaTFwYm1SbGVEb2dkbUZ5S0MwdGIzVjBiR2x1WlMxNlNXNWtaWGdwTzF4dUlDQjBiM0E2SURBN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5emRHbGphM2tnTG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDNScGRHeGxMRnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWm1sNFpXUWdMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYM1JwZEd4bExGeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZjM1JwWTJ0NUlDNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOXRZV2x1TEZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlptbDRaV1FnTG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDIxaGFXNGdlMXh1SUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZmMzUnBZMnQ1SUM1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5MGFYUnNaU3hjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJacGVHVmtJQzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTkwYVhSc1pTQjdYRzRnSUdac1pYZ3RjMmh5YVc1ck9pQXdPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZmMzUnBZMnQ1SUM1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5dFlXbHVMRnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWm1sNFpXUWdMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMjFoYVc0Z2UxeHVJQ0JtYkdWNE9pQXhPMXh1SUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgzTjBhV05yZVNCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ6ZEdsamEzazdYRzRnSUcxaGVDMW9aV2xuYUhRNklIWmhjaWd0TFc5MWRHeHBibVV0YzNScFkydDVMV2hsYVdkb2RDazdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5bWFYaGxaQ0I3WEc0Z0lIQnZjMmwwYVc5dU9pQm1hWGhsWkR0Y2JpQWdiV0Y0TFdobGFXZG9kRG9nTVRBd0pUdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJocFpHUmxiaUI3WEc0Z0lHUnBjM0JzWVhrNklHNXZibVU3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOW1iMnhrWldRZ2UxeHVJQ0IzYVdSMGFEb2dNRHRjYm4xY2JpOHFJRDA5UFQwOVBUMDlQVDBnWW5WMGRHOXVjeTUwYUdWdFpTQXRJT2FNaWVtU3J1V3Z2T2lJcXVhZ3QrVzhqeUE5UFQwOVBUMDlQVDA5SUNvdlhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeUlIdGNiaUFnY0c5emFYUnBiMjQ2SUdacGVHVmtPMXh1SUNCNkxXbHVaR1Y0T2lBNU9UazVPVHRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0IwY21GdWMybDBhVzl1TFdSMWNtRjBhVzl1T2lBd0xqTnpPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUlIdGNiaUFnWW05NExYTm9ZV1J2ZHpvZ01DQXdJRFp3ZUNBeGNIZ2dJMlJqWkdabE5qdGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCdFlYSm5hVzQ2SURFd2NIZzdYRzRnSUhkcFpIUm9PaUF6Tm5CNE8xeHVJQ0JvWldsbmFIUTZJRE0yY0hnN1hHNGdJR0p2Y21SbGNqb2dNWEI0SUhOdmJHbGtJQ05rWTJSbVpUWTdYRzRnSUdKdmNtUmxjaTF5WVdScGRYTTZJRE53ZUR0Y2JpQWdZbTk0TFhOcGVtbHVaem9nWW05eVpHVnlMV0p2ZUR0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWmp0Y2JpQWdZM1Z5YzI5eU9pQndiMmx1ZEdWeU8xeHVJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WEc0Z0lHTnZiRzl5T2lBak5UVTFPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dU9taHZkbVZ5SUh0Y2JpQWdZMjlzYjNJNklDTXdOVGc1TkRJN1hHNGdJR0p2Y21SbGNpMWpiMnh2Y2pvZ0l6QTFPRGswTWp0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpNW9hV1JsSUh0Y2JpQWdaR2x6Y0d4aGVUb2dibTl1WlR0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcHNhVzVyTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T25acGMybDBaV1FzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXprNU9UdGNiaUFnZEdWNGRDMWtaV052Y21GMGFXOXVPaUJ1YjI1bE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWVc1amFHOXlPbWh2ZG1WeUlIdGNiaUFnWTI5c2IzSTZJQ013TlRnNU5ESTdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5cFkyOXVJSHRjYmlBZ2NHOXphWFJwYjI0NklHRmljMjlzZFhSbE8xeHVJQ0I2TFdsdVpHVjRPaUF5TzF4dUlDQjBiM0E2SURVd0pUdGNiaUFnYkdWbWREb2dOVEFsTzF4dUlDQjNhV1IwYURvZ01qQndlRHRjYmlBZ2FHVnBaMmgwT2lBeU1IQjRPMXh1SUNCMGNtRnVjMlp2Y20wNklIUnlZVzV6YkdGMFpTZ3ROVEFsTENBdE5UQWxLVHRjYmlBZ1ptbHNiRG9nWTNWeWNtVnVkR052Ykc5eU8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5aFkzUnBkbVV1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCamIyeHZjam9nSTJabVpqdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nSXpBMU9EazBNanRjYmlBZ1ltOXlaR1Z5TFdOdmJHOXlPaUFqTURVNE9UUXlPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5aFkzUnBkbVV1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNDZhRzkyWlhJZ2UxeHVJQ0JqYjJ4dmNqb2dJMlptWmp0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZZV04wYVhabElDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwc2FXNXJMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDloWTNScGRtVWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9uWnBjMmwwWldRc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyRmpkR2wyWlNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSTJabVpqdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmY205MWJtUmxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpQjdYRzRnSUdKdmNtUmxjaTF5WVdScGRYTTZJREU0Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9teHBibXNzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanBzYVc1ckxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWthWE5oWW14bFpDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2ZG1semFYUmxaQ3hjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTloYm1Ob2IzSTZhRzkyWlhJc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwb2IzWmxjaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNHNYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpQjdYRzRnSUdOMWNuTnZjam9nYm05MExXRnNiRzkzWldRN1hHNGdJR052Ykc5eU9pQWpPVGs1TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWthWE5oWW14bFpDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwc2FXNXJPbWh2ZG1WeUxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWthWE5oWW14bFpDQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmJHbHVhenBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmRtbHphWFJsWkRwb2IzWmxjaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1FnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWVc1amFHOXlPblpwYzJsMFpXUTZhRzkyWlhJc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T21odmRtVnlPbWh2ZG1WeUxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWthWE5oWW14bFpDQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmFHOTJaWEk2YUc5MlpYSXNYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dU9taHZkbVZ5TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aWRYUjBiMjQ2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXprNU9UdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNHNYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpQjdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObU5XWTFaalU3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzUjBZaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWW5SMElIdGNiaUFnYkdWbWREb2dOVEFsTzF4dUlDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaVmdvTFRVd0pTazdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDNSMFlpQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0c1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgySjBkQ0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDNSMFlpQjdYRzRnSUhSdmNEb2dNVEp3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZkSFJpTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlvYVdSa1pXNGdlMXh1SUNCMGIzQTZJQzAxTm5CNE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlpZEhRZ2UxeHVJQ0JpYjNSMGIyMDZJREV5Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMkowZEM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYUdsa1pHVnVJSHRjYmlBZ1ltOTBkRzl0T2lBdE5UWndlRHRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmNuUnNMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlzZEhJZ2UxeHVJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZrb0xUVXdKU2s3WEc0Z0lIZHBaSFJvT2lBMU5uQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5eWRHd2dlMXh1SUNCMGIzQTZJRFV3SlR0Y2JpQWdjbWxuYUhRNklERXljSGc3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzSjBiQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZhR2xrWkdWdUlIdGNiaUFnY21sbmFIUTZJQzA0Tm5CNE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlzZEhJZ2UxeHVJQ0IwYjNBNklEVXdKVHRjYmlBZ2JHVm1kRG9nTVRKd2VEdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYkhSeUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRnZTF4dUlDQnNaV1owT2lBdE9EWndlRHRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmRIUmlJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmFHbGtaR1Z1TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5eWRHd2dMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJKMGRDQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYkhSeUlDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2Ymk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYUdsa1pHVnVJSHRjYmlBZ1pHbHpjR3hoZVRvZ2JtOXVaVHRjYm4xY2JpSXNJaThxSUQwOVBUMDlJRk5qY205c2JHSmhjaUE5UFQwOVBTQXFMMXh5WEc0Nk9pMTNaV0pyYVhRdGMyTnliMnhzWW1GeUlIdGNjbHh1SUNCM2FXUjBhRG9nTjNCNE8xeHlYRzRnSUdobGFXZG9kRG9nTjNCNE8xeHlYRzRnSUMxM1pXSnJhWFF0WW05eVpHVnlMWEpoWkdsMWN6b2dOWEI0TzF4eVhHNTlYSEpjYmx4eVhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlMWFJ5WVdOckxYQnBaV05sSUh0Y2NseHVJQ0F0ZDJWaWEybDBMV0p2Y21SbGNpMXlZV1JwZFhNNklEVndlRHRjY2x4dWZWeHlYRzVjY2x4dU9qb3RkMlZpYTJsMExYTmpjbTlzYkdKaGNpMTBhSFZ0WWpwMlpYSjBhV05oYkNCN1hISmNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nY21kaVlTZ3dMQ0F3TENBd0xDQXdMakkxS1R0Y2NseHVJQ0F0ZDJWaWEybDBMV0p2Y21SbGNpMXlZV1JwZFhNNklEVndlRHRjY2x4dWZWeHlYRzVjY2x4dU9qb3RkMlZpYTJsMExYTmpjbTlzYkdKaGNpMTBhSFZ0WWpwb2IzSnBlbTl1ZEdGc0lIdGNjbHh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCeVoySmhLREFzSURBc0lEQXNJREF1TWpVcE8xeHlYRzRnSUMxM1pXSnJhWFF0WW05eVpHVnlMWEpoWkdsMWN6b2dOWEI0TzF4eVhHNTlYSEpjYmx4eVhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlPbWh2ZG1WeUlIdGNjbHh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCeVoySmhLREFzSURBc0lEQXNJREF1TVRVcE8xeHlYRzU5WEhKY2JseHlYRzQ2T2kxM1pXSnJhWFF0YzJOeWIyeHNZbUZ5TFhSb2RXMWlPbWh2ZG1WeUlIdGNjbHh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCeVoySmhLREFzSURBc0lEQXNJREF1TXpVcE8xeHlYRzU5WEhKY2JpSXNJa0JwYlhCdmNuUWdKMk52Ykc5eWN5YzdYSEpjYmx4eVhHNHVjMlZqZEdsdmJpQjdYSEpjYmlBZ2JXRnlaMmx1T2lBeFpXMGdNRHRjY2x4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzVjY2x4dUlDQW1YMTlvWldGa1pYSXNYSEpjYmlBZ0psOWZZMjl1ZEdWdWRDeGNjbHh1SUNBbVgxOW1iMjkwWlhJZ2UxeHlYRzRnSUNBZ2JXRnlaMmx1T2lBd0lETmxiVHRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTkwYVhSc1pTQjdYSEpjYmlBZ0lDQmpiMnh2Y2pvZ1FIUm9hWEprWDNSbGVIUmZZMjlzYjNJN1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOW9NeUI3WEhKY2JpQWdJQ0JqYjJ4dmNqb2dRSEJ5YVcxaGNubGZZMjlzYjNJN1hISmNiaUFnSUNCbWIyNTBMWE5wZW1VNklERXVNelZsYlR0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyZzBJSHRjY2x4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVM0eFpXMDdYSEpjYmlBZ0lDQmpiMnh2Y2pvZ1FIUm9hWEprWDNSbGVIUmZZMjlzYjNJN1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOW9OU0I3WEhKY2JpQWdJQ0JtYjI1MExYTnBlbVU2SURGbGJUdGNjbHh1SUNBZ0lHTnZiRzl5T2lCQVptOTFjblJvWDNSbGVIUmZZMjlzYjNJN1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOWtiQ3hjY2x4dUlDQW1YMTlrZEN4Y2NseHVJQ0FtWDE5a1pDQjdYSEpjYmlBZ0lDQnRZWEpuYVc0NklEQTdYSEpjYmlBZ0lDQndZV1JrYVc1bk9pQXdPMXh5WEc0Z0lDQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMlJzSUh0Y2NseHVJQ0FnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2NseHVJQ0FnSUhvdGFXNWtaWGc2SURFN1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOWtkQ0I3WEhKY2JpQWdJQ0JrYVhOd2JHRjVPbWx1YkdsdVpTMWliRzlqYXp0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyUmtJSHRjY2x4dUlDQWdJR1JwYzNCc1lYazZhVzVzYVc1bExXSnNiMk5yTzF4eVhHNGdJQ0FnWTI5c2IzSTZJRUJ6ZFdOalpYTnpYMk52Ykc5eU8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZjSEpsSUh0Y2NseHVJQ0FnSUcxaGNtZHBiam9nTW1WdElEQTdYSEpjYmlBZ0lDQndZV1JrYVc1bk9pQXhaVzA3WEhKY2JpQWdJQ0JtYjI1MExYTnBlbVU2SURFMGNIZzdYSEpjYmlBZ0lDQnNhVzVsTFdobGFXZG9kRG9nTVRVd0pUdGNjbHh1SUNBZ0lIUmxlSFF0WVd4cFoyNDZJR3hsWm5RN1hISmNiaUFnSUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCQVltZGZZMjlzYjNJN1hISmNiaUFnSUNCaWIzSmtaWEk2SURGd2VDQnpiMnhwWkNCQVltOXlaR1Z5WDJOdmJHOXlPMXh5WEc0Z0lDQWdZbTl5WkdWeUxYSmhaR2wxY3pvZ05IQjRPMXh5WEc0Z0lDQWdZMjlzYjNJNklFQjBhR2x5WkY5MFpYaDBYMk52Ykc5eU8xeHlYRzRnSUNBZ2IzWmxjbVpzYjNjNklHRjFkRzg3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5amIyUmxJSHRjY2x4dUlDQWdJR1JwYzNCc1lYazZJR0pzYjJOck8xeHlYRzRnSUNBZ2JXRnlaMmx1T2lBd0lHRjFkRzg3WEhKY2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmWm05dmRHVnlJSHRjY2x4dUlDQWdJR0p2Y21SbGNpMTBiM0E2SURGd2VDQnpiMnhwWkNCQVltOXlaR1Z5WDJOdmJHOXlPMXh5WEc0Z0lDQWdiV0Z5WjJsdUxYUnZjRG9nTTJWdE8xeHlYRzRnSUNBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FHSm5YMk52Ykc5eU8xeHlYRzRnSUNBZ1kyOXNiM0k2SUVCbWIzVnlkR2hmZEdWNGRGOWpiMnh2Y2p0Y2NseHVJQ0I5WEhKY2JuMWNjbHh1SWl3aVFHbHRjRzl5ZENBbkxpOWpiMnh2Y25Nbk8xeHlYRzVjY2x4dUxtTmhjMlVnZTF4eVhHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjY2x4dUlDQjZMV2x1WkdWNE9pQXhPMXh5WEc0Z0lHUnBjM0JzWVhrNklHZHlhV1E3WEhKY2JpQWdaM0pwWkMxMFpXMXdiR0YwWlMxamIyeDFiVzV6T2lCeVpYQmxZWFFvTWl3Z01XWnlLVHRjY2x4dUlDQm5ZWEE2SURRd2NIZzdYSEpjYmlBZ2NHRmtaR2x1WnpvZ01XVnRPMXh5WEc0Z0lHSnZjbVJsY2kxMGIzQTZNWEI0SUhOdmJHbGtJRUJpYjNKa1pYSmZZMjlzYjNJN1hISmNiaUFnWW05eVpHVnlMV0p2ZEhSdmJUb3hjSGdnYzI5c2FXUWdRR0p2Y21SbGNsOWpiMnh2Y2p0Y2NseHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh5WEc1Y2NseHVJQ0FtT21GbWRHVnlJSHRjY2x4dUlDQWdJR052Ym5SbGJuUTZJQ2NuTzF4eVhHNGdJQ0FnY0c5emFYUnBiMjQ2SUdGaWMyOXNkWFJsTzF4eVhHNGdJQ0FnZWkxcGJtUmxlRG9nTWp0Y2NseHVJQ0FnSUhSdmNEb2dNRHRjY2x4dUlDQWdJR3hsWm5RNklEVXdKVHRjY2x4dUlDQWdJR2hsYVdkb2REb2dNVEF3SlR0Y2NseHVJQ0FnSUhkcFpIUm9PaUF3TzF4eVhHNGdJQ0FnWW05eVpHVnlMV3hsWm5RNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDNCeVpTeGNjbHh1SUNBbVgxOTBaWGgwWVhKbFlTQjdYSEpjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREV6Y0hnN1hISmNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgzQnlaU3hjY2x4dUlDQW1YMTlqYjJSbExGeHlYRzRnSUNaZlgzUmxlSFJoY21WaElIdGNjbHh1SUNBZ0lHWnZiblF0Wm1GdGFXeDVPaUJjSWtOdmRYSnBaWElnVG1WM1hDSXNJRU52Ym5OdmJHRnpMQ0JIWlc5eVoybGhMQ0JCY21saGJDd2djMkZ1Y3kxelpYSnBaanRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDNCeVpTQjdYSEpjYmlBZ0lDQnRZWEpuYVc0NklEQTdYSEpjYmlBZ0lDQndZV1JrYVc1bk9pQXhaVzA3WEhKY2JpQWdJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUJBWW1kZlkyOXNiM0k3WEhKY2JpQWdJQ0JvWldsbmFIUTZJREV3TUNVN1hISmNiaUFnSUNCaWIzSmtaWEl0Y21Ga2FYVnpPaUEwY0hnN1hISmNiaUFnSUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh5WEc0Z0lDQWdiM1psY21ac2IzYzZJR0YxZEc4N1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOTBiMjlzWW1GeUlIdGNjbHh1SUNBZ0lHMWhjbWRwYmpvZ01DQmhkWFJ2TzF4eVhHNGdJQ0FnYUdWcFoyaDBPaUF6Tm5CNE8xeHlYRzRnSUNBZ2JHbHVaUzFvWldsbmFIUTZJRE0yY0hnN1hISmNiaUFnSUNCbWIyNTBMWE5wZW1VNklERTBjSGc3WEhKY2JpQWdJQ0J3WVdSa2FXNW5PaUF3SURFMmNIZzdYSEpjYmlBZ0lDQjBaWGgwTFdGc2FXZHVPaUJ5YVdkb2REdGNjbHh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOWhZM1JwYjI0c1hISmNiaUFnSmw5ZmNtVnRiM1psSUh0Y2NseHVJQ0FnSUdOMWNuTnZjam9nY0c5cGJuUmxjanRjY2x4dUlDQWdJR052Ykc5eU9pQkFjM1ZqWTJWemMxOWpiMnh2Y2p0Y2NseHVJQ0FnSUhWelpYSXRjMlZzWldOME9pQnViMjVsTzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZllXTjBhVzl1SUh0Y2NseHVJQ0FnSUdadmJuUXRjMmw2WlRvZ01UTndlRHRjY2x4dUlDQWdJSEJoWkdScGJtY3RiR1ZtZERvZ01UQndlRHRjY2x4dVhISmNiaUFnSUNBbU9tWnBjbk4wTFdOb2FXeGtJSHRjY2x4dUlDQWdJQ0FnY0dGa1pHbHVaeTFzWldaME9pQXdPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmY21WdGIzWmxJSHRjY2x4dUlDQWdJR1pzYjJGME9pQnlhV2RvZER0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyTnZibk52YkdVZ2UxeHlYRzRnSUNBZ2JXRnlaMmx1T2lBd0lHRjFkRzg3WEhKY2JpQWdJQ0JvWldsbmFIUTZJREU0TUhCNE8xeHlYRzRnSUNBZ1ltOXlaR1Z5T2lBeGNIZ2djMjlzYVdRZ1FHSnZjbVJsY2w5amIyeHZjanRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTkwWlhoMFlYSmxZU0I3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNjbHh1SUNBZ0lIZHBaSFJvT2lBeE1EQWxPMXh5WEc0Z0lDQWdhR1ZwWjJoME9pQXhNREFsTzF4eVhHNGdJQ0FnWW05eVpHVnlPaUJ1YjI1bE8xeHlYRzRnSUNBZ2IzVjBiR2x1WlRvZ2JtOXVaVHRjY2x4dUlDQWdJSEJoWkdScGJtYzZJREZsYlR0Y2NseHVJQ0FnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyeHBjM1FzWEhKY2JpQWdKbDlmYVhSbGJTQjdYSEpjYmlBZ0lDQnRZWEpuYVc0NklEQTdYSEpjYmlBZ0lDQndZV1JrYVc1bk9pQXdPMXh5WEc0Z0lDQWdiR2x6ZEMxemRIbHNaUzEwZVhCbE9pQnViMjVsTzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDJ4cGMzUWdlMXh5WEc0Z0lDQWdhR1ZwWjJoME9pQXpOakJ3ZUR0Y2NseHVJQ0FnSUdKdmNtUmxjaTEwYjNBNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNGdJQ0FnWW05eVpHVnlMV0p2ZEhSdmJUb2dNWEI0SUhOdmJHbGtJRUJpYjNKa1pYSmZZMjlzYjNJN1hISmNiaUFnSUNCbWIyNTBMWE5wZW1VNklERXpjSGc3WEhKY2JpQWdJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMmwwWlcwZ2UxeHlYRzRnSUNBZ2FHVnBaMmgwT2lBek5uQjRPMXh5WEc0Z0lDQWdiR2x1WlMxb1pXbG5hSFE2SURNMmNIZzdYSEpjYmlBZ0lDQmpkWEp6YjNJNklIQnZhVzUwWlhJN1hISmNiaUFnSUNCd1lXUmthVzVuT2lBd0lERTJjSGc3WEhKY2JseHlYRzRnSUNBZ0pqcG9iM1psY2lCN1hISmNiaUFnSUNBZ0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklFQm9iM1psY2w5aVoxOWpiMnh2Y2p0Y2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JuMWNjbHh1SWl3aUxuQmhjR1Z5SUh0Y2NseHVJQ0F1YzJoaFpHOTNYMnhwWjJoMFgzSmxaM1ZzWVhJb0tUdGNjbHh1SUNCdFlYSm5hVzQ2SURKbGJTQmhkWFJ2TzF4eVhHNGdJRzFoZUMxM2FXUjBhRG9nTVRJd01IQjRPMXh5WEc0Z0lIQmhaR1JwYm1jNklESmxiVHRjY2x4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQkFkMmhwZEdVN1hISmNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNjbHh1WEhKY2JpQWdKaTVtYkdWNElIdGNjbHh1SUNBZ0lHUnBjM0JzWVhrNklHWnNaWGc3WEhKY2JpQWdJQ0JtYkdWNExXUnBjbVZqZEdsdmJqb2djbTkzTzF4eVhHNGdJQ0FnWm14bGVDMTNjbUZ3T2lCdWIzZHlZWEE3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREE3WEhKY2JpQWdJQ0IzYVdSMGFEb2dNVEF3SlR0Y2NseHVJQ0FnSUcxaGVDMTNhV1IwYURvZ01UQXdKVHRjY2x4dUlDQWdJR2hsYVdkb2REb2dNVEF3SlR0Y2NseHVJQ0FnSUhCaFpHUnBibWM2SURBN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNWNjbHh1SUNBZ0lDNWhjblJwWTJ4bElIdGNjbHh1SUNBZ0lDQWdabXhsZUMxa2FYSmxZM1JwYjI0NklHTnZiSFZ0Ymp0Y2NseHVJQ0FnSUNBZ2QybGtkR2c2SURFd01DVTdYSEpjYmlBZ0lDQWdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hISmNibHh5WEc0Z0lDQWdJQ0FtWDE5dFlXbHVJSHRjY2x4dUlDQWdJQ0FnSUNCb1pXbG5hSFE2SURFd01DVTdYSEpjYmlBZ0lDQWdJQ0FnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNjbHh1SUNBZ0lDQWdJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOWZZWE5wWkdVZ2UxeHlYRzRnSUNBZ0lDQWdJR0p2Y21SbGNpMXlhV2RvZERvZ01YQjRJSE52Ykdsa0lFQndjbWx0WVhKNVgySnZjbVJsY2w5amIyeHZjanRjY2x4dUlDQWdJQ0FnZlZ4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dWZWeHlYRzVjY2x4dUxtaGxZV1JsY2lCN1hISmNiaUFnY0c5emFYUnBiMjQ2SUhOMGFXTnJlVHRjY2x4dUlDQjZMV2x1WkdWNE9pQXpPMXh5WEc0Z0lIUnZjRG9nTUR0Y2NseHVJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNjbHh1SUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnUUdKdmNtUmxjbDlqYjJ4dmNqdGNjbHh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCQWQyaHBkR1U3WEhKY2JpQWdkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPMXh5WEc0Z0lIUnlZVzV6YVhScGIyNHRaSFZ5WVhScGIyNDZJREF1TTNNN1hISmNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dVhISmNiaUFnSmw5emRHbGphM2tnZTF4eVhHNGdJQ0FnY0dGa1pHbHVaeTFzWldaME9pQXlOakJ3ZUR0Y2NseHVJQ0I5WEhKY2JuMWNjbHh1WEhKY2JpNWhjblJwWTJ4bElIdGNjbHh1SUNCa2FYTndiR0Y1T2lCbWJHVjRPMXh5WEc0Z0lHWnNaWGd0WkdseVpXTjBhVzl1T2lCeWIzYzdYSEpjYmlBZ1pteGxlQzEzY21Gd09pQnViM2R5WVhBN1hISmNiaUFnY0dGa1pHbHVaem9nTW1WdElEQTdYSEpjYmlBZ1ptOXVkQzF6YVhwbE9pQXhObkI0TzF4eVhHNGdJR3hwYm1VdGFHVnBaMmgwT2lBeE5UQWxPMXh5WEc1Y2NseHVJQ0FtWDE5dFlXbHVJSHRjY2x4dUlDQWdJR1pzWlhnNklERTdYSEpjYmlBZ0lDQndZV1JrYVc1bk9pQXdJREpsYlR0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JseHlYRzRnSUNBZ0xuTmxZM1JwYjI0Z2UxeHlYRzRnSUNBZ0lDQnZkbVZ5Wm14dmR6b2dkbWx6YVdKc1pUdGNjbHh1WEhKY2JpQWdJQ0FnSUNaZlgyTnZiblJsYm5Rc1hISmNiaUFnSUNBZ0lDWmZYMlp2YjNSbGNpeGNjbHh1SUNBZ0lDQWdKbDlmYUdWaFpHVnlJSHRjY2x4dUlDQWdJQ0FnSUNCdmRtVnlabXh2ZHpvZ2RtbHphV0pzWlR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5ZmFHVmhaR1Z5TEZ4eVhHNGdJQ0FnSUNBbVgxOWpiMjUwWlc1MElIdGNjbHh1SUNBZ0lDQWdJQ0J0WVhKbmFXNDZJREE3WEhKY2JpQWdJQ0FnSUgxY2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyRnphV1JsSUh0Y2NseHVJQ0FnSUdac1pYZ3RjMmh5YVc1ck9pQXdPMXh5WEc0Z0lDQWdkMmxrZEdnNklESTBNSEI0TzF4eVhHNGdJQ0FnWW05eVpHVnlMV3hsWm5RNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNGdJQ0FnZEhKaGJuTnBkR2x2Ymkxa2RYSmhkR2x2YmpvZ01DNHpjenRjY2x4dVhISmNiaUFnSUNBbUxteDBjaUI3WEhKY2JpQWdJQ0FnSUdKdmNtUmxjaTF5YVdkb2REb2dNWEI0SUhOdmJHbGtJRUJpYjNKa1pYSmZZMjlzYjNJN1hISmNiaUFnSUNBZ0lHSnZjbVJsY2kxc1pXWjBPaUJ1YjI1bE8xeHlYRzRnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpJSHRjY2x4dUlDQWdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUhkb2FYUmxPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1ZlZ4eVhHNWNjbHh1Y0hKbExGeHlYRzR1YzJWamRHbHZibDlmY0hKbElIdGNjbHh1SUNCd1lXUmthVzVuT2lBeVpXMDdYSEpjYmlBZ1ptOXVkQzFtWVcxcGJIazZJRndpUTI5MWNtbGxjaUJPWlhkY0lpd2dRWEpwWVd3c0lITmhibk10YzJWeWFXWTdYSEpjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FHSm5YMk52Ykc5eU8xeHlYRzRnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh5WEc1OVhISmNibHh5WEc1amIyUmxMRnh5WEc0dWMyVmpkR2x2Ymw5ZlkyOWtaU0I3WEhKY2JpQWdabTl1ZEMxbVlXMXBiSGs2SUZ3aVEyOTFjbWxsY2lCT1pYZGNJaXdnUVhKcFlXd3NJSE5oYm5NdGMyVnlhV1k3WEhKY2JpQWdabTl1ZEMxemFYcGxPaUF4Tm5CNE8xeHlYRzU5WEhKY2JseHlYRzR1Wm05dmRHVnlJSHRjY2x4dUlDQmliM0prWlhJdGRHOXdPaUF4Y0hnZ2MyOXNhV1FnUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eU8xeHlYRzRnSUhCaFpHUnBibWM2SURObGJTQXdPMXh5WEc0Z0lIUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdGNjbHh1WEhKY2JpQWdZU0I3WEhKY2JpQWdJQ0FtT214cGJtc3NYSEpjYmlBZ0lDQW1PblpwYzJsMFpXUXNYSEpjYmlBZ0lDQW1PbWh2ZG1WeUlIdGNjbHh1SUNBZ0lDQWdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQnViMjVsTzF4eVhHNGdJQ0FnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSmpwb2IzWmxjaUI3WEhKY2JpQWdJQ0FnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nZFc1a1pYSnNhVzVsTzF4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dWZWeHlYRzVjY2x4dUxuVjBhV3h6TFdKdmNtUmxjaTF5YVdkb2RDQjdYSEpjYmlBZ1ltOXlaR1Z5TFhKcFoyaDBPaUF4Y0hnZ2MyOXNhV1FnUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eU8xeHlYRzU5WEhKY2JseHlYRzR1YUdsa1pHVnVJSHRjY2x4dUlDQmthWE53YkdGNU9pQnViMjVsTzF4eVhHNTlYSEpjYmlJc0lpOHFLbHh5WEc0Z0tpQnphR0ZrYjNjdWJHVnpjeUF0SU9tWXRPVzlzZWFndCtXOGoraXV2dWU5cmlCdGFYaHBibmdnNVllOTVwV3dYSEpjYmlBcUlEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQxY2NseHVJQ29nUTNKbFlYUmxaQ0JDZVRvZ1dXRnZhR0ZwZUdsaGIxeHlYRzRnS2lCVmNHUmhkR1U2SURJd01qSXVNeTR5TUZ4eVhHNGdLaTljY2x4dVFHbHRjRzl5ZENBbkxpOWpiMnh2Y25Nbk8xeHlYRzVjY2x4dUx5b2dQVDA5UFQwOUlPbVl0T1c5c2VhZ3QrVzhqK2l1dnVlOXJ1V0h2ZWFWc0NBOVBUMDlQVDBnS2k5Y2NseHVMbk5vWVdSdmR5aEFiMlptYzJWME9pQXdJREFnTm5CNElERndlQ3dnUUdOdmJHOXlPaUJBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJcElIdGNjbHh1SUNCaWIzZ3RjMmhoWkc5M09pQkFiMlptYzJWMElFQmpiMnh2Y2p0Y2NseHVmVnh5WEc1Y2NseHVMbk5vWVdSdmQxOXlaV2QxYkdGeUtFQmpiMnh2Y2pvZ1FIQnlhVzFoY25sZlltOXlaR1Z5WDJOdmJHOXlLU0I3WEhKY2JpQWdMbk5vWVdSdmR5Z3dJREFnTm5CNElERndlQ3dnUUdOdmJHOXlLVHRjY2x4dWZWeHlYRzVjY2x4dUxuTm9ZV1J2ZDE5c1lYSm5aU2hBWTI5c2IzSTZJRUJ3Y21sdFlYSjVYMkp2Y21SbGNsOWpiMnh2Y2lrZ2UxeHlYRzRnSUM1emFHRmtiM2NvTUNBd0lERXljSGdnTVhCNExDQkFZMjlzYjNJcE8xeHlYRzU5WEhKY2JseHlYRzR1YzJoaFpHOTNYMnhwWjJoMFgzSmxaM1ZzWVhJb0tTQjdYSEpjYmlBZ0xuTm9ZV1J2ZDE5eVpXZDFiR0Z5S0NrN1hISmNibjFjY2x4dVhISmNiaTV6YUdGa2IzZGZiR2xuYUhSZmJHRnlaMlVvS1NCN1hISmNiaUFnTG5Ob1lXUnZkMTlzWVhKblpTZ3BPMXh5WEc1OVhISmNibHh5WEc0dWMyaGhaRzkzWDJSaGNtdGZjbVZuZFd4aGNpZ3BJSHRjY2x4dUlDQXVjMmhoWkc5M1gzSmxaM1ZzWVhJb1FITmxZMjl1WkdGeWVWOWliM0prWlhKZlkyOXNiM0lwTzF4eVhHNTlYSEpjYmx4eVhHNHVjMmhoWkc5M1gyUmhjbXRmYkdGeVoyVW9LU0I3WEhKY2JpQWdMbk5vWVdSdmQxOXNZWEpuWlNoQWMyVmpiMjVrWVhKNVgySnZjbVJsY2w5amIyeHZjaWs3WEhKY2JuMWNjbHh1SWl3aUx5b2dQVDA5UFQwOVBUMDlQU0JwWTI5dUxuUm9aVzFsSUMwZ2MzWm5JT1didnVhZ2grZWFoT2FndCtXOGp5QTlQVDA5UFQwOVBUMDlJQ292WEhKY2JpNXZkWFJzYVc1bExXbGpiMjRnZTF4eVhHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjY2x4dUlDQjZMV2x1WkdWNE9pQXhPMXh5WEc0Z0lHUnBjM0JzWVhrNklHbHViR2x1WlMxaWJHOWphenRjY2x4dUlDQjJaWEowYVdOaGJDMWhiR2xuYmpvZ2JXbGtaR3hsTzF4eVhHNGdJSGRwWkhSb09pQXhaVzA3WEhKY2JpQWdhR1ZwWjJoME9pQXhaVzA3WEhKY2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNjbHh1WEhKY2JpQWdKbDlmYzNabklIdGNjbHh1SUNBZ0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNjbHh1SUNBZ0lIb3RhVzVrWlhnNklESTdYSEpjYmlBZ0lDQjBiM0E2SURVd0pUdGNjbHh1SUNBZ0lHeGxablE2SURVd0pUdGNjbHh1SUNBZ0lIZHBaSFJvT2lBeFpXMDdYSEpjYmlBZ0lDQm9aV2xuYUhRNklERmxiVHRjY2x4dUlDQWdJR1pwYkd3NklHTjFjbkpsYm5SamIyeHZjanRjY2x4dUlDQWdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsS0MwMU1DVXNJQzAxTUNVcE8xeHlYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2NseHVJQ0I5WEhKY2JuMWNjbHh1SWl3aU9uSnZiM1FnZTF4eVhHNGdJQzB0YjNWMGJHbHVaUzE2U1c1a1pYZzZJREl3TURBN1hISmNiaUFnTFMxdmRYUnNhVzVsTFhOMGFXTnJlUzFvWldsbmFIUTZJREV3TUNVN1hISmNiaUFnTFMxdmRYUnNhVzVsTFdOb1lYQjBaWEp6TFhkcFpIUm9PaUF4TURBbE8xeHlYRzU5WEhKY2JpSXNJa0JwYlhCdmNuUWdKeTR2ZG1GeWFXRmliR1Z6Snp0Y2NseHVRR2x0Y0c5eWRDQW5MaTlqYjJ4dmNuTW5PMXh5WEc1QWFXMXdiM0owSUNjdUwzTm9ZV1J2ZHljN1hISmNibHh5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWElnZTF4eVhHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjY2x4dUlDQjZMV2x1WkdWNE9pQXRNVHRjY2x4dUlDQjBiM0E2SURBN1hISmNiaUFnYkdWbWREb2dNRHRjY2x4dUlDQnRZWEpuYVc0NklEQTdYSEpjYmlBZ2QybGtkR2c2SURFd01DVTdYSEpjYmlBZ2FHVnBaMmgwT2lBeE1EQWxPMXh5WEc0Z0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEhKY2JpQWdkbWx6YVdKcGJHbDBlVG9nYUdsa1pHVnVPMXh5WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNibHh5WEc0Z0lDWmZYMjF2WkdGc0lIdGNjbHh1SUNBZ0lDNXphR0ZrYjNkZmJHbG5hSFJmY21WbmRXeGhjaWdwTzF4eVhHNGdJQ0FnWkdsemNHeGhlVG9nWm14bGVEdGNjbHh1SUNBZ0lHWnNaWGd0WkdseVpXTjBhVzl1T2lCamIyeDFiVzQ3WEhKY2JpQWdJQ0JtYkdWNExYZHlZWEE2SUc1dmQzSmhjRHRjY2x4dUlDQWdJSEJ2YzJsMGFXOXVPaUJoWW5OdmJIVjBaVHRjY2x4dUlDQWdJSG90YVc1a1pYZzZJREl4TzF4eVhHNGdJQ0FnYUdWcFoyaDBPaUF4TURBbE8xeHlYRzRnSUNBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FIZG9hWFJsTzF4eVhHNGdJQ0FnZEhKaGJuTnBkR2x2Ymkxa2RYSmhkR2x2YmpvZ01DNDBjenRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTlvWldGa1pYSXNYSEpjYmlBZ0psOWZiV0ZwYml4Y2NseHVJQ0FtWDE5bWIyOTBaWElnZTF4eVhHNGdJQ0FnZDJsa2RHZzZJREV3TUNVN1hISmNiaUFnSUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmYUdWaFpHVnlMRnh5WEc0Z0lDWmZYMlp2YjNSbGNpQjdYSEpjYmlBZ0lDQm1iR1Y0TFhOb2NtbHVhem9nTUR0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgzUnBkR3hsTEZ4eVhHNGdJQ1pmWDIxaGFXNHNYSEpjYmlBZ0psOWZabTl2ZEdWeUlIdGNjbHh1SUNBZ0lIQmhaR1JwYm1jNklEQWdNVFp3ZUR0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyaGxZV1JsY2l4Y2NseHVJQ0FtWDE5MGFYUnNaU0I3WEhKY2JpQWdJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEhKY2JpQWdJQ0I2TFdsdVpHVjRPaUF4TzF4eVhHNGdJQ0FnYldGeVoybHVPaUF3SUdGMWRHODdYSEpjYmlBZ0lDQm9aV2xuYUhRNklEVXljSGc3WEhKY2JpQWdJQ0JzYVc1bExXaGxhV2RvZERvZ05USndlRHRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTkwYVhSc1pTQjdYSEpjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREUyY0hnN1hISmNiaUFnSUNCbWIyNTBMWGRsYVdkb2REb2dOREF3TzF4eVhHNGdJQ0FnYldGeVoybHVPaUF3SURFMmNIZzdYSEpjYmlBZ0lDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4eVhHNGdJQ0FnWW05eVpHVnlMV0p2ZEhSdmJUb2dNWEI0SUhOdmJHbGtJRUJ3Y21sdFlYSjVYMkp2Y21SbGNsOWpiMnh2Y2p0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyTnNiM05sSUh0Y2NseHVJQ0FnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2NseHVJQ0FnSUhvdGFXNWtaWGc2SURJN1hISmNiaUFnSUNCMGIzQTZJRFV3SlR0Y2NseHVJQ0FnSUhKcFoyaDBPaUF4TW5CNE8xeHlYRzRnSUNBZ2QybGtkR2c2SURJd2NIZzdYSEpjYmlBZ0lDQm9aV2xuYUhRNklESXdjSGc3WEhKY2JpQWdJQ0JzYVc1bExXaGxhV2RvZERvZ01qQndlRHRjY2x4dUlDQWdJR052Ykc5eU9pQkFabTkxY25Sb1gzUmxlSFJmWTI5c2IzSTdYSEpjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREl3Y0hnN1hISmNiaUFnSUNCMFpYaDBMV0ZzYVdkdU9pQmpaVzUwWlhJN1hISmNiaUFnSUNCamRYSnpiM0k2SUhCdmFXNTBaWEk3WEhKY2JpQWdJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZrb0xUVXdKU2s3WEhKY2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh5WEc1Y2NseHVJQ0FnSUM1dmRYUnNhVzVsTFdsamIyNGdlMXh5WEc0Z0lDQWdJQ0J3YjNOcGRHbHZiam9nWVdKemIyeDFkR1U3WEhKY2JpQWdJQ0FnSUhvdGFXNWtaWGc2SURJN1hISmNiaUFnSUNBZ0lIUnZjRG9nTUR0Y2NseHVJQ0FnSUNBZ2JHVm1kRG9nTUR0Y2NseHVJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQW1PbWh2ZG1WeUlIdGNjbHh1SUNBZ0lDQWdZMjlzYjNJNklFQjBhR2x5WkY5MFpYaDBYMk52Ykc5eU8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZiV0ZwYmlCN1hISmNiaUFnSUNCbWJHVjRPaUF4TzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdGMWRHODdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTltYjI5MFpYSWdlMXh5WEc0Z0lDQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hISmNiaUFnSUNCMFpYaDBMV0ZzYVdkdU9pQnlhV2RvZER0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5dmRtVnliR0Y1SUh0Y2NseHVJQ0FnSUdOdmJuUmxiblE2SUNjbk8xeHlYRzRnSUNBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHlYRzRnSUNBZ2VpMXBibVJsZURvZ01UdGNjbHh1SUNBZ0lIUnZjRG9nTUR0Y2NseHVJQ0FnSUd4bFpuUTZJREE3WEhKY2JpQWdJQ0IzYVdSMGFEb2dNVEF3SlR0Y2NseHVJQ0FnSUdobGFXZG9kRG9nTVRBd0pUdGNjbHh1SUNBZ0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklFQjNhR2wwWlR0Y2NseHVJQ0FnSUc5d1lXTnBkSGs2SURBdU1UdGNjbHh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgzSjBiQ3hjY2x4dUlDQW1YMngwY2lCN1hISmNiaUFnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5SUh0Y2NseHVJQ0FnSUNBZ0psOTBhVzU1SUh0Y2NseHVJQ0FnSUNBZ0lDQjNhV1IwYURvZ01qZ3djSGc3WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYldsdWFTQjdYSEpjYmlBZ0lDQWdJQ0FnZDJsa2RHZzZJRFE0TUhCNE8xeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgzTnRZV3hzSUh0Y2NseHVJQ0FnSUNBZ0lDQjNhV1IwYURvZ05UUXdjSGc3WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmY21WbmRXeGhjaUI3WEhKY2JpQWdJQ0FnSUNBZ2QybGtkR2c2SURZNE1IQjRPMXh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMjFsWkdsMWJTQjdYSEpjYmlBZ0lDQWdJQ0FnZDJsa2RHZzZJRGN5TUhCNE8xeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgyeGhjbWRsSUh0Y2NseHVJQ0FnSUNBZ0lDQjNhV1IwYURvZ09UWXdjSGc3WEhKY2JpQWdJQ0FnSUgxY2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZmNuUnNJSHRjY2x4dUlDQWdJR0p2Y21SbGNpMXNaV1owT2lBeGNIZ2djMjlzYVdRZ1FIQnlhVzFoY25sZlltOXlaR1Z5WDJOdmJHOXlPMXh5WEc1Y2NseHVJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWElnZTF4eVhHNGdJQ0FnSUNBbVgzUnBibmtnZTF4eVhHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJSEpwWjJoME9pQXRNamt3Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMjFwYm1rZ2UxeHlYRzRnSUNBZ0lDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUhKcFoyaDBPaUF0TkRrd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDNOdFlXeHNJSHRjY2x4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQnlhV2RvZERvZ0xUVTFNSEI0TzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXlaV2QxYkdGeUlIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCeWFXZG9kRG9nTFRZNU1IQjRPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5dFpXUnBkVzBnZTF4eVhHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJSEpwWjJoME9pQXROek13Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMnhoY21kbElIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCeWFXZG9kRG9nTFRrM01IQjRPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOXNkSElnZTF4eVhHNGdJQ0FnWW05eVpHVnlMWEpwWjJoME9pQXhjSGdnYzI5c2FXUWdRSEJ5YVcxaGNubGZZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNWNjbHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHlYRzRnSUNBZ0lDQW1YM1JwYm5rZ2UxeHlYRzRnSUNBZ0lDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUd4bFpuUTZJQzB5T1RCd2VEdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYldsdWFTQjdYSEpjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ2JHVm1kRG9nTFRRNU1IQjRPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5emJXRnNiQ0I3WEhKY2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdiR1ZtZERvZ0xUVTFNSEI0TzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXlaV2QxYkdGeUlIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCc1pXWjBPaUF0Tmprd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDIxbFpHbDFiU0I3WEhKY2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdiR1ZtZERvZ0xUY3pNSEI0TzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXNZWEpuWlNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnYkdWbWREb2dMVGszTUhCNE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnZlZ4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5MGRHSXNYSEpjYmlBZ0psOWlkSFFnZTF4eVhHNGdJQ0FnYkdWbWREb2dNRHRjY2x4dUlDQWdJSGRwWkhSb09pQXhNREFsTzF4eVhHNWNjbHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHlYRzRnSUNBZ0lDQW1YM1JwYm5rZ2UxeHlYRzRnSUNBZ0lDQWdJR2hsYVdkb2REb2dNalF3Y0hnN1hISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmJXbHVhU0I3WEhKY2JpQWdJQ0FnSUNBZ2FHVnBaMmgwT2lBek1qQndlRHRjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDl6YldGc2JDQjdYSEpjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBPaUF6TmpCd2VEdGNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXlaV2QxYkdGeUlIdGNjbHh1SUNBZ0lDQWdJQ0JvWldsbmFIUTZJRFF3TUhCNE8xeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgyMWxaR2wxYlNCN1hISmNiaUFnSUNBZ0lDQWdhR1ZwWjJoME9pQTBOREJ3ZUR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5c1lYSm5aU0I3WEhKY2JpQWdJQ0FnSUNBZ2FHVnBaMmgwT2lBME9EQndlRHRjY2x4dUlDQWdJQ0FnZlZ4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5MGRHSWdlMXh5WEc0Z0lDQWdZbTl5WkdWeUxXSnZkSFJ2YlRvZ01YQjRJSE52Ykdsa0lFQndjbWx0WVhKNVgySnZjbVJsY2w5amIyeHZjanRjY2x4dVhISmNiaUFnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5SUh0Y2NseHVJQ0FnSUNBZ0psOTBhVzU1SUh0Y2NseHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hISmNiaUFnSUNBZ0lDQWdJQ0IwYjNBNklDMHlOVEJ3ZUR0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZiV2x1YVNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnZEc5d09pQXRNek13Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YM050WVd4c0lIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCMGIzQTZJQzB6TnpCd2VEdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmY21WbmRXeGhjaUI3WEhKY2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdkRzl3T2lBdE5ERXdjSGc3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgyMWxaR2wxYlNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnZEc5d09pQXRORFV3Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMnhoY21kbElIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCMGIzQTZJQzAwT1RCd2VEdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUgxY2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlluUjBJSHRjY2x4dUlDQWdJSFJ2Y0RvZ2FXNXBkR2xoYkR0Y2NseHVJQ0FnSUdKdmNtUmxjaTEwYjNBNklERndlQ0J6YjJ4cFpDQkFjSEpwYldGeWVWOWliM0prWlhKZlkyOXNiM0k3WEhKY2JseHlYRzRnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hISmNiaUFnSUNBZ0lDWmZkR2x1ZVNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnWW05MGRHOXRPaUF0TWpVd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDIxcGJta2dlMXh5WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lHSnZkSFJ2YlRvZ0xUTXpNSEI0TzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXpiV0ZzYkNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnWW05MGRHOXRPaUF0TXpjd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDNKbFozVnNZWElnZTF4eVhHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJR0p2ZEhSdmJUb2dMVFF4TUhCNE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDl0WldScGRXMGdlMXh5WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lHSnZkSFJ2YlRvZ0xUUTFNSEI0TzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXNZWEpuWlNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnWW05MGRHOXRPaUF0TkRrd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgyOXdaVzVsWkNCN1hISmNiaUFnSUNCMmFYTnBZbWxzYVhSNU9pQjJhWE5wWW14bE8xeHlYRzRnSUNBZ2VpMXBibVJsZURvZ2RtRnlLQzB0YjNWMGJHbHVaUzE2U1c1a1pYZ3BPMXh5WEc1Y2NseHVJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWElnZTF4eVhHNGdJQ0FnSUNCd2IzTnBkR2x2YmpvZ1ptbDRaV1E3WEhKY2JseHlYRzRnSUNBZ0lDQW1YM0owYkNCN1hISmNiaUFnSUNBZ0lDQWdjbWxuYUhRNklEQTdYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZiSFJ5SUh0Y2NseHVJQ0FnSUNBZ0lDQnNaV1owT2lBd08xeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgzUjBZaUI3WEhKY2JpQWdJQ0FnSUNBZ2RHOXdPaUF3TzF4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDJKMGRDQjdYSEpjYmlBZ0lDQWdJQ0FnWW05MGRHOXRPaUF3TzF4eVhHNGdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgyOW1abk5sZENCN1hISmNiaUFnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5SUh0Y2NseHVJQ0FnSUNBZ0psOXlkR3dzWEhKY2JpQWdJQ0FnSUNaZmJIUnlJSHRjY2x4dUlDQWdJQ0FnSUNCb1pXbG5hSFE2SUdOaGJHTW9NVEF3SlNBdElEUmxiU2s3WEhKY2JpQWdJQ0FnSUNBZ2RHOXdPaUExTUNVN1hISmNiaUFnSUNBZ0lDQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZaS0MwMU1DVXBPMXh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YM1IwWWl4Y2NseHVJQ0FnSUNBZ0psOWlkSFFnZTF4eVhHNGdJQ0FnSUNBZ0lIZHBaSFJvT2lCallXeGpLREV3TUNVZ0xTQTBaVzBwTzF4eVhHNGdJQ0FnSUNBZ0lHeGxablE2SURVd0pUdGNjbHh1SUNBZ0lDQWdJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZnb0xUVXdKU2s3WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYjNCbGJtVmtJSHRjY2x4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5SUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ1pmY25Sc0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtbG5hSFE2SURKbGJUdGNjbHh1SUNBZ0lDQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ0FnSUNBbVgyeDBjaUI3WEhKY2JpQWdJQ0FnSUNBZ0lDQWdJR3hsWm5RNklESmxiVHRjY2x4dUlDQWdJQ0FnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNBZ0lDQW1YM1IwWWlCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUhSdmNEb2dNbVZ0TzF4eVhHNGdJQ0FnSUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0lDQWdJQ1pmWW5SMElIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ1ltOTBkRzl0T2lBeVpXMDdYSEpjYmlBZ0lDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JpQWdJQ0I5WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDJGMWRHOGdlMXh5WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNpQjdYSEpjYmlBZ0lDQWdJQ1pmY25Sc0xGeHlYRzRnSUNBZ0lDQW1YMngwY2lCN1hISmNiaUFnSUNBZ0lDQWdhR1ZwWjJoME9pQmhkWFJ2TzF4eVhHNGdJQ0FnSUNBZ0lHMWhlQzFvWldsbmFIUTZJR05oYkdNb01UQXdKU0F0SURSbGJTazdYSEpjYmlBZ0lDQWdJSDFjY2x4dUlDQWdJSDFjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWm5Wc2JDQjdYSEpjYmlBZ0lDQndZV1JrYVc1bk9pQXdPMXh5WEc0Z0lIMWNjbHh1ZlZ4eVhHNGlMQ0pBYVcxd2IzSjBJQ2N1TDJOdmJHOXljeWM3WEhKY2JseHlYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5JSHRjY2x4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYSEpjYmlBZ2VpMXBibVJsZURvZ01UdGNjbHh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNWNjbHh1SUNBbVgxOWhibU5vYjNJZ2UxeHlYRzRnSUNBZ1pHbHpjR3hoZVRvZ2JtOXVaVHRjY2x4dVhISmNiaUFnSUNBbU9teHBibXNzWEhKY2JpQWdJQ0FtT25acGMybDBaV1FzWEhKY2JpQWdJQ0FtT21odmRtVnlJSHRjY2x4dUlDQWdJQ0FnWTI5c2IzSTZJRUJtYjNWeWRHaGZkR1Y0ZEY5amIyeHZjanRjY2x4dUlDQWdJQ0FnZEdWNGRDMWtaV052Y21GMGFXOXVPaUJ1YjI1bE8xeHlYRzRnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ1k2YUc5MlpYSWdlMXh5WEc0Z0lDQWdJQ0JqYjJ4dmNqb2dRSEJ5YVcxaGNubGZZMjlzYjNJN1hISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbU9taHZkbVZ5SUh0Y2NseHVJQ0FnSUM1dmRYUnNhVzVsTFdobFlXUnBibWRmWDJGdVkyaHZjaUI3WEhKY2JpQWdJQ0FnSUdScGMzQnNZWGs2SUdsdWJHbHVaUzFpYkc5amF6dGNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZjM1JoY25RZ2UxeHlYRzRnSUNBZ0pqcG9iM1psY2lCN1hISmNiaUFnSUNBZ0lHOTJaWEptYkc5M09pQjJhWE5wWW14bE8xeHlYRzRnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQzV2ZFhSc2FXNWxMV2hsWVdScGJtZGZYMkZ1WTJodmNpQjdYSEpjYmlBZ0lDQWdJSEJ2YzJsMGFXOXVPaUJoWW5OdmJIVjBaVHRjY2x4dUlDQWdJQ0FnZWkxcGJtUmxlRG9nTWp0Y2NseHVJQ0FnSUNBZ2RHOXdPaUExTUNVN1hISmNiaUFnSUNBZ0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxXU2d0TlRBbEtUdGNjbHh1SUNBZ0lDQWdiR1ZtZERvZ0xURmxiVHRjY2x4dUlDQWdJSDFjY2x4dUlDQjlYSEpjYm4xY2NseHVJaXdpUUdsdGNHOXlkQ0FuTGk5MllYSnBZV0pzWlhNbk8xeHlYRzVBYVcxd2IzSjBJQ2N1TDJOdmJHOXljeWM3WEhKY2JrQnBiWEJ2Y25RZ0p5NHZaV3hzYVhCemFYTW5PMXh5WEc1Y2NseHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTWdlMXh5WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNjbHh1SUNCNkxXbHVaR1Y0T2lBeE8xeHlYRzRnSUcxaGNtZHBiam9nTUR0Y2NseHVJQ0IzYVdSMGFEb2dkbUZ5S0MwdGIzVjBiR2x1WlMxamFHRndkR1Z5Y3kxM2FXUjBhQ2s3WEhKY2JpQWdkSEpoYm5OcGRHbHZiaTFrZFhKaGRHbHZiam9nTUM0emN6dGNjbHh1SUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjY2x4dVhISmNiaUFnSmw5ZmRHbDBiR1VnZTF4eVhHNGdJQ0FnYldGeVoybHVPaUF3SURFMmNIZzdYSEpjYmlBZ0lDQm9aV2xuYUhRNklEUXdjSGc3WEhKY2JpQWdJQ0JzYVc1bExXaGxhV2RvZERvZ05EQndlRHRjY2x4dUlDQWdJSEJoWkdScGJtYzZJREFnTVRad2VEdGNjbHh1SUNBZ0lHSnZjbVJsY2kxaWIzUjBiMjA2SURGd2VDQnpiMnhwWkNCQWNISnBiV0Z5ZVY5aWIzSmtaWEpmWTI5c2IzSTdYSEpjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREUyY0hnN1hISmNiaUFnSUNCbWIyNTBMWGRsYVdkb2REb2dOREF3TzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDIxaGFXNGdlMXh5WEc0Z0lDQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh5WEc0Z0lDQWdlaTFwYm1SbGVEb2dNVHRjY2x4dUlDQWdJRzFoY21kcGJqb2dNRHRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTlzYVhOMExGeHlYRzRnSUNaZlgzTjFZbXBsWTNRc1hISmNiaUFnSmw5ZmFYUmxiU0I3WEhKY2JpQWdJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEhKY2JpQWdJQ0I2TFdsdVpHVjRPaUF5TzF4eVhHNGdJQ0FnYldGeVoybHVPaUF3TzF4eVhHNGdJQ0FnY0dGa1pHbHVaem9nTUR0Y2NseHVJQ0FnSUd4cGMzUXRjM1I1YkdVdGRIbHdaVG9nYm05dVpUdGNjbHh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOXNhWE4wSUh0Y2NseHVJQ0FnSUhCaFpHUnBibWM2SURBdU5XVnRJREE3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5emRXSnFaV04wSUh0Y2NseHVJQ0FnSUhCaFpHUnBibWN0YkdWbWREb2dNV1Z0TzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZmFYUmxiU0I3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREE3WEhKY2JpQWdJQ0JzYVc1bExXaGxhV2RvZERvZ016QndlRHRjY2x4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVROd2VEdGNjbHh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOXdiR0ZqWldodmJHUmxjaUI3WEhKY2JpQWdJQ0J3YjNOcGRHbHZiam9nWVdKemIyeDFkR1U3WEhKY2JpQWdJQ0I2TFdsdVpHVjRPaUF4TzF4eVhHNGdJQ0FnZEc5d09pQXdPMXh5WEc0Z0lDQWdiR1ZtZERvZ01EdGNjbHh1SUNBZ0lIZHBaSFJvT2lBeE1EQWxPMXh5WEc0Z0lDQWdhR1ZwWjJoME9pQXpNSEI0TzF4eVhHNGdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUdodmRtVnlYMkpuWDJOdmJHOXlPMXh5WEc0Z0lDQWdZbTl5WkdWeUxXeGxablE2SURKd2VDQnpiMnhwWkNCQWMzVmpZMlZ6YzE5amIyeHZjanRjY2x4dUlDQWdJSFJ5WVc1emFYUnBiMjR0WkhWeVlYUnBiMjQ2SURBdU1uTTdYSEpjYmlBZ0lDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDJGdVkyaHZjaUI3WEhKY2JpQWdJQ0F1Wld4c2FYQnphWE1vTVNrN1hISmNiaUFnSUNCa2FYTndiR0Y1T2lCaWJHOWphenRjY2x4dUlDQWdJSEJoWkdScGJtYzZJREFnTVM0MVpXMDdYSEpjYmx4eVhHNGdJQ0FnSmpwc2FXNXJMRnh5WEc0Z0lDQWdKanAyYVhOcGRHVmtMRnh5WEc0Z0lDQWdKanBvYjNabGNpQjdYSEpjYmlBZ0lDQWdJSFJsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlR0Y2NseHVJQ0FnSUNBZ1kyOXNiM0k2SUVCelpXTnZibVJoY25sZmRHVjRkRjlqYjJ4dmNqdGNjbHh1SUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FtT21odmRtVnlJSHRjY2x4dUlDQWdJQ0FnWTI5c2IzSTZJRUJ6ZFdOalpYTnpYMk52Ykc5eU8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZZMjlrWlNCN1hISmNiaUFnSUNCd1lXUmthVzVuTFhKcFoyaDBPaUF3TGpWbGJUdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZZV04wYVhabElIdGNjbHh1SUNBZ0lDWXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZZVzVqYUc5eUlIdGNjbHh1SUNBZ0lDQWdKanBzYVc1ckxGeHlYRzRnSUNBZ0lDQW1PblpwYzJsMFpXUXNYSEpjYmlBZ0lDQWdJQ1k2YUc5MlpYSWdlMXh5WEc0Z0lDQWdJQ0FnSUdOdmJHOXlPaUJBYzNWalkyVnpjMTlqYjJ4dmNqdGNjbHh1SUNBZ0lDQWdJQ0JtYjI1MExYZGxhV2RvZERvZ05EQXdPMXh5WEc0Z0lDQWdJQ0I5WEhKY2JpQWdJQ0I5WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDNOMGFXTnJlU3hjY2x4dUlDQW1YMlpwZUdWa0lIdGNjbHh1SUNBZ0lHUnBjM0JzWVhrNklHWnNaWGc3WEhKY2JpQWdJQ0JtYkdWNExYZHlZWEE2SUc1dmQzSmhjRHRjY2x4dUlDQWdJR1pzWlhndFpHbHlaV04wYVc5dU9pQmpiMngxYlc0N1hISmNiaUFnSUNCNkxXbHVaR1Y0T2lCMllYSW9MUzF2ZFhSc2FXNWxMWHBKYm1SbGVDazdYSEpjYmlBZ0lDQjBiM0E2SURBN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNWNjbHh1SUNBZ0lDNXZkWFJzYVc1bExXTm9ZWEIwWlhKeklIdGNjbHh1SUNBZ0lDQWdKbDlmZEdsMGJHVXNYSEpjYmlBZ0lDQWdJQ1pmWDIxaGFXNGdlMXh5WEc0Z0lDQWdJQ0FnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZYM1JwZEd4bElIdGNjbHh1SUNBZ0lDQWdJQ0JtYkdWNExYTm9jbWx1YXpvZ01EdGNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOWZiV0ZwYmlCN1hISmNiaUFnSUNBZ0lDQWdabXhsZURvZ01UdGNjbHh1SUNBZ0lDQWdJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNjbHh1SUNBZ0lDQWdmVnh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDl6ZEdsamEza2dlMXh5WEc0Z0lDQWdjRzl6YVhScGIyNDZJSE4wYVdOcmVUdGNjbHh1SUNBZ0lHMWhlQzFvWldsbmFIUTZJSFpoY2lndExXOTFkR3hwYm1VdGMzUnBZMnQ1TFdobGFXZG9kQ2s3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDJacGVHVmtJSHRjY2x4dUlDQWdJSEJ2YzJsMGFXOXVPaUJtYVhobFpEdGNjbHh1SUNBZ0lHMWhlQzFvWldsbmFIUTZJREV3TUNVN1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgyaHBaR1JsYmlCN1hISmNiaUFnSUNCa2FYTndiR0Y1T2lCdWIyNWxPMXh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDltYjJ4a1pXUWdlMXh5WEc0Z0lDQWdkMmxrZEdnNklEQTdYSEpjYmlBZ2ZWeHlYRzU5WEhKY2JpSXNJaThxS2x4dUlDb2daV3hzYVhCemFYTXViR1Z6Y3lBdElPYVdoK2Fjck9lY2dlZVZwU0J0YVhocGJuZ2c1WWU5NXBXd1hHNGdLaUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzRnS2lCRGNtVmhkR1ZrSUVKNU9pQlpZVzlvWVdsNGFXRnZYRzRnS2lCVmNHUmhkR1U2SURJd01qSXVNeTR4TVZ4dUlDb3ZYRzVjYmk4cUlEMDlQVDA5UFNEbWxvZm1uS3pubklIbmxhWGxoNzNtbGJBZ1BUMDlQVDA5SUNvdlhHNHVaV3hzYVhCemFYTWdLRUJzYVc1bGN5a2dkMmhsYmlBb1FHeHBibVZ6UFRFcElIdGNiaUFnZDJocGRHVXRjM0JoWTJVNklHNXZkM0poY0R0Y2JpQWdkR1Y0ZEMxdmRtVnlabXh2ZHpvZ1pXeHNhWEJ6YVhNN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc1Y2JpNWxiR3hwY0hOcGN5QW9RR3hwYm1WektTQjNhR1Z1SUNoQWJHbHVaWE0rUFRJcElIdGNiaUFnTFhkbFltdHBkQzFzYVc1bExXTnNZVzF3T2lCQWJHbHVaWE03WEc0Z0lHUnBjM0JzWVhrNklHSnZlRHRjYmlBZ0xYZGxZbXRwZEMxaWIzZ3RiM0pwWlc1ME9pQjJaWEowYVdOaGJEdGNiaUFnZEdWNGRDMXZkbVZ5Wm14dmR6b2daV3hzYVhCemFYTTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNGlMQ0l2S2lBOVBUMDlQVDA5UFQwOUlHSjFkSFJ2Ym5NdWRHaGxiV1VnTFNEbWpJbnBrcTdscjd6b2lLcm1vTGZsdkk4Z1BUMDlQVDA5UFQwOVBTQXFMMXh5WEc1QWFXMXdiM0owSUNjdUwyTnZiRzl5Y3ljN1hISmNia0JwYlhCdmNuUWdKeTR2YzJoaFpHOTNKenRjY2x4dVhISmNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSWdlMXh5WEc0Z0lIQnZjMmwwYVc5dU9pQm1hWGhsWkR0Y2NseHVJQ0I2TFdsdVpHVjRPaUE1T1RrNU9UdGNjbHh1SUNCdFlYSm5hVzQ2SURBN1hISmNiaUFnZEhKaGJuTnBkR2x2Ymkxa2RYSmhkR2x2YmpvZ01DNHpjenRjY2x4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzVjY2x4dUlDQW1YMTlpZFhSMGIyNGdlMXh5WEc0Z0lDQWdMbk5vWVdSdmQxOXNhV2RvZEY5eVpXZDFiR0Z5S0NrN1hISmNiaUFnSUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hISmNiaUFnSUNCNkxXbHVaR1Y0T2lBeE8xeHlYRzRnSUNBZ2JXRnlaMmx1T2lBeE1IQjRPMXh5WEc0Z0lDQWdkMmxrZEdnNklETTJjSGc3WEhKY2JpQWdJQ0JvWldsbmFIUTZJRE0yY0hnN1hISmNiaUFnSUNCaWIzSmtaWEk2SURGd2VDQnpiMnhwWkNCQWNISnBiV0Z5ZVY5aWIzSmtaWEpmWTI5c2IzSTdYSEpjYmlBZ0lDQmliM0prWlhJdGNtRmthWFZ6T2lBemNIZzdYSEpjYmlBZ0lDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4eVhHNGdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUhkb2FYUmxPMXh5WEc0Z0lDQWdZM1Z5YzI5eU9pQndiMmx1ZEdWeU8xeHlYRzRnSUNBZ2RHVjRkQzFoYkdsbmJqb2dZMlZ1ZEdWeU8xeHlYRzRnSUNBZ1kyOXNiM0k2SUVCelpXTnZibVJoY25sZmRHVjRkRjlqYjJ4dmNqdGNjbHh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNibHh5WEc0Z0lDQWdKanBvYjNabGNpQjdYSEpjYmlBZ0lDQWdJR052Ykc5eU9pQkFjM1ZqWTJWemMxOWpiMnh2Y2p0Y2NseHVJQ0FnSUNBZ1ltOXlaR1Z5TFdOdmJHOXlPaUJBYzNWalkyVnpjMTlqYjJ4dmNqdGNjbHh1SUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FtTG1ocFpHVWdlMXh5WEc0Z0lDQWdJQ0JrYVhOd2JHRjVPaUJ1YjI1bE8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZZVzVqYUc5eUlIdGNjbHh1SUNBZ0lDWTZiR2x1YXl4Y2NseHVJQ0FnSUNZNmRtbHphWFJsWkN4Y2NseHVJQ0FnSUNZNmFHOTJaWElnZTF4eVhHNGdJQ0FnSUNCamIyeHZjam9nUUdadmRYSjBhRjkwWlhoMFgyTnZiRzl5TzF4eVhHNGdJQ0FnSUNCMFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSmpwb2IzWmxjaUI3WEhKY2JpQWdJQ0FnSUdOdmJHOXlPaUJBYzNWalkyVnpjMTlqYjJ4dmNqdGNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMmxqYjI0Z2UxeHlYRzRnSUNBZ2NHOXphWFJwYjI0NklHRmljMjlzZFhSbE8xeHlYRzRnSUNBZ2VpMXBibVJsZURvZ01qdGNjbHh1SUNBZ0lIUnZjRG9nTlRBbE8xeHlYRzRnSUNBZ2JHVm1kRG9nTlRBbE8xeHlYRzRnSUNBZ2QybGtkR2c2SURJd2NIZzdYSEpjYmlBZ0lDQm9aV2xuYUhRNklESXdjSGc3WEhKY2JpQWdJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlNndE5UQWxMQ0F0TlRBbEtUdGNjbHh1SUNBZ0lHWnBiR3c2SUdOMWNuSmxiblJqYjJ4dmNqdGNjbHh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgyRmpkR2wyWlNCN1hISmNiaUFnSUNBbUxtOTFkR3hwYm1VdGRHOXZiR0poY2lCN1hISmNiaUFnSUNBZ0lDWmZYMkoxZEhSdmJpQjdYSEpjYmlBZ0lDQWdJQ0FnWTI5c2IzSTZJRUIzYUdsMFpUdGNjbHh1SUNBZ0lDQWdJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUJBYzNWalkyVnpjMTlqYjJ4dmNqdGNjbHh1SUNBZ0lDQWdJQ0JpYjNKa1pYSXRZMjlzYjNJNklFQnpkV05qWlhOelgyTnZiRzl5TzF4eVhHNWNjbHh1SUNBZ0lDQWdJQ0FtT21odmRtVnlJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lHTnZiRzl5T2lCQWQyaHBkR1U3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWVc1amFHOXlJSHRjY2x4dUlDQWdJQ0FnSmpwc2FXNXJMRnh5WEc0Z0lDQWdJQ0FtT25acGMybDBaV1FzWEhKY2JpQWdJQ0FnSUNZNmFHOTJaWElnZTF4eVhHNGdJQ0FnSUNBZ0lHTnZiRzl5T2lCQWQyaHBkR1U3WEhKY2JpQWdJQ0FnSUgxY2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZmNtOTFibVJsWkNCN1hISmNiaUFnSUNBbUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZlluVjBkRzl1SUh0Y2NseHVJQ0FnSUNBZ1ltOXlaR1Z5TFhKaFpHbDFjem9nTVRod2VEdGNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZaR2x6WVdKc1pXUWdlMXh5WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSXNYSEpjYmlBZ0lDQXViM1YwYkdsdVpTMTBiMjlzWW1GeUlIdGNjbHh1SUNBZ0lDQWdKbDlmWVc1amFHOXlPbXhwYm1zc1hISmNiaUFnSUNBZ0lDWmZYMkZ1WTJodmNqcDJhWE5wZEdWa0xGeHlYRzRnSUNBZ0lDQW1YMTloYm1Ob2IzSTZhRzkyWlhJc1hISmNiaUFnSUNBZ0lDWmZYMkoxZEhSdmJpQjdYSEpjYmlBZ0lDQWdJQ0FnWTNWeWMyOXlPaUJ1YjNRdFlXeHNiM2RsWkR0Y2NseHVJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ1FHWnZkWEowYUY5MFpYaDBYMk52Ykc5eU8xeHlYRzVjY2x4dUlDQWdJQ0FnSUNBbU9taHZkbVZ5SUh0Y2NseHVJQ0FnSUNBZ0lDQWdJR052Ykc5eU9pQkFabTkxY25Sb1gzUmxlSFJmWTI5c2IzSTdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDE5aWRYUjBiMjRnZTF4eVhHNGdJQ0FnSUNBZ0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklFQmthWE5oWW14bFpGOWlaMTlqYjJ4dmNqdGNjbHh1SUNBZ0lDQWdmVnh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDkwZEdJc1hISmNiaUFnSmw5aWRIUWdlMXh5WEc0Z0lDQWdiR1ZtZERvZ05UQWxPMXh5WEc0Z0lDQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZZS0MwMU1DVXBPMXh5WEc1Y2NseHVJQ0FnSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaUI3WEhKY2JpQWdJQ0FnSUdScGMzQnNZWGs2SUdsdWJHbHVaUzFpYkc5amF6dGNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZkSFJpSUh0Y2NseHVJQ0FnSUhSdmNEb2dNVEp3ZUR0Y2NseHVYSEpjYmlBZ0lDQW1MbTkxZEd4cGJtVXRkRzl2YkdKaGNsOW9hV1JrWlc0Z2UxeHlYRzRnSUNBZ0lDQjBiM0E2SUMwMU5uQjRPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlpZEhRZ2UxeHlYRzRnSUNBZ1ltOTBkRzl0T2lBeE1uQjRPMXh5WEc1Y2NseHVJQ0FnSUNZdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEhKY2JpQWdJQ0FnSUdKdmRIUnZiVG9nTFRVMmNIZzdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YM0owYkN4Y2NseHVJQ0FtWDJ4MGNpQjdYSEpjYmlBZ0lDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaVmtvTFRVd0pTazdYSEpjYmlBZ0lDQjNhV1IwYURvZ05UWndlRHRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmY25Sc0lIdGNjbHh1SUNBZ0lIUnZjRG9nTlRBbE8xeHlYRzRnSUNBZ2NtbG5hSFE2SURFeWNIZzdYSEpjYmx4eVhHNGdJQ0FnSmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYUdsa1pHVnVJSHRjY2x4dUlDQWdJQ0FnY21sbmFIUTZJQzA0Tm5CNE8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOXNkSElnZTF4eVhHNGdJQ0FnZEc5d09pQTFNQ1U3WEhKY2JpQWdJQ0JzWldaME9pQXhNbkI0TzF4eVhHNWNjbHh1SUNBZ0lDWXViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYmlCN1hISmNiaUFnSUNBZ0lHeGxablE2SUMwNE5uQjRPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDkwZEdJc1hISmNiaUFnSmw5eWRHd3NYSEpjYmlBZ0psOWlkSFFzWEhKY2JpQWdKbDlzZEhJZ2UxeHlYRzRnSUNBZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZlluVjBkRzl1SUh0Y2NseHVJQ0FnSUNBZ0ppNXZkWFJzYVc1bExYUnZiMnhpWVhKZmFHbGtaR1Z1SUh0Y2NseHVJQ0FnSUNBZ0lDQmthWE53YkdGNU9pQnViMjVsTzF4eVhHNGdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNTlYSEpjYmlKZGZRPT0gKi9cbiJdLCJmaWxlIjoiY3NzL2V4YW1wbGUubWluLmNzcyJ9 */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJjc3MvZXhhbXBsZS5jc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxuICovXG4vKiA9PT09PT09PT09IGNvbG9ycy50aGVtZSAtIOWfuuehgOminOiJsuWPmOmHj+mbhuWQiCA9PT09PT09PT09ICovXG4vKiA9PT09PT0g6Zi05b2x5qC35byP6K6+572u5Ye95pWwID09PT09PSAqL1xuLyogPT09PT0gU2Nyb2xsYmFyID09PT09ICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDdweDtcbiAgaGVpZ2h0OiA3cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuLnNlY3Rpb24ge1xuICBtYXJnaW46IDFlbSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2hlYWRlcixcbi5zZWN0aW9uX19jb250ZW50LFxuLnNlY3Rpb25fX2Zvb3RlciB7XG4gIG1hcmdpbjogMCAzZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fdGl0bGUge1xuICBjb2xvcjogIzY2Njtcbn1cbi5zZWN0aW9uX19oMyB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xuICBmb250LXNpemU6IDEuMzVlbTtcbn1cbi5zZWN0aW9uX19oNCB7XG4gIGZvbnQtc2l6ZTogMS4xZW07XG4gIGNvbG9yOiAjNjY2O1xufVxuLnNlY3Rpb25fX2g1IHtcbiAgZm9udC1zaXplOiAxZW07XG4gIGNvbG9yOiAjOTk5O1xufVxuLnNlY3Rpb25fX2RsLFxuLnNlY3Rpb25fX2R0LFxuLnNlY3Rpb25fX2RkIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLnNlY3Rpb25fX2RsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xufVxuLnNlY3Rpb25fX2R0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLnNlY3Rpb25fX2RkIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5zZWN0aW9uX19wcmUge1xuICBtYXJnaW46IDJlbSAwO1xuICBwYWRkaW5nOiAxZW07XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE1MCU7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmYWZhZmE7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgY29sb3I6ICM2NjY7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLnNlY3Rpb25fX2NvZGUge1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luOiAwIGF1dG87XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uc2VjdGlvbl9fZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gIG1hcmdpbi10b3A6IDNlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbiAgY29sb3I6ICM5OTk7XG59XG4uY2FzZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgMWZyKTtcbiAgZ2FwOiA0MHB4O1xuICBwYWRkaW5nOiAxZW07XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlOmFmdGVyIHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDA7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RkZDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5jYXNlX19wcmUsXG4uY2FzZV9fdGV4dGFyZWEge1xuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xufVxuLmNhc2VfX3ByZSxcbi5jYXNlX19jb2RlLFxuLmNhc2VfX3RleHRhcmVhIHtcbiAgZm9udC1mYW1pbHk6IFwiQ291cmllciBOZXdcIiwgQ29uc29sYXMsIEdlb3JnaWEsIEFyaWFsLCBzYW5zLXNlcmlmO1xufVxuLmNhc2VfX3ByZSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLmNhc2VfX3Rvb2xiYXIge1xuICBtYXJnaW46IDAgYXV0bztcbiAgaGVpZ2h0OiAzNnB4O1xuICBsaW5lLWhlaWdodDogMzZweDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBwYWRkaW5nOiAwIDE2cHg7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX2FjdGlvbixcbi5jYXNlX19yZW1vdmUge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuLmNhc2VfX2FjdGlvbiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xufVxuLmNhc2VfX2FjdGlvbjpmaXJzdC1jaGlsZCB7XG4gIHBhZGRpbmctbGVmdDogMDtcbn1cbi5jYXNlX19yZW1vdmUge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uY2FzZV9fY29uc29sZSB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDE4MHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLmNhc2VfX3RleHRhcmVhIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlcjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgcGFkZGluZzogMWVtO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uY2FzZV9fbGlzdCxcbi5jYXNlX19pdGVtIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uY2FzZV9fbGlzdCB7XG4gIGhlaWdodDogMzYwcHg7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5jYXNlX19pdGVtIHtcbiAgaGVpZ2h0OiAzNnB4O1xuICBsaW5lLWhlaWdodDogMzZweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4uY2FzZV9faXRlbTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y4Zjk7XG59XG4ucGFwZXIge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgbWFyZ2luOiAyZW0gYXV0bztcbiAgbWF4LXdpZHRoOiAxMjAwcHg7XG4gIHBhZGRpbmc6IDJlbTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ucGFwZXIuZmxleCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiBob3Jpem9udGFsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5wYXBlci5mbGV4IC5hcnRpY2xlIHtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ucGFwZXIuZmxleCAuYXJ0aWNsZV9fbWFpbiB7XG4gIGhlaWdodDogMTAwJTtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLnBhcGVyLmZsZXggLmFydGljbGVfX2FzaWRlIHtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5oZWFkZXIge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICB6LWluZGV4OiAzO1xuICB0b3A6IDA7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5oZWFkZXJfc3RpY2t5IHtcbiAgcGFkZGluZy1sZWZ0OiAyNjBweDtcbn1cbi5hcnRpY2xlIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IGhvcml6b250YWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBhZGRpbmc6IDJlbSAwO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAxNTAlO1xufVxuLmFydGljbGVfX21haW4ge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgcGFkZGluZzogMCAyZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uYXJ0aWNsZV9fbWFpbiAuc2VjdGlvbiB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2NvbnRlbnQsXG4uYXJ0aWNsZV9fbWFpbiAuc2VjdGlvbl9fZm9vdGVyLFxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2hlYWRlciB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLmFydGljbGVfX21haW4gLnNlY3Rpb25fX2hlYWRlcixcbi5hcnRpY2xlX19tYWluIC5zZWN0aW9uX19jb250ZW50IHtcbiAgbWFyZ2luOiAwO1xufVxuLmFydGljbGVfX2FzaWRlIHtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgd2lkdGg6IDI0MHB4O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xufVxuLmFydGljbGVfX2FzaWRlLmx0ciB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7XG4gIGJvcmRlci1sZWZ0OiBub25lO1xufVxuLmFydGljbGVfX2FzaWRlIC5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cbnByZSxcbi5zZWN0aW9uX19wcmUge1xuICBwYWRkaW5nOiAyZW07XG4gIGZvbnQtZmFtaWx5OiBcIkNvdXJpZXIgTmV3XCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmFmYWZhO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbmNvZGUsXG4uc2VjdGlvbl9fY29kZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkNvdXJpZXIgTmV3XCIsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE2cHg7XG59XG4uZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkY2RmZTY7XG4gIHBhZGRpbmc6IDNlbSAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZm9vdGVyIGE6bGluayxcbi5mb290ZXIgYTp2aXNpdGVkLFxuLmZvb3RlciBhOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5mb290ZXIgYTpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuLnV0aWxzLWJvcmRlci1yaWdodCB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4uaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi8qID09PT09PT09PT0gaWNvbi50aGVtZSAtIHN2ZyDlm77moIfnmoTmoLflvI8gPT09PT09PT09PSAqL1xuLm91dGxpbmUtaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWljb25fX3N2ZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDFlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbjpyb290IHtcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcbn1cbi5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogLTE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19tb2RhbCB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjE7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlLFxuLm91dGxpbmUtZHJhd2VyX19tYWluLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDUycHg7XG4gIGxpbmUtaGVpZ2h0OiA1MnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXNpemU6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIC5vdXRsaW5lLWljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2U6aG92ZXIge1xuICBjb2xvcjogIzY2Njtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbWFpbiB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19vdmVybGF5IHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAwLjE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICB3aWR0aDogMjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21pbmkge1xuICB3aWR0aDogNDgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3NtYWxsLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9zbWFsbCB7XG4gIHdpZHRoOiA1NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIHdpZHRoOiA2ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICB3aWR0aDogNzIwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX2xhcmdlLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9sYXJnZSB7XG4gIHdpZHRoOiA5NjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTczMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTI5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC02OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yixcbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueSB7XG4gIGhlaWdodDogMjQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21pbmkge1xuICBoZWlnaHQ6IDMyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICBoZWlnaHQ6IDM2MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyIHtcbiAgaGVpZ2h0OiA0MDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICBoZWlnaHQ6IDQ0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICBoZWlnaHQ6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB0b3A6IGluaXRpYWw7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xuICB0b3A6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0ZW0pO1xuICBsZWZ0OiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIHJpZ2h0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBsZWZ0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl90dGIge1xuICB0b3A6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGJvdHRvbTogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfcnRsLFxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xufVxuLm91dGxpbmUtZHJhd2VyX2Z1bGwge1xuICBwYWRkaW5nOiAwO1xufVxuLm91dGxpbmUtaGVhZGluZyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMWY4ZGQ2O1xufVxuLm91dGxpbmUtaGVhZGluZzpob3ZlciAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0OmhvdmVyIHtcbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG4ub3V0bGluZS1oZWFkaW5nX3N0YXJ0IC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgbGVmdDogLTFlbTtcbn1cbi8qKlxuICogZWxsaXBzaXMubGVzcyAtIOaWh+acrOecgeeVpSBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4xMVxuICovXG4vKiA9PT09PT0g5paH5pys55yB55Wl5Ye95pWwID09PT09PSAqL1xuLm91dGxpbmUtY2hhcHRlcnMge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IHZhcigtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGgpO1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICBtYXJnaW46IDAgMTZweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBsaW5lLWhlaWdodDogNDBweDtcbiAgcGFkZGluZzogMCAxNnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19saXN0LFxuLm91dGxpbmUtY2hhcHRlcnNfX3N1YmplY3QsXG4ub3V0bGluZS1jaGFwdGVyc19faXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbGlzdCB7XG4gIHBhZGRpbmc6IDAuNWVtIDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fc3ViamVjdCB7XG4gIHBhZGRpbmctbGVmdDogMWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2l0ZW0ge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fcGxhY2Vob2xkZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmOTtcbiAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMDU4OTQyO1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAwIDEuNWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY29sb3I6ICM1NTU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fY29kZSB7XG4gIHBhZGRpbmctcmlnaHQ6IDAuNWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfYWN0aXZlLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtY2hhcHRlcnNfYWN0aXZlLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtY2hhcHRlcnNfYWN0aXZlLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5LFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHotaW5kZXg6IHZhcigtLW91dGxpbmUtekluZGV4KTtcbiAgdG9wOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlIHtcbiAgLW1zLWZsZXgtbmVnYXRpdmU6IDA7XG4gICAgICBmbGV4LXNocmluazogMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgICAgIC1tcy1mbGV4OiAxO1xuICAgICAgICAgIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgbWF4LWhlaWdodDogdmFyKC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0KTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2ZvbGRlZCB7XG4gIHdpZHRoOiAwO1xufVxuLyogPT09PT09PT09PSBidXR0b25zLnRoZW1lIC0g5oyJ6ZKu5a+86Iiq5qC35byPID09PT09PT09PT0gKi9cbi5vdXRsaW5lLXRvb2xiYXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5O1xuICBtYXJnaW46IDA7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAxMHB4O1xuICB3aWR0aDogMzZweDtcbiAgaGVpZ2h0OiAzNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGNkZmU2O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICM1NTU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgYm9yZGVyLWNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLmhpZGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2ljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNTg5NDI7XG4gIGJvcmRlci1jb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ub3V0bGluZS10b29sYmFyX3JvdW5kZWQub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAxOHB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBjb2xvcjogIzk5OTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluazpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbms6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQ6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIsXG4ub3V0bGluZS10b29sYmFyX2J0dCB7XG4gIGxlZnQ6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9idHQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIge1xuICB0b3A6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX3R0Yi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgdG9wOiAtNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYnR0IHtcbiAgYm90dG9tOiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9idHQub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGJvdHRvbTogLTU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bCxcbi5vdXRsaW5lLXRvb2xiYXJfbHRyIHtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB3aWR0aDogNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsIHtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIHJpZ2h0OiAtODZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfbHRyIHtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX2x0ci5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgbGVmdDogLTg2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfcnRsIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9idHQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX2x0ciAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zjg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMenhwYm5CMWRDQmpjM01nTWo0aUxDSnpZM0p2Ykd4aVlYSXViR1Z6Y3lJc0luTmxZM1JwYjI0dWJHVnpjeUlzSW1OaGMyVXViR1Z6Y3lJc0luQmhaMlZ5TG14bGMzTWlMQ0l1TGk4dUxpOXpjbU12ZEdobGJXVXZjMmhoWkc5M0xteGxjM01pTENJdUxpOHVMaTl6Y21NdmRHaGxiV1V2YVdOdmJuTXViR1Z6Y3lJc0lpNHVMeTR1TDNOeVl5OTBhR1Z0WlM5MllYSnBZV0pzWlhNdWJHVnpjeUlzSWk0dUx5NHVMM055WXk5MGFHVnRaUzlrY21GM1pYSXViR1Z6Y3lJc0lpNHVMeTR1TDNOeVl5OTBhR1Z0WlM5aGJtTm9iM0p6TG14bGMzTWlMQ0l1TGk4dUxpOXpjbU12ZEdobGJXVXZZMmhoY0hSbGNuTXViR1Z6Y3lJc0lpNHVMeTR1TDNOeVl5OTBhR1Z0WlM5bGJHeHBjSE5wY3k1c1pYTnpJaXdpTGk0dkxpNHZjM0pqTDNSb1pXMWxMM1J2YjJ4aVlYSXViR1Z6Y3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFUczdPenM3UjBGTFJ6dEJRVU5JTEcxRVFVRnRSRHRCUVVOdVJDdzBRa0ZCTkVJN1FVRkROVUlzTWtKQlFUSkNPMEZEVUROQ08wVkJRMFVzVjBGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN3eVFrRkJRVHREUkZORU8wRkRUa1E3UlVGRFJTd3lRa0ZCUVR0RFJGRkVPMEZEVEVRN1JVRkRSU3h6UTBGQlFUdEZRVU5CTERKQ1FVRkJPME5FVDBRN1FVTktSRHRGUVVORkxITkRRVUZCTzBWQlEwRXNNa0pCUVVFN1EwUk5SRHRCUTBoRU8wVkJRMFVzYzBOQlFVRTdRMFJMUkR0QlEwWkVPMFZCUTBVc2MwTkJRVUU3UTBSSlJEdEJSVFZDUkR0RlFVTkZMR05CUVVFN1JVRkRRU3hwUWtGQlFUdERSamhDUkR0QlJUVkNRenM3TzBWQlIwVXNZMEZCUVR0RlFVTkJMR2xDUVVGQk8wTkdPRUpJTzBGRk0wSkRPMFZCUTBVc1dVRkJRVHREUmpaQ1NEdEJSVEZDUXp0RlFVTkZMR1ZCUVVFN1JVRkRRU3hyUWtGQlFUdERSalJDU0R0QlJYcENRenRGUVVORkxHbENRVUZCTzBWQlEwRXNXVUZCUVR0RFJqSkNTRHRCUlhoQ1F6dEZRVU5GTEdWQlFVRTdSVUZEUVN4WlFVRkJPME5HTUVKSU8wRkZka0pET3pzN1JVRkhSU3hWUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEdsQ1FVRkJPME5HZVVKSU8wRkZkRUpETzBWQlEwVXNiVUpCUVVFN1JVRkRRU3hYUVVGQk8wTkdkMEpJTzBGRmNrSkRPMFZCUTBVc2MwSkJRVUU3UTBaMVFrZzdRVVZ3UWtNN1JVRkRSU3h6UWtGQlFUdEZRVU5CTEdWQlFVRTdRMFp6UWtnN1FVVnVRa003UlVGRFJTeGpRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzYTBKQlFVRTdSVUZEUVN4cFFrRkJRVHRGUVVOQkxEQkNRVUZCTzBWQlEwRXNkVUpCUVVFN1JVRkRRU3h0UWtGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4bFFVRkJPME5HY1VKSU8wRkZiRUpETzBWQlEwVXNaVUZCUVR0RlFVTkJMR1ZCUVVFN1JVRkRRU3hwUWtGQlFUdERSbTlDU0R0QlJXcENRenRGUVVORkxESkNRVUZCTzBWQlEwRXNaMEpCUVVFN1JVRkRRU3d3UWtGQlFUdEZRVU5CTEZsQlFVRTdRMFp0UWtnN1FVYzVSa1E3UlVGRFJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hqUVVGQk8wVkJRMEVzYzBOQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxESkNRVUZCTzBWQlEwRXNPRUpCUVVFN1JVRkRRU3hwUWtGQlFUdERTR2RIUkR0QlJ6bEdRenRGUVVORkxGbEJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hQUVVGQk8wVkJRMEVzVlVGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4VFFVRkJPMFZCUTBFc05FSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFNHZEhTRHRCUnpkR1F6czdSVUZGUlN4blFrRkJRVHRGUVVOQkxHdENRVUZCTzBOSUswWklPMEZITlVaRE96czdSVUZIUlN4cFJVRkJRVHREU0RoR1NEdEJSek5HUXp0RlFVTkZMRlZCUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzTUVKQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc2JVSkJRVUU3UlVGRFFTd3JRa0ZCUVR0VlFVRkJMSFZDUVVGQk8wVkJRMEVzWlVGQlFUdERTRFpHU0R0QlJ6RkdRenRGUVVORkxHVkJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2EwSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFNEUkdTRHRCUjNwR1F6czdSVUZGUlN4blFrRkJRVHRGUVVOQkxHVkJRVUU3UlVGRFFTd3dRa0ZCUVR0TFFVRkJMSFZDUVVGQk8wMUJRVUVzYzBKQlFVRTdWVUZCUVN4clFrRkJRVHREU0RKR1NEdEJSM2hHUXp0RlFVTkZMR2RDUVVGQk8wVkJRMEVzYlVKQlFVRTdRMGd3UmtnN1FVZDRSa2M3UlVGRFJTeG5Ra0ZCUVR0RFNEQkdURHRCUjNSR1F6dEZRVU5GTEdGQlFVRTdRMGgzUmtnN1FVZHlSa003UlVGRFJTeGxRVUZCTzBWQlEwRXNZMEZCUVR0RlFVTkJMSFZDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMGgxUmtnN1FVZHdSa003UlVGRFJTeGxRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzWTBGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWQlEwRXNaVUZCUVR0RFNITkdTRHRCUjI1R1F6czdSVUZGUlN4VlFVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxITkNRVUZCTzBWQlEwRXNhVUpCUVVFN1EwaHhSa2c3UVVkc1JrTTdSVUZEUlN4alFVRkJPMFZCUTBFc01rSkJRVUU3UlVGRFFTdzRRa0ZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzWlVGQlFUdERTRzlHU0R0QlIycEdRenRGUVVORkxHRkJRVUU3UlVGRFFTeHJRa0ZCUVR0RlFVTkJMR2RDUVVGQk8wVkJRMEVzWjBKQlFVRTdRMGh0UmtnN1FVZHFSa2M3UlVGRFJTd3dRa0ZCUVR0RFNHMUdURHRCU1hwTlJEdEZRMVZGTEhkRFFVRkJPMVZCUVVFc1owTkJRVUU3UlVSU1FTeHBRa0ZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEhWQ1FVRkJPMFZCUTBFc0swSkJRVUU3VlVGQlFTeDFRa0ZCUVR0RFNqSk5SRHRCU1hwTlF6dEZRVU5GTEhGQ1FVRkJPMFZCUVVFc2NVSkJRVUU3UlVGQlFTeGpRVUZCTzBWQlEwRXNLMEpCUVVFN1JVRkJRU3c0UWtGQlFUdE5RVUZCTEhkQ1FVRkJPMVZCUVVFc2IwSkJRVUU3UlVGRFFTeHpRa0ZCUVR0TlFVRkJMR3RDUVVGQk8wVkJRMEVzVlVGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4blFrRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTeFhRVUZCTzBWQlEwRXNhVUpCUVVFN1Ewb3lUVWc3UVVsd1RrTTdSVUZaU1N3MlFrRkJRVHRGUVVGQkxEaENRVUZCTzAxQlFVRXNNa0pCUVVFN1ZVRkJRU3gxUWtGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBOS01rMU1PMEZKZWsxTE8wVkJRMFVzWVVGQlFUdEZRVU5CTEN0Q1FVRkJPMVZCUVVFc2RVSkJRVUU3UlVGRFFTeGxRVUZCTzBOS01rMVFPMEZKZUUxTE8wVkJRMFVzWjBOQlFVRTdRMG93VFZBN1FVbHdUVVE3UlVGRFJTeHBRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hQUVVGQk8wVkJRMEVzWlVGQlFUdEZRVU5CTERoQ1FVRkJPMFZCUTBFc2RVSkJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMR3REUVVGQk8xVkJRVUVzTUVKQlFVRTdSVUZEUVN4cFFrRkJRVHREU25OTlJEdEJTWEJOUXp0RlFVTkZMRzlDUVVGQk8wTktjMDFJTzBGSmJFMUVPMFZCUTBVc2NVSkJRVUU3UlVGQlFTeHhRa0ZCUVR0RlFVRkJMR05CUVVFN1JVRkRRU3dyUWtGQlFUdEZRVUZCTERoQ1FVRkJPMDFCUVVFc2QwSkJRVUU3VlVGQlFTeHZRa0ZCUVR0RlFVTkJMSE5DUVVGQk8wMUJRVUVzYTBKQlFVRTdSVUZEUVN4bFFVRkJPMFZCUTBFc1owSkJRVUU3UlVGRFFTeHJRa0ZCUVR0RFNtOU5SRHRCU1d4TlF6dEZRVU5GTEc5Q1FVRkJPMDFCUVVFc1dVRkJRVHRWUVVGQkxGRkJRVUU3UlVGRFFTeGxRVUZCTzBWQlEwRXNhVUpCUVVFN1EwcHZUVWc3UVVsMlRVTTdSVUZOU1N4clFrRkJRVHREU205TlREdEJTV3hOU3pzN08wVkJSMFVzYTBKQlFVRTdRMHB2VFZBN1FVbHFUVXM3TzBWQlJVVXNWVUZCUVR0RFNtMU5VRHRCU1RsTVF6dEZRVU5GTEhGQ1FVRkJPMDFCUVVFc1pVRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTdzBRa0ZCUVR0RlFVTkJMR3REUVVGQk8xVkJRVUVzTUVKQlFVRTdRMHBuVFVnN1FVazVURWM3UlVGRFJTdzJRa0ZCUVR0RlFVTkJMR3RDUVVGQk8wTktaMDFNTzBGSmVFMURPMFZCV1Vrc2RVSkJRVUU3UTBvclRFdzdRVWt4VEVRN08wVkJSVVVzWVVGQlFUdEZRVU5CTERoRFFVRkJPMFZCUTBFc01FSkJRVUU3UlVGRFFTeGxRVUZCTzBOS05FeEVPMEZKZWt4RU96dEZRVVZGTERoRFFVRkJPMFZCUTBFc1owSkJRVUU3UTBveVRFUTdRVWw0VEVRN1JVRkRSU3c0UWtGQlFUdEZRVU5CTEdWQlFVRTdSVUZEUVN4dFFrRkJRVHREU2pCTVJEdEJTWFpNUnpzN08wVkJSMFVzYzBKQlFVRTdSVUZEUVN4bFFVRkJPME5LZVV4TU8wRkpkRXhITzBWQlEwVXNNa0pCUVVFN1EwcDNURXc3UVVsdVRFUTdSVUZEUlN4blEwRkJRVHREU25GTVJEdEJTV3hNUkR0RlFVTkZMR05CUVVFN1EwcHZURVE3UVVGRFJDeHJSRUZCYTBRN1FVMDNWR3hFTzBWQlEwVXNiVUpCUVVFN1JVRkRRU3hYUVVGQk8wVkJRMEVzYzBKQlFVRTdSVUZEUVN4MVFrRkJRVHRGUVVOQkxGZEJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNhVUpCUVVFN1EwNHJWRVE3UVUwM1ZFTTdSVUZEUlN4dFFrRkJRVHRGUVVOQkxGZEJRVUU3UlVGRFFTeFRRVUZCTzBWQlEwRXNWVUZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4NVEwRkJRVHRWUVVGQkxHbERRVUZCTzBWQlEwRXNhVUpCUVVFN1EwNHJWRWc3UVU5c1ZrUTdSVUZEUlN4MVFrRkJRVHRGUVVOQkxEaENRVUZCTzBWQlEwRXNLMEpCUVVFN1ExQnZWa1E3UVZGdVZrUTdSVUZEUlN4dFFrRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeFBRVUZCTzBWQlEwRXNVVUZCUVR0RlFVTkJMRlZCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEN0Q1FVRkJPMVZCUVVFc2RVSkJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMR2xDUVVGQk8wTlNjVlpFTzBGUmJsWkRPMFZJVGtFc2QwTkJRVUU3VlVGQlFTeG5RMEZCUVR0RlIxRkZMSEZDUVVGQk8wVkJRVUVzY1VKQlFVRTdSVUZCUVN4alFVRkJPMFZCUTBFc05rSkJRVUU3UlVGQlFTdzRRa0ZCUVR0TlFVRkJMREpDUVVGQk8xVkJRVUVzZFVKQlFVRTdSVUZEUVN4elFrRkJRVHROUVVGQkxHdENRVUZCTzBWQlEwRXNiVUpCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEhWQ1FVRkJPMFZCUTBFc2EwTkJRVUU3VlVGQlFTd3dRa0ZCUVR0RlFVTkJMR2xDUVVGQk8wTlNjVlpJTzBGUmJGWkRPenM3UlVGSFJTeFpRVUZCTzBWQlEwRXNLMEpCUVVFN1ZVRkJRU3gxUWtGQlFUdERVbTlXU0R0QlVXcFdRenM3UlVGRlJTeHhRa0ZCUVR0TlFVRkJMR1ZCUVVFN1ExSnRWa2c3UVZGb1ZrTTdPenRGUVVkRkxHZENRVUZCTzBOU2ExWklPMEZSTDFWRE96dEZRVVZGTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxHVkJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3hwUWtGQlFUdERVbWxXU0R0QlVUbFZRenRGUVVORkxHZENRVUZCTzBWQlEwRXNhVUpCUVVFN1JVRkRRU3hsUVVGQk8wVkJRMEVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHRGUVVOQkxHbERRVUZCTzBOU1oxWklPMEZSTjFWRE8wVkJRMFVzYlVKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1UwRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2JVSkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMRzlEUVVGQk8xVkJRVUVzTkVKQlFVRTdSVUZEUVN4cFFrRkJRVHREVWl0VlNEdEJVVFZXUXp0RlFXZENTU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4UFFVRkJPMFZCUTBFc1VVRkJRVHREVWl0VlREdEJVVFZWUnp0RlFVTkZMRmxCUVVFN1ExSTRWVXc3UVZFeFZVTTdSVUZEUlN4dlFrRkJRVHROUVVGQkxGbEJRVUU3VlVGQlFTeFJRVUZCTzBWQlEwRXNaVUZCUVR0RFVqUlZTRHRCVVhwVlF6dEZRVU5GTEdWQlFVRTdSVUZEUVN4clFrRkJRVHRGUVVOQkxHbENRVUZCTzBOU01sVklPMEZSZUZWRE8wVkJRMFVzV1VGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxFOUJRVUU3UlVGRFFTeFJRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3gxUWtGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4cFFrRkJRVHREVWpCVlNEdEJVWEJWU3pzN1JVRkRSU3hoUVVGQk8wTlNkVlZRTzBGUmNGVkxPenRGUVVORkxHRkJRVUU3UTFKMVZWQTdRVkZ3VlVzN08wVkJRMFVzWVVGQlFUdERVblZWVUR0QlVYQlZTenM3UlVGRFJTeGhRVUZCTzBOU2RWVlFPMEZSY0ZWTE96dEZRVU5GTEdGQlFVRTdRMUoxVlZBN1FWRndWVXM3TzBWQlEwVXNZVUZCUVR0RFVuVlZVRHRCVVd4VlF6dEZRVU5GTEN0Q1FVRkJPME5TYjFWSU8wRlJhRlZQTzBWQlEwVXNZMEZCUVR0RFVtdFZWRHRCVVRkVVR6dEZRVU5GTEdOQlFVRTdRMUlyVkZRN1FWRXhWRTg3UlVGRFJTeGpRVUZCTzBOU05GUlVPMEZSZGxSUE8wVkJRMFVzWTBGQlFUdERVbmxVVkR0QlVYQlVUenRGUVVORkxHTkJRVUU3UTFKelZGUTdRVkZxVkU4N1JVRkRSU3hqUVVGQk8wTlNiVlJVTzBGUk4xTkRPMFZCUTBVc1owTkJRVUU3UTFJclUwZzdRVkV6VTA4N1JVRkRSU3hoUVVGQk8wTlNObE5VTzBGUmVGTlBPMFZCUTBVc1lVRkJRVHREVWpCVFZEdEJVWEpUVHp0RlFVTkZMR0ZCUVVFN1ExSjFVMVE3UVZGc1UwODdSVUZEUlN4aFFVRkJPME5TYjFOVU8wRlJMMUpQTzBWQlEwVXNZVUZCUVR0RFVtbFRWRHRCVVRWU1R6dEZRVU5GTEdGQlFVRTdRMUk0VWxRN1FWRjRVa003TzBWQlJVVXNVVUZCUVR0RlFVTkJMRmxCUVVFN1ExSXdVa2c3UVZGMlVrczdPMFZCUTBVc1kwRkJRVHREVWpCU1VEdEJVWFpTU3pzN1JVRkRSU3hqUVVGQk8wTlNNRkpRTzBGUmRsSkxPenRGUVVORkxHTkJRVUU3UTFJd1VsQTdRVkYyVWtzN08wVkJRMFVzWTBGQlFUdERVakJTVUR0QlVYWlNTenM3UlVGRFJTeGpRVUZCTzBOU01GSlFPMEZSZGxKTE96dEZRVU5GTEdOQlFVRTdRMUl3VWxBN1FWRnlVa003UlVGRFJTeHBRMEZCUVR0RFVuVlNTRHRCVVc1U1R6dEZRVU5GTEZsQlFVRTdRMUp4VWxRN1FWRm9Vazg3UlVGRFJTeFpRVUZCTzBOU2ExSlVPMEZSTjFGUE8wVkJRMFVzV1VGQlFUdERVaXRSVkR0QlVURlJUenRGUVVORkxGbEJRVUU3UTFJMFVWUTdRVkYyVVU4N1JVRkRSU3haUVVGQk8wTlNlVkZVTzBGUmNGRlBPMFZCUTBVc1dVRkJRVHREVW5OUlZEdEJVV2hSUXp0RlFVTkZMR0ZCUVVFN1JVRkRRU3c0UWtGQlFUdERVbXRSU0R0QlVUbFFUenRGUVVORkxHVkJRVUU3UTFKblVWUTdRVkV6VUU4N1JVRkRSU3hsUVVGQk8wTlNObEJVTzBGUmVGQlBPMFZCUTBVc1pVRkJRVHREVWpCUVZEdEJVWEpRVHp0RlFVTkZMR1ZCUVVFN1ExSjFVRlE3UVZGc1VFODdSVUZEUlN4bFFVRkJPME5TYjFCVU8wRlJMMDlQTzBWQlEwVXNaVUZCUVR0RFVtbFFWRHRCVVROUFF6dEZRVU5GTEc5Q1FVRkJPMFZCUTBFc0swSkJRVUU3UTFJMlQwZzdRVkV6VDBjN1JVRkRSU3huUWtGQlFUdERValpQVER0QlVUTlBTenRGUVVORkxGTkJRVUU3UTFJMlQxQTdRVkV4VDBzN1JVRkRSU3hSUVVGQk8wTlNORTlRTzBGUmVrOUxPMFZCUTBVc1QwRkJRVHREVWpKUFVEdEJVWGhQU3p0RlFVTkZMRlZCUVVFN1ExSXdUMUE3UVZGdVQwczdPMFZCUlVVc2VVSkJRVUU3UlVGRFFTeFRRVUZCTzBWQlEwRXNiME5CUVVFN1ZVRkJRU3cwUWtGQlFUdERVbkZQVUR0QlVXeFBTenM3UlVGRlJTeDNRa0ZCUVR0RlFVTkJMRlZCUVVFN1JVRkRRU3h2UTBGQlFUdFZRVUZCTERSQ1FVRkJPME5TYjA5UU8wRlJMMDVUTzBWQlEwVXNWMEZCUVR0RFVtbFBXRHRCVVRsT1V6dEZRVU5GTEZWQlFVRTdRMUpuVDFnN1FWRTNUbE03UlVGRFJTeFRRVUZCTzBOU0swNVlPMEZSTlU1VE8wVkJRMFVzV1VGQlFUdERVamhPV0R0QlVYSk9TenM3UlVGRlJTeGhRVUZCTzBWQlEwRXNOa0pCUVVFN1ExSjFUbEE3UVZGc1RrTTdSVUZEUlN4WFFVRkJPME5TYjA1SU8wRlRkRzVDUkR0RlFVTkZMRzFDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEdsQ1FVRkJPME5VZDI1Q1JEdEJVM1J1UWtNN1JVRkRSU3hqUVVGQk8wTlVkMjVDU0R0QlUzUnVRa2M3T3p0RlFVZEZMRmxCUVVFN1JVRkRRU3h6UWtGQlFUdERWSGR1UWt3N1FWTnlia0pITzBWQlEwVXNaVUZCUVR0RFZIVnVRa3c3UVZOdWJrSkRPMFZCUlVrc2MwSkJRVUU3UTFSdmJrSk1PMEZUTDIxQ1J6dEZRVU5GTEd0Q1FVRkJPME5VYVc1Q1REdEJVMjV1UWtNN1JVRk5TU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VFFVRkJPMFZCUTBFc2IwTkJRVUU3VlVGQlFTdzBRa0ZCUVR0RlFVTkJMRmRCUVVFN1ExUm5ia0pNTzBGQlEwUTdPenM3TzBkQlMwYzdRVUZEU0N3d1FrRkJNRUk3UVZWNmNFSXhRanRGUVVORkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMRlZCUVVFN1JVRkRRU3h4UTBGQlFUdEZRVU5CTEd0RFFVRkJPMVZCUVVFc01FSkJRVUU3UlVGRFFTeGxRVUZCTzBOV01uQkNSRHRCVlhwd1FrTTdSVUZEUlN4bFFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxHdENRVUZCTzBWQlEwRXNaMEpCUVVFN1JVRkRRU3hwUTBGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFZqSndRa2c3UVZWNGNFSkRPMFZCUTBVc2JVSkJRVUU3UlVGRFFTeFhRVUZCTzBWQlEwRXNWVUZCUVR0RlFVTkJMR2xDUVVGQk8wTldNSEJDU0R0QlZYWndRa003T3p0RlFVZEZMRzFDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEZWQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc2MwSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFZubHdRa2c3UVZWMGNFSkRPMFZCUTBVc2FVSkJRVUU3UTFaM2NFSklPMEZWY25CQ1F6dEZRVU5GTEd0Q1FVRkJPME5XZFhCQ1NEdEJWWEJ3UWtNN1JVRkRSU3hWUVVGQk8wVkJRMEVzYTBKQlFVRTdSVUZEUVN4blFrRkJRVHRGUVVOQkxHbENRVUZCTzBOV2MzQkNTRHRCVlc1d1FrTTdSVUZEUlN4dFFrRkJRVHRGUVVOQkxGZEJRVUU3UlVGRFFTeFBRVUZCTzBWQlEwRXNVVUZCUVR0RlFVTkJMRmxCUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzTUVKQlFVRTdSVUZEUVN3clFrRkJRVHRGUVVOQkxHdERRVUZCTzFWQlFVRXNNRUpCUVVFN1JVRkRRU3dyUWtGQlFUdFZRVUZCTEhWQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UTFaeGNFSklPMEZWYkhCQ1F6dEZRemRFUVN4dlFrRkJRVHRGUVVOQkxIZENRVUZCTzBWQlEwRXNhVUpCUVVFN1JVUTJSRVVzWlVGQlFUdEZRVU5CTEdsQ1FVRkJPME5XYzNCQ1NEdEJWWEJ3UWtjN096dEZRVWRGTEhOQ1FVRkJPMFZCUTBFc1dVRkJRVHREVm5Od1FrdzdRVlZ1Y0VKSE8wVkJRMFVzWlVGQlFUdERWbkZ3UWt3N1FWVnFjRUpETzBWQlEwVXNjVUpCUVVFN1ExWnRjRUpJTzBGVk9XOUNTenM3TzBWQlIwVXNaVUZCUVR0RlFVTkJMR2xDUVVGQk8wTldaM0JDVUR0QlZUTnZRa003TzBWQlJVVXNjVUpCUVVFN1JVRkJRU3h4UWtGQlFUdEZRVUZCTEdOQlFVRTdSVUZEUVN4elFrRkJRVHROUVVGQkxHdENRVUZCTzBWQlEwRXNOa0pCUVVFN1JVRkJRU3c0UWtGQlFUdE5RVUZCTERKQ1FVRkJPMVZCUVVFc2RVSkJRVUU3UlVGRFFTd3JRa0ZCUVR0RlFVTkJMRTlCUVVFN1JVRkRRU3hwUWtGQlFUdERWalp2UWtnN1FWVXhiMEpMT3pzN08wVkJSVVVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHREVmpodlFsQTdRVlV6YjBKTE96dEZRVU5GTEhGQ1FVRkJPMDFCUVVFc1pVRkJRVHREVmpodlFsQTdRVlV6YjBKTE96dEZRVU5GTEc5Q1FVRkJPMDFCUVVFc1dVRkJRVHRWUVVGQkxGRkJRVUU3UlVGRFFTeGxRVUZCTzBOV09HOUNVRHRCVlhwdlFrTTdSVUZEUlN4cFFrRkJRVHRGUVVOQkxIbERRVUZCTzBOV01tOUNTRHRCVlhodlFrTTdSVUZEUlN4blFrRkJRVHRGUVVOQkxHbENRVUZCTzBOV01HOUNTRHRCVlhadlFrTTdSVUZEUlN4alFVRkJPME5XZVc5Q1NEdEJWWFJ2UWtNN1JVRkRSU3hUUVVGQk8wTldkMjlDU0R0QlFVTkVMR3RFUVVGclJEdEJXWEI0UW14RU8wVkJRMFVzWjBKQlFVRTdSVUZEUVN4bFFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxHdERRVUZCTzFWQlFVRXNNRUpCUVVFN1JVRkRRU3hwUWtGQlFUdERXbk40UWtRN1FWbHdlRUpETzBWUVJFRXNkME5CUVVFN1ZVRkJRU3huUTBGQlFUdEZUMGRGTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMREJDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWQlEwRXNkVUpCUVVFN1JVRkRRU3huUWtGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHbENRVUZCTzBOYWMzaENTRHRCV1hCNFFrYzdSVUZEUlN4bFFVRkJPMFZCUTBFc2MwSkJRVUU3UTFwemVFSk1PMEZaYm5oQ1J6dEZRVU5GTEdOQlFVRTdRMXB4ZUVKTU8wRlphSGhDUnpzN08wVkJSMFVzV1VGQlFUdEZRVU5CTEhOQ1FVRkJPME5hYTNoQ1REdEJXUzkzUWtjN1JVRkRSU3hsUVVGQk8wTmFhWGhDVER0QldUZDNRa003UlVGRFJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hUUVVGQk8wVkJRMEVzVlVGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc2VVTkJRVUU3VlVGQlFTeHBRMEZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMW9yZDBKSU8wRlpNWGRDU3p0RlFVTkZMRmxCUVVFN1JVRkRRU3d3UWtGQlFUdEZRVU5CTEhOQ1FVRkJPME5hTkhkQ1VEdEJXVEYzUWs4N1JVRkRSU3haUVVGQk8wTmFOSGRDVkR0QldYUjNRa3M3T3p0RlFVZEZMRmxCUVVFN1ExcDNkMEpRTzBGWmJIZENSenRGUVVORkxHOUNRVUZCTzBOYWIzZENURHRCV1RkMlFrczdPenM3T3pzN08wVkJTVVVzYjBKQlFVRTdSVUZEUVN4WlFVRkJPME5hYlhkQ1VEdEJXV3AzUWs4N096czdPenM3TzBWQlEwVXNXVUZCUVR0RFdqQjNRbFE3UVZsMGQwSkxPenRGUVVORkxEQkNRVUZCTzBOYWVYZENVRHRCV1hCM1FrTTdPMFZCUlVVc1ZVRkJRVHRGUVVOQkxHOURRVUZCTzFWQlFVRXNORUpCUVVFN1ExcHpkMEpJTzBGWmVuZENRenM3UlVGTlNTeHpRa0ZCUVR0RFduVjNRa3c3UVZsdWQwSkRPMFZCUTBVc1ZVRkJRVHREV25GM1FrZzdRVmx1ZDBKSE8wVkJRMFVzVjBGQlFUdERXbkYzUWt3N1FWbHFkMEpETzBWQlEwVXNZVUZCUVR0RFdtMTNRa2c3UVZscWQwSkhPMFZCUTBVc1kwRkJRVHREV20xM1FrdzdRVmt2ZGtKRE96dEZRVVZGTEc5RFFVRkJPMVZCUVVFc05FSkJRVUU3UlVGRFFTeFpRVUZCTzBOYWFYZENTRHRCV1RsMlFrTTdSVUZEUlN4VFFVRkJPMFZCUTBFc1dVRkJRVHREV21kM1FrZzdRVms1ZGtKSE8wVkJRMFVzWVVGQlFUdERXbWQzUWt3N1FWazFka0pETzBWQlEwVXNVMEZCUVR0RlFVTkJMRmRCUVVFN1ExbzRka0pJTzBGWk5YWkNSenRGUVVORkxGbEJRVUU3UTFvNGRrSk1PMEZaY25aQ1N6czdPenRGUVVORkxHTkJRVUU3UTFvd2RrSlFJaXdpWm1sc1pTSTZJbVY0WVcxd2JHVXVZM056SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCemFHRmtiM2N1YkdWemN5QXRJT21ZdE9XOXNlYWd0K1c4aitpdXZ1ZTlyaUJ0YVhocGJuZ2c1WWU5NXBXd1hHNGdLaUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzRnS2lCRGNtVmhkR1ZrSUVKNU9pQlpZVzlvWVdsNGFXRnZYRzRnS2lCVmNHUmhkR1U2SURJd01qSXVNeTR5TUZ4dUlDb3ZYRzR2S2lBOVBUMDlQVDA5UFQwOUlHTnZiRzl5Y3k1MGFHVnRaU0F0SU9XZnV1ZWhnT21pbk9pSnN1V1BtT21IaittYmh1V1FpQ0E5UFQwOVBUMDlQVDA5SUNvdlhHNHZLaUE5UFQwOVBUMGc2WmkwNWIyeDVxQzM1YnlQNks2KzU3MnU1WWU5NXBXd0lEMDlQVDA5UFNBcUwxeHVMeW9nUFQwOVBUMGdVMk55YjJ4c1ltRnlJRDA5UFQwOUlDb3ZYRzQ2T2kxM1pXSnJhWFF0YzJOeWIyeHNZbUZ5SUh0Y2JpQWdkMmxrZEdnNklEZHdlRHRjYmlBZ2FHVnBaMmgwT2lBM2NIZzdYRzRnSUMxM1pXSnJhWFF0WW05eVpHVnlMWEpoWkdsMWN6b2dOWEI0TzF4dWZWeHVPam90ZDJWaWEybDBMWE5qY205c2JHSmhjaTEwY21GamF5MXdhV1ZqWlNCN1hHNGdJQzEzWldKcmFYUXRZbTl5WkdWeUxYSmhaR2wxY3pvZ05YQjRPMXh1ZlZ4dU9qb3RkMlZpYTJsMExYTmpjbTlzYkdKaGNpMTBhSFZ0WWpwMlpYSjBhV05oYkNCN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJSEpuWW1Fb01Dd2dNQ3dnTUN3Z01DNHlOU2s3WEc0Z0lDMTNaV0pyYVhRdFltOXlaR1Z5TFhKaFpHbDFjem9nTlhCNE8xeHVmVnh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2kxMGFIVnRZanBvYjNKcGVtOXVkR0ZzSUh0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2djbWRpWVNnd0xDQXdMQ0F3TENBd0xqSTFLVHRjYmlBZ0xYZGxZbXRwZEMxaWIzSmtaWEl0Y21Ga2FYVnpPaUExY0hnN1hHNTlYRzQ2T2kxM1pXSnJhWFF0YzJOeWIyeHNZbUZ5T21odmRtVnlJSHRjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ2NtZGlZU2d3TENBd0xDQXdMQ0F3TGpFMUtUdGNibjFjYmpvNkxYZGxZbXRwZEMxelkzSnZiR3hpWVhJdGRHaDFiV0k2YUc5MlpYSWdlMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCeVoySmhLREFzSURBc0lEQXNJREF1TXpVcE8xeHVmVnh1TG5ObFkzUnBiMjRnZTF4dUlDQnRZWEpuYVc0NklERmxiU0F3TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG5ObFkzUnBiMjVmWDJobFlXUmxjaXhjYmk1elpXTjBhVzl1WDE5amIyNTBaVzUwTEZ4dUxuTmxZM1JwYjI1ZlgyWnZiM1JsY2lCN1hHNGdJRzFoY21kcGJqb2dNQ0F6WlcwN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWMyVmpkR2x2Ymw5ZmRHbDBiR1VnZTF4dUlDQmpiMnh2Y2pvZ0l6WTJOanRjYm4xY2JpNXpaV04wYVc5dVgxOW9NeUI3WEc0Z0lHTnZiRzl5T2lBak1XWTRaR1EyTzF4dUlDQm1iMjUwTFhOcGVtVTZJREV1TXpWbGJUdGNibjFjYmk1elpXTjBhVzl1WDE5b05DQjdYRzRnSUdadmJuUXRjMmw2WlRvZ01TNHhaVzA3WEc0Z0lHTnZiRzl5T2lBak5qWTJPMXh1ZlZ4dUxuTmxZM1JwYjI1ZlgyZzFJSHRjYmlBZ1ptOXVkQzF6YVhwbE9pQXhaVzA3WEc0Z0lHTnZiRzl5T2lBak9UazVPMXh1ZlZ4dUxuTmxZM1JwYjI1ZlgyUnNMRnh1TG5ObFkzUnBiMjVmWDJSMExGeHVMbk5sWTNScGIyNWZYMlJrSUh0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1SUNCd1lXUmthVzVuT2lBd08xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxuTmxZM1JwYjI1ZlgyUnNJSHRjYmlBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHVJQ0I2TFdsdVpHVjRPaUF4TzF4dWZWeHVMbk5sWTNScGIyNWZYMlIwSUh0Y2JpQWdaR2x6Y0d4aGVUb2dhVzVzYVc1bExXSnNiMk5yTzF4dWZWeHVMbk5sWTNScGIyNWZYMlJrSUh0Y2JpQWdaR2x6Y0d4aGVUb2dhVzVzYVc1bExXSnNiMk5yTzF4dUlDQmpiMnh2Y2pvZ0l6QTFPRGswTWp0Y2JuMWNiaTV6WldOMGFXOXVYMTl3Y21VZ2UxeHVJQ0J0WVhKbmFXNDZJREpsYlNBd08xeHVJQ0J3WVdSa2FXNW5PaUF4WlcwN1hHNGdJR1p2Ym5RdGMybDZaVG9nTVRSd2VEdGNiaUFnYkdsdVpTMW9aV2xuYUhRNklERTFNQ1U3WEc0Z0lIUmxlSFF0WVd4cFoyNDZJR3hsWm5RN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWVdaaFptRTdYRzRnSUdKdmNtUmxjam9nTVhCNElITnZiR2xrSUNOa1pHUTdYRzRnSUdKdmNtUmxjaTF5WVdScGRYTTZJRFJ3ZUR0Y2JpQWdZMjlzYjNJNklDTTJOalk3WEc0Z0lHOTJaWEptYkc5M09pQmhkWFJ2TzF4dWZWeHVMbk5sWTNScGIyNWZYMk52WkdVZ2UxeHVJQ0JrYVhOd2JHRjVPaUJpYkc5amF6dGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHVjMlZqZEdsdmJsOWZabTl2ZEdWeUlIdGNiaUFnWW05eVpHVnlMWFJ2Y0RvZ01YQjRJSE52Ykdsa0lDTmtaR1E3WEc0Z0lHMWhjbWRwYmkxMGIzQTZJRE5sYlR0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlpoWm1GbVlUdGNiaUFnWTI5c2IzSTZJQ001T1RrN1hHNTlYRzR1WTJGelpTQjdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ1pHbHpjR3hoZVRvZ1ozSnBaRHRjYmlBZ1ozSnBaQzEwWlcxd2JHRjBaUzFqYjJ4MWJXNXpPaUJ5WlhCbFlYUW9NaXdnTVdaeUtUdGNiaUFnWjJGd09pQTBNSEI0TzF4dUlDQndZV1JrYVc1bk9pQXhaVzA3WEc0Z0lHSnZjbVJsY2kxMGIzQTZJREZ3ZUNCemIyeHBaQ0FqWkdSa08xeHVJQ0JpYjNKa1pYSXRZbTkwZEc5dE9pQXhjSGdnYzI5c2FXUWdJMlJrWkR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1allYTmxPbUZtZEdWeUlIdGNiaUFnWTI5dWRHVnVkRG9nSnljN1hHNGdJSEJ2YzJsMGFXOXVPaUJoWW5OdmJIVjBaVHRjYmlBZ2VpMXBibVJsZURvZ01qdGNiaUFnZEc5d09pQXdPMXh1SUNCc1pXWjBPaUExTUNVN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdkMmxrZEdnNklEQTdYRzRnSUdKdmNtUmxjaTFzWldaME9pQXhjSGdnYzI5c2FXUWdJMlJrWkR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1allYTmxYMTl3Y21Vc1hHNHVZMkZ6WlY5ZmRHVjRkR0Z5WldFZ2UxeHVJQ0JtYjI1MExYTnBlbVU2SURFemNIZzdYRzRnSUd4cGJtVXRhR1ZwWjJoME9pQXhOVEFsTzF4dWZWeHVMbU5oYzJWZlgzQnlaU3hjYmk1allYTmxYMTlqYjJSbExGeHVMbU5oYzJWZlgzUmxlSFJoY21WaElIdGNiaUFnWm05dWRDMW1ZVzFwYkhrNklGd2lRMjkxY21sbGNpQk9aWGRjSWl3Z1EyOXVjMjlzWVhNc0lFZGxiM0puYVdFc0lFRnlhV0ZzTENCellXNXpMWE5sY21sbU8xeHVmVnh1TG1OaGMyVmZYM0J5WlNCN1hHNGdJRzFoY21kcGJqb2dNRHRjYmlBZ2NHRmtaR2x1WnpvZ01XVnRPMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalptRm1ZV1poTzF4dUlDQm9aV2xuYUhRNklERXdNQ1U3WEc0Z0lHSnZjbVJsY2kxeVlXUnBkWE02SURSd2VEdGNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNiaUFnYjNabGNtWnNiM2M2SUdGMWRHODdYRzU5WEc0dVkyRnpaVjlmZEc5dmJHSmhjaUI3WEc0Z0lHMWhjbWRwYmpvZ01DQmhkWFJ2TzF4dUlDQm9aV2xuYUhRNklETTJjSGc3WEc0Z0lHeHBibVV0YUdWcFoyaDBPaUF6Tm5CNE8xeHVJQ0JtYjI1MExYTnBlbVU2SURFMGNIZzdYRzRnSUhCaFpHUnBibWM2SURBZ01UWndlRHRjYmlBZ2RHVjRkQzFoYkdsbmJqb2djbWxuYUhRN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dVkyRnpaVjlmWVdOMGFXOXVMRnh1TG1OaGMyVmZYM0psYlc5MlpTQjdYRzRnSUdOMWNuTnZjam9nY0c5cGJuUmxjanRjYmlBZ1kyOXNiM0k2SUNNd05UZzVOREk3WEc0Z0lIVnpaWEl0YzJWc1pXTjBPaUJ1YjI1bE8xeHVmVnh1TG1OaGMyVmZYMkZqZEdsdmJpQjdYRzRnSUdadmJuUXRjMmw2WlRvZ01UTndlRHRjYmlBZ2NHRmtaR2x1Wnkxc1pXWjBPaUF4TUhCNE8xeHVmVnh1TG1OaGMyVmZYMkZqZEdsdmJqcG1hWEp6ZEMxamFHbHNaQ0I3WEc0Z0lIQmhaR1JwYm1jdGJHVm1kRG9nTUR0Y2JuMWNiaTVqWVhObFgxOXlaVzF2ZG1VZ2UxeHVJQ0JtYkc5aGREb2djbWxuYUhRN1hHNTlYRzR1WTJGelpWOWZZMjl1YzI5c1pTQjdYRzRnSUcxaGNtZHBiam9nTUNCaGRYUnZPMXh1SUNCb1pXbG5hSFE2SURFNE1IQjRPMXh1SUNCaWIzSmtaWEk2SURGd2VDQnpiMnhwWkNBalpHUmtPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbU5oYzJWZlgzUmxlSFJoY21WaElIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUhkcFpIUm9PaUF4TURBbE8xeHVJQ0JvWldsbmFIUTZJREV3TUNVN1hHNGdJR0p2Y21SbGNqb2dibTl1WlR0Y2JpQWdiM1YwYkdsdVpUb2dibTl1WlR0Y2JpQWdjR0ZrWkdsdVp6b2dNV1Z0TzF4dUlDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4dUlDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2JuMWNiaTVqWVhObFgxOXNhWE4wTEZ4dUxtTmhjMlZmWDJsMFpXMGdlMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJSEJoWkdScGJtYzZJREE3WEc0Z0lHeHBjM1F0YzNSNWJHVXRkSGx3WlRvZ2JtOXVaVHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTVqWVhObFgxOXNhWE4wSUh0Y2JpQWdhR1ZwWjJoME9pQXpOakJ3ZUR0Y2JpQWdZbTl5WkdWeUxYUnZjRG9nTVhCNElITnZiR2xrSUNOa1pHUTdYRzRnSUdKdmNtUmxjaTFpYjNSMGIyMDZJREZ3ZUNCemIyeHBaQ0FqWkdSa08xeHVJQ0JtYjI1MExYTnBlbVU2SURFemNIZzdYRzRnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh1ZlZ4dUxtTmhjMlZmWDJsMFpXMGdlMXh1SUNCb1pXbG5hSFE2SURNMmNIZzdYRzRnSUd4cGJtVXRhR1ZwWjJoME9pQXpObkI0TzF4dUlDQmpkWEp6YjNJNklIQnZhVzUwWlhJN1hHNGdJSEJoWkdScGJtYzZJREFnTVRad2VEdGNibjFjYmk1allYTmxYMTlwZEdWdE9taHZkbVZ5SUh0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlkzWmpobU9UdGNibjFjYmk1d1lYQmxjaUI3WEc0Z0lHSnZlQzF6YUdGa2IzYzZJREFnTUNBMmNIZ2dNWEI0SUNOa1kyUm1aVFk3WEc0Z0lHMWhjbWRwYmpvZ01tVnRJR0YxZEc4N1hHNGdJRzFoZUMxM2FXUjBhRG9nTVRJd01IQjRPMXh1SUNCd1lXUmthVzVuT2lBeVpXMDdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdYRzRnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzU5WEc0dWNHRndaWEl1Wm14bGVDQjdYRzRnSUdScGMzQnNZWGs2SUdac1pYZzdYRzRnSUdac1pYZ3RaR2x5WldOMGFXOXVPaUJ5YjNjN1hHNGdJR1pzWlhndGQzSmhjRG9nYm05M2NtRndPMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJSGRwWkhSb09pQXhNREFsTzF4dUlDQnRZWGd0ZDJsa2RHZzZJREV3TUNVN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdjR0ZrWkdsdVp6b2dNRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV3WVhCbGNpNW1iR1Y0SUM1aGNuUnBZMnhsSUh0Y2JpQWdabXhsZUMxa2FYSmxZM1JwYjI0NklHTnZiSFZ0Ymp0Y2JpQWdkMmxrZEdnNklERXdNQ1U3WEc0Z0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEc1OVhHNHVjR0Z3WlhJdVpteGxlQ0F1WVhKMGFXTnNaVjlmYldGcGJpQjdYRzRnSUdobGFXZG9kRG9nTVRBd0pUdGNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNiaUFnYjNabGNtWnNiM2M2SUdGMWRHODdYRzU5WEc0dWNHRndaWEl1Wm14bGVDQXVZWEowYVdOc1pWOWZZWE5wWkdVZ2UxeHVJQ0JpYjNKa1pYSXRjbWxuYUhRNklERndlQ0J6YjJ4cFpDQWpaR05rWm1VMk8xeHVmVnh1TG1obFlXUmxjaUI3WEc0Z0lIQnZjMmwwYVc5dU9pQnpkR2xqYTNrN1hHNGdJSG90YVc1a1pYZzZJRE03WEc0Z0lIUnZjRG9nTUR0Y2JpQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hHNGdJR0p2Y21SbGNpMWliM1IwYjIwNklERndlQ0J6YjJ4cFpDQWpaR1JrTzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpabVptTzF4dUlDQjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdYRzRnSUhSeVlXNXphWFJwYjI0dFpIVnlZWFJwYjI0NklEQXVNM003WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YUdWaFpHVnlYM04wYVdOcmVTQjdYRzRnSUhCaFpHUnBibWN0YkdWbWREb2dNall3Y0hnN1hHNTlYRzR1WVhKMGFXTnNaU0I3WEc0Z0lHUnBjM0JzWVhrNklHWnNaWGc3WEc0Z0lHWnNaWGd0WkdseVpXTjBhVzl1T2lCeWIzYzdYRzRnSUdac1pYZ3RkM0poY0RvZ2JtOTNjbUZ3TzF4dUlDQndZV1JrYVc1bk9pQXlaVzBnTUR0Y2JpQWdabTl1ZEMxemFYcGxPaUF4Tm5CNE8xeHVJQ0JzYVc1bExXaGxhV2RvZERvZ01UVXdKVHRjYm4xY2JpNWhjblJwWTJ4bFgxOXRZV2x1SUh0Y2JpQWdabXhsZURvZ01UdGNiaUFnY0dGa1pHbHVaem9nTUNBeVpXMDdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHVZWEowYVdOc1pWOWZiV0ZwYmlBdWMyVmpkR2x2YmlCN1hHNGdJRzkyWlhKbWJHOTNPaUIyYVhOcFlteGxPMXh1ZlZ4dUxtRnlkR2xqYkdWZlgyMWhhVzRnTG5ObFkzUnBiMjVmWDJOdmJuUmxiblFzWEc0dVlYSjBhV05zWlY5ZmJXRnBiaUF1YzJWamRHbHZibDlmWm05dmRHVnlMRnh1TG1GeWRHbGpiR1ZmWDIxaGFXNGdMbk5sWTNScGIyNWZYMmhsWVdSbGNpQjdYRzRnSUc5MlpYSm1iRzkzT2lCMmFYTnBZbXhsTzF4dWZWeHVMbUZ5ZEdsamJHVmZYMjFoYVc0Z0xuTmxZM1JwYjI1ZlgyaGxZV1JsY2l4Y2JpNWhjblJwWTJ4bFgxOXRZV2x1SUM1elpXTjBhVzl1WDE5amIyNTBaVzUwSUh0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1ZlZ4dUxtRnlkR2xqYkdWZlgyRnphV1JsSUh0Y2JpQWdabXhsZUMxemFISnBibXM2SURBN1hHNGdJSGRwWkhSb09pQXlOREJ3ZUR0Y2JpQWdZbTl5WkdWeUxXeGxablE2SURGd2VDQnpiMnhwWkNBalpHUmtPMXh1SUNCMGNtRnVjMmwwYVc5dUxXUjFjbUYwYVc5dU9pQXdMak56TzF4dWZWeHVMbUZ5ZEdsamJHVmZYMkZ6YVdSbExteDBjaUI3WEc0Z0lHSnZjbVJsY2kxeWFXZG9kRG9nTVhCNElITnZiR2xrSUNOa1pHUTdYRzRnSUdKdmNtUmxjaTFzWldaME9pQnViMjVsTzF4dWZWeHVMbUZ5ZEdsamJHVmZYMkZ6YVdSbElDNXZkWFJzYVc1bExXTm9ZWEIwWlhKeklIdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJabVpqdGNibjFjYm5CeVpTeGNiaTV6WldOMGFXOXVYMTl3Y21VZ2UxeHVJQ0J3WVdSa2FXNW5PaUF5WlcwN1hHNGdJR1p2Ym5RdFptRnRhV3g1T2lCY0lrTnZkWEpwWlhJZ1RtVjNYQ0lzSUVGeWFXRnNMQ0J6WVc1ekxYTmxjbWxtTzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpabUZtWVdaaE8xeHVJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNibjFjYm1OdlpHVXNYRzR1YzJWamRHbHZibDlmWTI5a1pTQjdYRzRnSUdadmJuUXRabUZ0YVd4NU9pQmNJa052ZFhKcFpYSWdUbVYzWENJc0lFRnlhV0ZzTENCellXNXpMWE5sY21sbU8xeHVJQ0JtYjI1MExYTnBlbVU2SURFMmNIZzdYRzU5WEc0dVptOXZkR1Z5SUh0Y2JpQWdZbTl5WkdWeUxYUnZjRG9nTVhCNElITnZiR2xrSUNOa1kyUm1aVFk3WEc0Z0lIQmhaR1JwYm1jNklETmxiU0F3TzF4dUlDQjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdYRzU5WEc0dVptOXZkR1Z5SUdFNmJHbHVheXhjYmk1bWIyOTBaWElnWVRwMmFYTnBkR1ZrTEZ4dUxtWnZiM1JsY2lCaE9taHZkbVZ5SUh0Y2JpQWdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQnViMjVsTzF4dUlDQmpiMnh2Y2pvZ0l6QTFPRGswTWp0Y2JuMWNiaTVtYjI5MFpYSWdZVHBvYjNabGNpQjdYRzRnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nZFc1a1pYSnNhVzVsTzF4dWZWeHVMblYwYVd4ekxXSnZjbVJsY2kxeWFXZG9kQ0I3WEc0Z0lHSnZjbVJsY2kxeWFXZG9kRG9nTVhCNElITnZiR2xrSUNOa1kyUm1aVFk3WEc1OVhHNHVhR2xrWkdWdUlIdGNiaUFnWkdsemNHeGhlVG9nYm05dVpUdGNibjFjYmk4cUlEMDlQVDA5UFQwOVBUMGdhV052Ymk1MGFHVnRaU0F0SUhOMlp5RGxtNzdtb0lmbm1vVG1vTGZsdkk4Z1BUMDlQVDA5UFQwOVBTQXFMMXh1TG05MWRHeHBibVV0YVdOdmJpQjdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ1pHbHpjR3hoZVRvZ2FXNXNhVzVsTFdKc2IyTnJPMXh1SUNCMlpYSjBhV05oYkMxaGJHbG5iam9nYldsa1pHeGxPMXh1SUNCM2FXUjBhRG9nTVdWdE8xeHVJQ0JvWldsbmFIUTZJREZsYlR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1dmRYUnNhVzVsTFdsamIyNWZYM04yWnlCN1hHNGdJSEJ2YzJsMGFXOXVPaUJoWW5OdmJIVjBaVHRjYmlBZ2VpMXBibVJsZURvZ01qdGNiaUFnZEc5d09pQTFNQ1U3WEc0Z0lHeGxablE2SURVd0pUdGNiaUFnZDJsa2RHZzZJREZsYlR0Y2JpQWdhR1ZwWjJoME9pQXhaVzA3WEc0Z0lHWnBiR3c2SUdOMWNuSmxiblJqYjJ4dmNqdGNiaUFnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdVb0xUVXdKU3dnTFRVd0pTazdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNDZjbTl2ZENCN1hHNGdJQzB0YjNWMGJHbHVaUzE2U1c1a1pYZzZJREl3TURBN1hHNGdJQzB0YjNWMGJHbHVaUzF6ZEdsamEza3RhR1ZwWjJoME9pQXhNREFsTzF4dUlDQXRMVzkxZEd4cGJtVXRZMmhoY0hSbGNuTXRkMmxrZEdnNklERXdNQ1U3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lIb3RhVzVrWlhnNklDMHhPMXh1SUNCMGIzQTZJREE3WEc0Z0lHeGxablE2SURBN1hHNGdJRzFoY21kcGJqb2dNRHRjYmlBZ2QybGtkR2c2SURFd01DVTdYRzRnSUdobGFXZG9kRG9nTVRBd0pUdGNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNiaUFnZG1semFXSnBiR2wwZVRvZ2FHbGtaR1Z1TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTl0YjJSaGJDQjdYRzRnSUdKdmVDMXphR0ZrYjNjNklEQWdNQ0EyY0hnZ01YQjRJQ05rWTJSbVpUWTdYRzRnSUdScGMzQnNZWGs2SUdac1pYZzdYRzRnSUdac1pYZ3RaR2x5WldOMGFXOXVPaUJqYjJ4MWJXNDdYRzRnSUdac1pYZ3RkM0poY0RvZ2JtOTNjbUZ3TzF4dUlDQndiM05wZEdsdmJqb2dZV0p6YjJ4MWRHVTdYRzRnSUhvdGFXNWtaWGc2SURJeE8xeHVJQ0JvWldsbmFIUTZJREV3TUNVN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN1hHNGdJSFJ5WVc1emFYUnBiMjR0WkhWeVlYUnBiMjQ2SURBdU5ITTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyaGxZV1JsY2l4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmJXRnBiaXhjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmWm05dmRHVnlJSHRjYmlBZ2QybGtkR2c2SURFd01DVTdYRzRnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDJobFlXUmxjaXhjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmWm05dmRHVnlJSHRjYmlBZ1pteGxlQzF6YUhKcGJtczZJREE3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgzUnBkR3hsTEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5dFlXbHVMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTltYjI5MFpYSWdlMXh1SUNCd1lXUmthVzVuT2lBd0lERTJjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyaGxZV1JsY2l4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmRHbDBiR1VnZTF4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUhvdGFXNWtaWGc2SURFN1hHNGdJRzFoY21kcGJqb2dNQ0JoZFhSdk8xeHVJQ0JvWldsbmFIUTZJRFV5Y0hnN1hHNGdJR3hwYm1VdGFHVnBaMmgwT2lBMU1uQjRPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgxOTBhWFJzWlNCN1hHNGdJR1p2Ym5RdGMybDZaVG9nTVRad2VEdGNiaUFnWm05dWRDMTNaV2xuYUhRNklEUXdNRHRjYmlBZ2JXRnlaMmx1T2lBd0lERTJjSGc3WEc0Z0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEc0Z0lHSnZjbVJsY2kxaWIzUjBiMjA2SURGd2VDQnpiMnhwWkNBalpHTmtabVUyTzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgxOWpiRzl6WlNCN1hHNGdJSEJ2YzJsMGFXOXVPaUJoWW5OdmJIVjBaVHRjYmlBZ2VpMXBibVJsZURvZ01qdGNiaUFnZEc5d09pQTFNQ1U3WEc0Z0lISnBaMmgwT2lBeE1uQjRPMXh1SUNCM2FXUjBhRG9nTWpCd2VEdGNiaUFnYUdWcFoyaDBPaUF5TUhCNE8xeHVJQ0JzYVc1bExXaGxhV2RvZERvZ01qQndlRHRjYmlBZ1kyOXNiM0k2SUNNNU9UazdYRzRnSUdadmJuUXRjMmw2WlRvZ01qQndlRHRjYmlBZ2RHVjRkQzFoYkdsbmJqb2dZMlZ1ZEdWeU8xeHVJQ0JqZFhKemIzSTZJSEJ2YVc1MFpYSTdYRzRnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmWTJ4dmMyVWdMbTkxZEd4cGJtVXRhV052YmlCN1hHNGdJSEJ2YzJsMGFXOXVPaUJoWW5OdmJIVjBaVHRjYmlBZ2VpMXBibVJsZURvZ01qdGNiaUFnZEc5d09pQXdPMXh1SUNCc1pXWjBPaUF3TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgxOWpiRzl6WlRwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBak5qWTJPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5dFlXbHVJSHRjYmlBZ1pteGxlRG9nTVR0Y2JpQWdiM1psY21ac2IzYzZJR0YxZEc4N1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMlp2YjNSbGNpQjdYRzRnSUcxaGNtZHBiam9nTUNCaGRYUnZPMXh1SUNCMFpYaDBMV0ZzYVdkdU9pQnlhV2RvZER0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmYjNabGNteGhlU0I3WEc0Z0lHTnZiblJsYm5RNklDY25PMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lIUnZjRG9nTUR0Y2JpQWdiR1ZtZERvZ01EdGNiaUFnZDJsa2RHZzZJREV3TUNVN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWmp0Y2JpQWdiM0JoWTJsMGVUb2dNQzR4TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkM1dmRYUnNhVzVsTFdSeVlYZGxjbDkwYVc1NUxGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBhVzU1SUh0Y2JpQWdkMmxrZEdnNklESTRNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRhVzVwTEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5dGFXNXBJSHRjYmlBZ2QybGtkR2c2SURRNE1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDNXZkWFJzYVc1bExXUnlZWGRsY2w5emJXRnNiQ3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYzIxaGJHd2dlMXh1SUNCM2FXUjBhRG9nTlRRd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0xtOTFkR3hwYm1VdFpISmhkMlZ5WDNKbFozVnNZWElzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKbFozVnNZWElnZTF4dUlDQjNhV1IwYURvZ05qZ3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMWxaR2wxYlN4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISXViM1YwYkdsdVpTMWtjbUYzWlhKZmJXVmthWFZ0SUh0Y2JpQWdkMmxrZEdnNklEY3lNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNZWEpuWlN4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISXViM1YwYkdsdVpTMWtjbUYzWlhKZmJHRnlaMlVnZTF4dUlDQjNhV1IwYURvZ09UWXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNJSHRjYmlBZ1ltOXlaR1Z5TFd4bFpuUTZJREZ3ZUNCemIyeHBaQ0FqWkdOa1ptVTJPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDNXZkWFJzYVc1bExXUnlZWGRsY2w5MGFXNTVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSEpwWjJoME9pQXRNamt3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTG05MWRHeHBibVV0WkhKaGQyVnlYMjFwYm1rdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2NtbG5hSFE2SUMwME9UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZmMyMWhiR3d1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnY21sbmFIUTZJQzAxTlRCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl5ZEd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmY21WbmRXeGhjaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0J5YVdkb2REb2dMVFk1TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkM1dmRYUnNhVzVsTFdSeVlYZGxjbDl0WldScGRXMHViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdjbWxuYUhRNklDMDNNekJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3d1YjNWMGJHbHVaUzFrY21GM1pYSmZiR0Z5WjJVdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2NtbG5hSFE2SUMwNU56QndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISWdlMXh1SUNCaWIzSmtaWEl0Y21sbmFIUTZJREZ3ZUNCemIyeHBaQ0FqWkdOa1ptVTJPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGFXNTVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJR3hsWm5RNklDMHlPVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNkSEl1YjNWMGJHbHVaUzFrY21GM1pYSmZiV2x1YVM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCc1pXWjBPaUF0TkRrd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNOdFlXeHNMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJR3hsWm5RNklDMDFOVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNkSEl1YjNWMGJHbHVaUzFrY21GM1pYSmZjbVZuZFd4aGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQnNaV1owT2lBdE5qa3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMWxaR2wxYlM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCc1pXWjBPaUF0TnpNd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4aGNtZGxMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJR3hsWm5RNklDMDVOekJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0lzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWW5SMElIdGNiaUFnYkdWbWREb2dNRHRjYmlBZ2QybGtkR2c2SURFd01DVTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNScGJua3NYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwTG05MWRHeHBibVV0WkhKaGQyVnlYM1JwYm5rZ2UxeHVJQ0JvWldsbmFIUTZJREkwTUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM1IwWWk1dmRYUnNhVzVsTFdSeVlYZGxjbDl0YVc1cExGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRhVzVwSUh0Y2JpQWdhR1ZwWjJoME9pQXpNakJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0l1YjNWMGJHbHVaUzFrY21GM1pYSmZjMjFoYkd3c1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgzTnRZV3hzSUh0Y2JpQWdhR1ZwWjJoME9pQXpOakJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0l1YjNWMGJHbHVaUzFrY21GM1pYSmZjbVZuZFd4aGNpeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZjbVZuZFd4aGNpQjdYRzRnSUdobGFXZG9kRG9nTkRBd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDIxbFpHbDFiU3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRdWIzVjBiR2x1WlMxa2NtRjNaWEpmYldWa2FYVnRJSHRjYmlBZ2FHVnBaMmgwT2lBME5EQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXViM1YwYkdsdVpTMWtjbUYzWlhKZmJHRnlaMlVzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWW5SMExtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4aGNtZGxJSHRjYmlBZ2FHVnBaMmgwT2lBME9EQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSWdlMXh1SUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnSTJSalpHWmxOanRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXViM1YwYkdsdVpTMWtjbUYzWlhKZmRHbHVlUzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0IwYjNBNklDMHlOVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0l1YjNWMGJHbHVaUzFrY21GM1pYSmZiV2x1YVM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCMGIzQTZJQzB6TXpCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYzIxaGJHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdkRzl3T2lBdE16Y3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmRIUmlMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSmxaM1ZzWVhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2RHOXdPaUF0TkRFd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDIxbFpHbDFiUzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0IwYjNBNklDMDBOVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0l1YjNWMGJHbHVaUzFrY21GM1pYSmZiR0Z5WjJVdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2RHOXdPaUF0TkRrd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWW5SMElIdGNiaUFnZEc5d09pQnBibWwwYVdGc08xeHVJQ0JpYjNKa1pYSXRkRzl3T2lBeGNIZ2djMjlzYVdRZ0kyUmpaR1psTmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZkR2x1ZVM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCaWIzUjBiMjA2SUMweU5UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5aWRIUXViM1YwYkdsdVpTMWtjbUYzWlhKZmJXbHVhUzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0JpYjNSMGIyMDZJQzB6TXpCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRdWIzVjBiR2x1WlMxa2NtRjNaWEpmYzIxaGJHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdZbTkwZEc5dE9pQXRNemN3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwTG05MWRHeHBibVV0WkhKaGQyVnlYM0psWjNWc1lYSXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdZbTkwZEc5dE9pQXROREV3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwTG05MWRHeHBibVV0WkhKaGQyVnlYMjFsWkdsMWJTNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQmliM1IwYjIwNklDMDBOVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZiR0Z5WjJVdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ1ltOTBkRzl0T2lBdE5Ea3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmIzQmxibVZrSUh0Y2JpQWdkbWx6YVdKcGJHbDBlVG9nZG1semFXSnNaVHRjYmlBZ2VpMXBibVJsZURvZ2RtRnlLQzB0YjNWMGJHbHVaUzE2U1c1a1pYZ3BPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNpQjdYRzRnSUhCdmMybDBhVzl1T2lCbWFYaGxaRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5dmNHVnVaV1F1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzSUh0Y2JpQWdjbWxuYUhRNklEQTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjNCbGJtVmtMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaUI3WEc0Z0lHeGxablE2SURBN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiM0JsYm1Wa0xtOTFkR3hwYm1VdFpISmhkMlZ5WDNSMFlpQjdYRzRnSUhSdmNEb2dNRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5dmNHVnVaV1F1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwSUh0Y2JpQWdZbTkwZEc5dE9pQXdPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5bVpuTmxkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3dzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjJabWMyVjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaUI3WEc0Z0lHaGxhV2RvZERvZ1kyRnNZeWd4TURBbElDMGdOR1Z0S1R0Y2JpQWdkRzl3T2lBMU1DVTdYRzRnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXZabVp6WlhRdWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOW1abk5sZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRZ2UxeHVJQ0IzYVdSMGFEb2dZMkZzWXlneE1EQWxJQzBnTkdWdEtUdGNiaUFnYkdWbWREb2dOVEFsTzF4dUlDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaVmdvTFRVd0pTazdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjJabWMyVjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOXdaVzVsWkM1dmRYUnNhVzVsTFdSeVlYZGxjbDl5ZEd3Z2UxeHVJQ0J5YVdkb2REb2dNbVZ0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOW1abk5sZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Y0dWdVpXUXViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlJSHRjYmlBZ2JHVm1kRG9nTW1WdE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMjltWm5ObGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5dmNHVnVaV1F1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpSUh0Y2JpQWdkRzl3T2lBeVpXMDdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjJabWMyVjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOXdaVzVsWkM1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRZ2UxeHVJQ0JpYjNSMGIyMDZJREpsYlR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWhkWFJ2TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkN4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5aGRYUnZMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaUI3WEc0Z0lHaGxhV2RvZERvZ1lYVjBienRjYmlBZ2JXRjRMV2hsYVdkb2REb2dZMkZzWXlneE1EQWxJQzBnTkdWdEtUdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDltZFd4c0lIdGNiaUFnY0dGa1pHbHVaem9nTUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV2hsWVdScGJtY2dlMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSWdlMXh1SUNCa2FYTndiR0Y1T2lCdWIyNWxPMXh1ZlZ4dUxtOTFkR3hwYm1VdGFHVmhaR2x1WjE5ZllXNWphRzl5T214cGJtc3NYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSTZkbWx6YVhSbFpDeGNiaTV2ZFhSc2FXNWxMV2hsWVdScGJtZGZYMkZ1WTJodmNqcG9iM1psY2lCN1hHNGdJR052Ykc5eU9pQWpPVGs1TzF4dUlDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3WEc1OVhHNHViM1YwYkdsdVpTMW9aV0ZrYVc1blgxOWhibU5vYjNJNmFHOTJaWElnZTF4dUlDQmpiMnh2Y2pvZ0l6Rm1PR1JrTmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV2hsWVdScGJtYzZhRzkyWlhJZ0xtOTFkR3hwYm1VdGFHVmhaR2x1WjE5ZllXNWphRzl5SUh0Y2JpQWdaR2x6Y0d4aGVUb2dhVzVzYVc1bExXSnNiMk5yTzF4dWZWeHVMbTkxZEd4cGJtVXRhR1ZoWkdsdVoxOXpkR0Z5ZERwb2IzWmxjaUI3WEc0Z0lHOTJaWEptYkc5M09pQjJhWE5wWW14bE8xeHVmVnh1TG05MWRHeHBibVV0YUdWaFpHbHVaMTl6ZEdGeWRDQXViM1YwYkdsdVpTMW9aV0ZrYVc1blgxOWhibU5vYjNJZ2UxeHVJQ0J3YjNOcGRHbHZiam9nWVdKemIyeDFkR1U3WEc0Z0lIb3RhVzVrWlhnNklESTdYRzRnSUhSdmNEb2dOVEFsTzF4dUlDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaVmtvTFRVd0pTazdYRzRnSUd4bFpuUTZJQzB4WlcwN1hHNTlYRzR2S2lwY2JpQXFJR1ZzYkdsd2MybHpMbXhsYzNNZ0xTRG1sb2Ztbkt6bm5JSG5sYVVnYldsNGFXNTRJT1dIdmVhVnNGeHVJQ29nUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1SUNvZ1EzSmxZWFJsWkNCQ2VUb2dXV0Z2YUdGcGVHbGhiMXh1SUNvZ1ZYQmtZWFJsT2lBeU1ESXlMak11TVRGY2JpQXFMMXh1THlvZ1BUMDlQVDA5SU9hV2grYWNyT2VjZ2VlVnBlV0h2ZWFWc0NBOVBUMDlQVDBnS2k5Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKeklIdGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJSGRwWkhSb09pQjJZWElvTFMxdmRYUnNhVzVsTFdOb1lYQjBaWEp6TFhkcFpIUm9LVHRjYmlBZ2RISmhibk5wZEdsdmJpMWtkWEpoZEdsdmJqb2dNQzR6Y3p0Y2JpQWdiM1psY21ac2IzYzZJR0YxZEc4N1hHNTlYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmZEdsMGJHVWdlMXh1SUNCdFlYSm5hVzQ2SURBZ01UWndlRHRjYmlBZ2FHVnBaMmgwT2lBME1IQjRPMXh1SUNCc2FXNWxMV2hsYVdkb2REb2dOREJ3ZUR0Y2JpQWdjR0ZrWkdsdVp6b2dNQ0F4Tm5CNE8xeHVJQ0JpYjNKa1pYSXRZbTkwZEc5dE9pQXhjSGdnYzI5c2FXUWdJMlJqWkdabE5qdGNiaUFnWm05dWRDMXphWHBsT2lBeE5uQjRPMXh1SUNCbWIyNTBMWGRsYVdkb2REb2dOREF3TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDIxaGFXNGdlMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOXNhWE4wTEZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgzTjFZbXBsWTNRc1hHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZhWFJsYlNCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2VpMXBibVJsZURvZ01qdGNiaUFnYldGeVoybHVPaUF3TzF4dUlDQndZV1JrYVc1bk9pQXdPMXh1SUNCc2FYTjBMWE4wZVd4bExYUjVjR1U2SUc1dmJtVTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZiR2x6ZENCN1hHNGdJSEJoWkdScGJtYzZJREF1TldWdElEQTdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmMzVmlhbVZqZENCN1hHNGdJSEJoWkdScGJtY3RiR1ZtZERvZ01XVnRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgybDBaVzBnZTF4dUlDQnRZWEpuYVc0NklEQTdYRzRnSUd4cGJtVXRhR1ZwWjJoME9pQXpNSEI0TzF4dUlDQm1iMjUwTFhOcGVtVTZJREV6Y0hnN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmNHeGhZMlZvYjJ4a1pYSWdlMXh1SUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lIUnZjRG9nTUR0Y2JpQWdiR1ZtZERvZ01EdGNiaUFnZDJsa2RHZzZJREV3TUNVN1hHNGdJR2hsYVdkb2REb2dNekJ3ZUR0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlkzWmpobU9UdGNiaUFnWW05eVpHVnlMV3hsWm5RNklESndlQ0J6YjJ4cFpDQWpNRFU0T1RReU8xeHVJQ0IwY21GdWMybDBhVzl1TFdSMWNtRjBhVzl1T2lBd0xqSnpPMXh1SUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMkZ1WTJodmNpQjdYRzRnSUhkb2FYUmxMWE53WVdObE9pQnViM2R5WVhBN1hHNGdJSFJsZUhRdGIzWmxjbVpzYjNjNklHVnNiR2x3YzJsek8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1SUNCa2FYTndiR0Y1T2lCaWJHOWphenRjYmlBZ2NHRmtaR2x1WnpvZ01DQXhMalZsYlR0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSTZiR2x1YXl4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWhibU5vYjNJNmRtbHphWFJsWkN4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWhibU5vYjNJNmFHOTJaWElnZTF4dUlDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3WEc0Z0lHTnZiRzl5T2lBak5UVTFPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyRnVZMmh2Y2pwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBak1EVTRPVFF5TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMk52WkdVZ2UxeHVJQ0J3WVdSa2FXNW5MWEpwWjJoME9pQXdMalZsYlR0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMkZqZEdsMlpTNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWhibU5vYjNJNmJHbHVheXhjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJGamRHbDJaUzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSTZkbWx6YVhSbFpDeGNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMkZqZEdsMlpTNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWhibU5vYjNJNmFHOTJaWElnZTF4dUlDQmpiMnh2Y2pvZ0l6QTFPRGswTWp0Y2JpQWdabTl1ZEMxM1pXbG5hSFE2SURRd01EdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDNOMGFXTnJlU3hjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJacGVHVmtJSHRjYmlBZ1pHbHpjR3hoZVRvZ1pteGxlRHRjYmlBZ1pteGxlQzEzY21Gd09pQnViM2R5WVhBN1hHNGdJR1pzWlhndFpHbHlaV04wYVc5dU9pQmpiMngxYlc0N1hHNGdJSG90YVc1a1pYZzZJSFpoY2lndExXOTFkR3hwYm1VdGVrbHVaR1Y0S1R0Y2JpQWdkRzl3T2lBd08xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZmMzUnBZMnQ1SUM1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5MGFYUnNaU3hjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJacGVHVmtJQzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTkwYVhSc1pTeGNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYM04wYVdOcmVTQXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZiV0ZwYml4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgyWnBlR1ZrSUM1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5dFlXbHVJSHRjYmlBZ1ltOTRMWE5wZW1sdVp6b2dZbTl5WkdWeUxXSnZlRHRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgzTjBhV05yZVNBdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmRHbDBiR1VzWEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5bWFYaGxaQ0F1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmZEdsMGJHVWdlMXh1SUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgzTjBhV05yZVNBdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmJXRnBiaXhjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJacGVHVmtJQzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTl0WVdsdUlIdGNiaUFnWm14bGVEb2dNVHRjYmlBZ2IzWmxjbVpzYjNjNklHRjFkRzg3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOXpkR2xqYTNrZ2UxeHVJQ0J3YjNOcGRHbHZiam9nYzNScFkydDVPMXh1SUNCdFlYZ3RhR1ZwWjJoME9pQjJZWElvTFMxdmRYUnNhVzVsTFhOMGFXTnJlUzFvWldsbmFIUXBPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlptbDRaV1FnZTF4dUlDQndiM05wZEdsdmJqb2dabWw0WldRN1hHNGdJRzFoZUMxb1pXbG5hSFE2SURFd01DVTdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5b2FXUmtaVzRnZTF4dUlDQmthWE53YkdGNU9pQnViMjVsTzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZabTlzWkdWa0lIdGNiaUFnZDJsa2RHZzZJREE3WEc1OVhHNHZLaUE5UFQwOVBUMDlQVDA5SUdKMWRIUnZibk11ZEdobGJXVWdMU0RtaklucGtxN2xyN3pvaUtybW9MZmx2SThnUFQwOVBUMDlQVDA5UFNBcUwxeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNpQjdYRzRnSUhCdmMybDBhVzl1T2lCbWFYaGxaRHRjYmlBZ2VpMXBibVJsZURvZ09UazVPVGs3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnZEhKaGJuTnBkR2x2Ymkxa2RYSmhkR2x2YmpvZ01DNHpjenRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpQjdYRzRnSUdKdmVDMXphR0ZrYjNjNklEQWdNQ0EyY0hnZ01YQjRJQ05rWTJSbVpUWTdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ2JXRnlaMmx1T2lBeE1IQjRPMXh1SUNCM2FXUjBhRG9nTXpad2VEdGNiaUFnYUdWcFoyaDBPaUF6Tm5CNE8xeHVJQ0JpYjNKa1pYSTZJREZ3ZUNCemIyeHBaQ0FqWkdOa1ptVTJPMXh1SUNCaWIzSmtaWEl0Y21Ga2FYVnpPaUF6Y0hnN1hHNGdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN1hHNGdJR04xY25OdmNqb2djRzlwYm5SbGNqdGNiaUFnZEdWNGRDMWhiR2xuYmpvZ1kyVnVkR1Z5TzF4dUlDQmpiMnh2Y2pvZ0l6VTFOVHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJqcG9iM1psY2lCN1hHNGdJR052Ykc5eU9pQWpNRFU0T1RReU8xeHVJQ0JpYjNKa1pYSXRZMjlzYjNJNklDTXdOVGc1TkRJN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNHVhR2xrWlNCN1hHNGdJR1JwYzNCc1lYazZJRzV2Ym1VN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTloYm1Ob2IzSTZiR2x1YXl4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNNU9UazdYRzRnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqTURVNE9UUXlPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZmFXTnZiaUI3WEc0Z0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnZWkxcGJtUmxlRG9nTWp0Y2JpQWdkRzl3T2lBMU1DVTdYRzRnSUd4bFpuUTZJRFV3SlR0Y2JpQWdkMmxrZEdnNklESXdjSGc3WEc0Z0lHaGxhV2RvZERvZ01qQndlRHRjYmlBZ2RISmhibk5tYjNKdE9pQjBjbUZ1YzJ4aGRHVW9MVFV3SlN3Z0xUVXdKU2s3WEc0Z0lHWnBiR3c2SUdOMWNuSmxiblJqYjJ4dmNqdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZllXTjBhWFpsTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1kyOXNiM0k2SUNObVptWTdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNNd05UZzVOREk3WEc0Z0lHSnZjbVJsY2kxamIyeHZjam9nSXpBMU9EazBNanRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZllXTjBhWFpsTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVPbWh2ZG1WeUlIdGNiaUFnWTI5c2IzSTZJQ05tWm1ZN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMkZqZEdsMlpTQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmJHbHVheXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWVdOMGFYWmxJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcDJhWE5wZEdWa0xGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWhZM1JwZG1VZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNObVptWTdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDNKdmRXNWtaV1F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCaWIzSmtaWEl0Y21Ga2FYVnpPaUF4T0hCNE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcHNhVzVyTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2YkdsdWF5eGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmRtbHphWFJsWkN4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlpHbHpZV0pzWldRZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T25acGMybDBaV1FzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWVc1amFHOXlPbWh2ZG1WeUxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWthWE5oWW14bFpDQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmFHOTJaWElzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQ0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCamRYSnpiM0k2SUc1dmRDMWhiR3h2ZDJWa08xeHVJQ0JqYjJ4dmNqb2dJems1T1R0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmJHbHVhenBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9teHBibXM2YUc5MlpYSXNYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9uWnBjMmwwWldRNmFHOTJaWElzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanAyYVhOcGRHVmtPbWh2ZG1WeUxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWthWE5oWW14bFpDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwb2IzWmxjanBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9taHZkbVZ5T21odmRtVnlMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJqcG9iM1psY2l4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlpHbHpZV0pzWldRZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZlluVjBkRzl1T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNNU9UazdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQ0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalpqVm1OV1kxTzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOTBkR0lzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJKMGRDQjdYRzRnSUd4bFpuUTZJRFV3SlR0Y2JpQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZZS0MwMU1DVXBPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5MGRHSWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWlkSFFnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1pHbHpjR3hoZVRvZ2FXNXNhVzVsTFdKc2IyTnJPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5MGRHSWdlMXh1SUNCMGIzQTZJREV5Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYM1IwWWk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYUdsa1pHVnVJSHRjYmlBZ2RHOXdPaUF0TlRad2VEdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWW5SMElIdGNiaUFnWW05MGRHOXRPaUF4TW5CNE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlpZEhRdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEc0Z0lHSnZkSFJ2YlRvZ0xUVTJjSGc3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzSjBiQ3hjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYkhSeUlIdGNiaUFnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWktDMDFNQ1VwTzF4dUlDQjNhV1IwYURvZ05UWndlRHRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmNuUnNJSHRjYmlBZ2RHOXdPaUExTUNVN1hHNGdJSEpwWjJoME9pQXhNbkI0TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOXlkR3d1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMmhwWkdSbGJpQjdYRzRnSUhKcFoyaDBPaUF0T0Rad2VEdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYkhSeUlIdGNiaUFnZEc5d09pQTFNQ1U3WEc0Z0lHeGxablE2SURFeWNIZzdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJ4MGNpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmFHbGtaR1Z1SUh0Y2JpQWdiR1ZtZERvZ0xUZzJjSGc3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzUjBZaUF1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYml4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmNuUnNJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmFHbGtaR1Z1TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5aWRIUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJ4MGNpQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEc0Z0lHUnBjM0JzWVhrNklHNXZibVU3WEc1OVhHNGlMQ0l2S2lBOVBUMDlQU0JUWTNKdmJHeGlZWElnUFQwOVBUMGdLaTljYmpvNkxYZGxZbXRwZEMxelkzSnZiR3hpWVhJZ2UxeHVJQ0IzYVdSMGFEb2dOM0I0TzF4dUlDQm9aV2xuYUhRNklEZHdlRHRjYmlBZ0xYZGxZbXRwZEMxaWIzSmtaWEl0Y21Ga2FYVnpPaUExY0hnN1hHNTlYRzVjYmpvNkxYZGxZbXRwZEMxelkzSnZiR3hpWVhJdGRISmhZMnN0Y0dsbFkyVWdlMXh1SUNBdGQyVmlhMmwwTFdKdmNtUmxjaTF5WVdScGRYTTZJRFZ3ZUR0Y2JuMWNibHh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2kxMGFIVnRZanAyWlhKMGFXTmhiQ0I3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklISm5ZbUVvTUN3Z01Dd2dNQ3dnTUM0eU5TazdYRzRnSUMxM1pXSnJhWFF0WW05eVpHVnlMWEpoWkdsMWN6b2dOWEI0TzF4dWZWeHVYRzQ2T2kxM1pXSnJhWFF0YzJOeWIyeHNZbUZ5TFhSb2RXMWlPbWh2Y21sNmIyNTBZV3dnZTF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQnlaMkpoS0RBc0lEQXNJREFzSURBdU1qVXBPMXh1SUNBdGQyVmlhMmwwTFdKdmNtUmxjaTF5WVdScGRYTTZJRFZ3ZUR0Y2JuMWNibHh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2pwb2IzWmxjaUI3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklISm5ZbUVvTUN3Z01Dd2dNQ3dnTUM0eE5TazdYRzU5WEc1Y2JqbzZMWGRsWW10cGRDMXpZM0p2Ykd4aVlYSXRkR2gxYldJNmFHOTJaWElnZTF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQnlaMkpoS0RBc0lEQXNJREFzSURBdU16VXBPMXh1ZlZ4dUlpd2lRR2x0Y0c5eWRDQW5ZMjlzYjNKekp6dGNibHh1TG5ObFkzUnBiMjRnZTF4dUlDQnRZWEpuYVc0NklERmxiU0F3TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVYRzRnSUNaZlgyaGxZV1JsY2l4Y2JpQWdKbDlmWTI5dWRHVnVkQ3hjYmlBZ0psOWZabTl2ZEdWeUlIdGNiaUFnSUNCdFlYSm5hVzQ2SURBZ00yVnRPMXh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNGdJSDFjYmx4dUlDQW1YMTkwYVhSc1pTQjdYRzRnSUNBZ1kyOXNiM0k2SUVCMGFHbHlaRjkwWlhoMFgyTnZiRzl5TzF4dUlDQjlYRzVjYmlBZ0psOWZhRE1nZTF4dUlDQWdJR052Ykc5eU9pQkFjSEpwYldGeWVWOWpiMnh2Y2p0Y2JpQWdJQ0JtYjI1MExYTnBlbVU2SURFdU16VmxiVHRjYmlBZ2ZWeHVYRzRnSUNaZlgyZzBJSHRjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREV1TVdWdE8xeHVJQ0FnSUdOdmJHOXlPaUJBZEdocGNtUmZkR1Y0ZEY5amIyeHZjanRjYmlBZ2ZWeHVYRzRnSUNaZlgyZzFJSHRjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREZsYlR0Y2JpQWdJQ0JqYjJ4dmNqb2dRR1p2ZFhKMGFGOTBaWGgwWDJOdmJHOXlPMXh1SUNCOVhHNWNiaUFnSmw5ZlpHd3NYRzRnSUNaZlgyUjBMRnh1SUNBbVgxOWtaQ0I3WEc0Z0lDQWdiV0Z5WjJsdU9pQXdPMXh1SUNBZ0lIQmhaR1JwYm1jNklEQTdYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JpQWdmVnh1WEc0Z0lDWmZYMlJzSUh0Y2JpQWdJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lDQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ2ZWeHVYRzRnSUNaZlgyUjBJSHRjYmlBZ0lDQmthWE53YkdGNU9tbHViR2x1WlMxaWJHOWphenRjYmlBZ2ZWeHVYRzRnSUNaZlgyUmtJSHRjYmlBZ0lDQmthWE53YkdGNU9tbHViR2x1WlMxaWJHOWphenRjYmlBZ0lDQmpiMnh2Y2pvZ1FITjFZMk5sYzNOZlkyOXNiM0k3WEc0Z0lIMWNibHh1SUNBbVgxOXdjbVVnZTF4dUlDQWdJRzFoY21kcGJqb2dNbVZ0SURBN1hHNGdJQ0FnY0dGa1pHbHVaem9nTVdWdE8xeHVJQ0FnSUdadmJuUXRjMmw2WlRvZ01UUndlRHRjYmlBZ0lDQnNhVzVsTFdobGFXZG9kRG9nTVRVd0pUdGNiaUFnSUNCMFpYaDBMV0ZzYVdkdU9pQnNaV1owTzF4dUlDQWdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJRUJpWjE5amIyeHZjanRjYmlBZ0lDQmliM0prWlhJNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4dUlDQWdJR0p2Y21SbGNpMXlZV1JwZFhNNklEUndlRHRjYmlBZ0lDQmpiMnh2Y2pvZ1FIUm9hWEprWDNSbGVIUmZZMjlzYjNJN1hHNGdJQ0FnYjNabGNtWnNiM2M2SUdGMWRHODdYRzRnSUgxY2JseHVJQ0FtWDE5amIyUmxJSHRjYmlBZ0lDQmthWE53YkdGNU9pQmliRzlqYXp0Y2JpQWdJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQjlYRzVjYmlBZ0psOWZabTl2ZEdWeUlIdGNiaUFnSUNCaWIzSmtaWEl0ZEc5d09pQXhjSGdnYzI5c2FXUWdRR0p2Y21SbGNsOWpiMnh2Y2p0Y2JpQWdJQ0J0WVhKbmFXNHRkRzl3T2lBelpXMDdYRzRnSUNBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FHSm5YMk52Ykc5eU8xeHVJQ0FnSUdOdmJHOXlPaUJBWm05MWNuUm9YM1JsZUhSZlkyOXNiM0k3WEc0Z0lIMWNibjFjYmlJc0lrQnBiWEJ2Y25RZ0p5NHZZMjlzYjNKekp6dGNibHh1TG1OaGMyVWdlMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lHUnBjM0JzWVhrNklHZHlhV1E3WEc0Z0lHZHlhV1F0ZEdWdGNHeGhkR1V0WTI5c2RXMXVjem9nY21Wd1pXRjBLRElzSURGbWNpazdYRzRnSUdkaGNEb2dOREJ3ZUR0Y2JpQWdjR0ZrWkdsdVp6b2dNV1Z0TzF4dUlDQmliM0prWlhJdGRHOXdPakZ3ZUNCemIyeHBaQ0JBWW05eVpHVnlYMk52Ykc5eU8xeHVJQ0JpYjNKa1pYSXRZbTkwZEc5dE9qRndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVYRzRnSUNZNllXWjBaWElnZTF4dUlDQWdJR052Ym5SbGJuUTZJQ2NuTzF4dUlDQWdJSEJ2YzJsMGFXOXVPaUJoWW5OdmJIVjBaVHRjYmlBZ0lDQjZMV2x1WkdWNE9pQXlPMXh1SUNBZ0lIUnZjRG9nTUR0Y2JpQWdJQ0JzWldaME9pQTFNQ1U3WEc0Z0lDQWdhR1ZwWjJoME9pQXhNREFsTzF4dUlDQWdJSGRwWkhSb09pQXdPMXh1SUNBZ0lHSnZjbVJsY2kxc1pXWjBPaUF4Y0hnZ2MyOXNhV1FnUUdKdmNtUmxjbDlqYjJ4dmNqdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQjlYRzVjYmlBZ0psOWZjSEpsTEZ4dUlDQW1YMTkwWlhoMFlYSmxZU0I3WEc0Z0lDQWdabTl1ZEMxemFYcGxPaUF4TTNCNE8xeHVJQ0FnSUd4cGJtVXRhR1ZwWjJoME9pQXhOVEFsTzF4dUlDQjlYRzVjYmlBZ0psOWZjSEpsTEZ4dUlDQW1YMTlqYjJSbExGeHVJQ0FtWDE5MFpYaDBZWEpsWVNCN1hHNGdJQ0FnWm05dWRDMW1ZVzFwYkhrNklGd2lRMjkxY21sbGNpQk9aWGRjSWl3Z1EyOXVjMjlzWVhNc0lFZGxiM0puYVdFc0lFRnlhV0ZzTENCellXNXpMWE5sY21sbU8xeHVJQ0I5WEc1Y2JpQWdKbDlmY0hKbElIdGNiaUFnSUNCdFlYSm5hVzQ2SURBN1hHNGdJQ0FnY0dGa1pHbHVaem9nTVdWdE8xeHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCaVoxOWpiMnh2Y2p0Y2JpQWdJQ0JvWldsbmFIUTZJREV3TUNVN1hHNGdJQ0FnWW05eVpHVnlMWEpoWkdsMWN6b2dOSEI0TzF4dUlDQWdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hHNGdJQ0FnYjNabGNtWnNiM2M2SUdGMWRHODdYRzRnSUgxY2JseHVJQ0FtWDE5MGIyOXNZbUZ5SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNiaUFnSUNCb1pXbG5hSFE2SURNMmNIZzdYRzRnSUNBZ2JHbHVaUzFvWldsbmFIUTZJRE0yY0hnN1hHNGdJQ0FnWm05dWRDMXphWHBsT2lBeE5IQjRPMXh1SUNBZ0lIQmhaR1JwYm1jNklEQWdNVFp3ZUR0Y2JpQWdJQ0IwWlhoMExXRnNhV2R1T2lCeWFXZG9kRHRjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVJQ0I5WEc1Y2JpQWdKbDlmWVdOMGFXOXVMRnh1SUNBbVgxOXlaVzF2ZG1VZ2UxeHVJQ0FnSUdOMWNuTnZjam9nY0c5cGJuUmxjanRjYmlBZ0lDQmpiMnh2Y2pvZ1FITjFZMk5sYzNOZlkyOXNiM0k3WEc0Z0lDQWdkWE5sY2kxelpXeGxZM1E2SUc1dmJtVTdYRzRnSUgxY2JseHVJQ0FtWDE5aFkzUnBiMjRnZTF4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVROd2VEdGNiaUFnSUNCd1lXUmthVzVuTFd4bFpuUTZJREV3Y0hnN1hHNWNiaUFnSUNBbU9tWnBjbk4wTFdOb2FXeGtJSHRjYmlBZ0lDQWdJSEJoWkdScGJtY3RiR1ZtZERvZ01EdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQW1YMTl5WlcxdmRtVWdlMXh1SUNBZ0lHWnNiMkYwT2lCeWFXZG9kRHRjYmlBZ2ZWeHVYRzRnSUNaZlgyTnZibk52YkdVZ2UxeHVJQ0FnSUcxaGNtZHBiam9nTUNCaGRYUnZPMXh1SUNBZ0lHaGxhV2RvZERvZ01UZ3djSGc3WEc0Z0lDQWdZbTl5WkdWeU9pQXhjSGdnYzI5c2FXUWdRR0p2Y21SbGNsOWpiMnh2Y2p0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1SUNCOVhHNWNiaUFnSmw5ZmRHVjRkR0Z5WldFZ2UxeHVJQ0FnSUcxaGNtZHBiam9nTUNCaGRYUnZPMXh1SUNBZ0lIZHBaSFJvT2lBeE1EQWxPMXh1SUNBZ0lHaGxhV2RvZERvZ01UQXdKVHRjYmlBZ0lDQmliM0prWlhJNklHNXZibVU3WEc0Z0lDQWdiM1YwYkdsdVpUb2dibTl1WlR0Y2JpQWdJQ0J3WVdSa2FXNW5PaUF4WlcwN1hHNGdJQ0FnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjYmlBZ2ZWeHVYRzRnSUNaZlgyeHBjM1FzWEc0Z0lDWmZYMmwwWlcwZ2UxeHVJQ0FnSUcxaGNtZHBiam9nTUR0Y2JpQWdJQ0J3WVdSa2FXNW5PaUF3TzF4dUlDQWdJR3hwYzNRdGMzUjViR1V0ZEhsd1pUb2dibTl1WlR0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1SUNCOVhHNWNiaUFnSmw5ZmJHbHpkQ0I3WEc0Z0lDQWdhR1ZwWjJoME9pQXpOakJ3ZUR0Y2JpQWdJQ0JpYjNKa1pYSXRkRzl3T2lBeGNIZ2djMjlzYVdRZ1FHSnZjbVJsY2w5amIyeHZjanRjYmlBZ0lDQmliM0prWlhJdFltOTBkRzl0T2lBeGNIZ2djMjlzYVdRZ1FHSnZjbVJsY2w5amIyeHZjanRjYmlBZ0lDQm1iMjUwTFhOcGVtVTZJREV6Y0hnN1hHNGdJQ0FnYjNabGNtWnNiM2M2SUdGMWRHODdYRzRnSUgxY2JseHVJQ0FtWDE5cGRHVnRJSHRjYmlBZ0lDQm9aV2xuYUhRNklETTJjSGc3WEc0Z0lDQWdiR2x1WlMxb1pXbG5hSFE2SURNMmNIZzdYRzRnSUNBZ1kzVnljMjl5T2lCd2IybHVkR1Z5TzF4dUlDQWdJSEJoWkdScGJtYzZJREFnTVRad2VEdGNibHh1SUNBZ0lDWTZhRzkyWlhJZ2UxeHVJQ0FnSUNBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FHaHZkbVZ5WDJKblgyTnZiRzl5TzF4dUlDQWdJSDFjYmlBZ2ZWeHVmVnh1SWl3aUxuQmhjR1Z5SUh0Y2NseHVJQ0F1YzJoaFpHOTNYMnhwWjJoMFgzSmxaM1ZzWVhJb0tUdGNjbHh1SUNCdFlYSm5hVzQ2SURKbGJTQmhkWFJ2TzF4eVhHNGdJRzFoZUMxM2FXUjBhRG9nTVRJd01IQjRPMXh5WEc0Z0lIQmhaR1JwYm1jNklESmxiVHRjY2x4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQkFkMmhwZEdVN1hISmNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNjbHh1WEhKY2JpQWdKaTVtYkdWNElIdGNjbHh1SUNBZ0lHUnBjM0JzWVhrNklHWnNaWGc3WEhKY2JpQWdJQ0JtYkdWNExXUnBjbVZqZEdsdmJqb2djbTkzTzF4eVhHNGdJQ0FnWm14bGVDMTNjbUZ3T2lCdWIzZHlZWEE3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREE3WEhKY2JpQWdJQ0IzYVdSMGFEb2dNVEF3SlR0Y2NseHVJQ0FnSUcxaGVDMTNhV1IwYURvZ01UQXdKVHRjY2x4dUlDQWdJR2hsYVdkb2REb2dNVEF3SlR0Y2NseHVJQ0FnSUhCaFpHUnBibWM2SURBN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNWNjbHh1SUNBZ0lDNWhjblJwWTJ4bElIdGNjbHh1SUNBZ0lDQWdabXhsZUMxa2FYSmxZM1JwYjI0NklHTnZiSFZ0Ymp0Y2NseHVJQ0FnSUNBZ2QybGtkR2c2SURFd01DVTdYSEpjYmlBZ0lDQWdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hISmNibHh5WEc0Z0lDQWdJQ0FtWDE5dFlXbHVJSHRjY2x4dUlDQWdJQ0FnSUNCb1pXbG5hSFE2SURFd01DVTdYSEpjYmlBZ0lDQWdJQ0FnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNjbHh1SUNBZ0lDQWdJQ0J2ZG1WeVpteHZkem9nWVhWMGJ6dGNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOWZZWE5wWkdVZ2UxeHlYRzRnSUNBZ0lDQWdJR0p2Y21SbGNpMXlhV2RvZERvZ01YQjRJSE52Ykdsa0lFQndjbWx0WVhKNVgySnZjbVJsY2w5amIyeHZjanRjY2x4dUlDQWdJQ0FnZlZ4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dWZWeHlYRzVjY2x4dUxtaGxZV1JsY2lCN1hISmNiaUFnY0c5emFYUnBiMjQ2SUhOMGFXTnJlVHRjY2x4dUlDQjZMV2x1WkdWNE9pQXpPMXh5WEc0Z0lIUnZjRG9nTUR0Y2NseHVJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNjbHh1SUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnUUdKdmNtUmxjbDlqYjJ4dmNqdGNjbHh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCQWQyaHBkR1U3WEhKY2JpQWdkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPMXh5WEc0Z0lIUnlZVzV6YVhScGIyNHRaSFZ5WVhScGIyNDZJREF1TTNNN1hISmNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dVhISmNiaUFnSmw5emRHbGphM2tnZTF4eVhHNGdJQ0FnY0dGa1pHbHVaeTFzWldaME9pQXlOakJ3ZUR0Y2NseHVJQ0I5WEhKY2JuMWNjbHh1WEhKY2JpNWhjblJwWTJ4bElIdGNjbHh1SUNCa2FYTndiR0Y1T2lCbWJHVjRPMXh5WEc0Z0lHWnNaWGd0WkdseVpXTjBhVzl1T2lCeWIzYzdYSEpjYmlBZ1pteGxlQzEzY21Gd09pQnViM2R5WVhBN1hISmNiaUFnY0dGa1pHbHVaem9nTW1WdElEQTdYSEpjYmlBZ1ptOXVkQzF6YVhwbE9pQXhObkI0TzF4eVhHNGdJR3hwYm1VdGFHVnBaMmgwT2lBeE5UQWxPMXh5WEc1Y2NseHVJQ0FtWDE5dFlXbHVJSHRjY2x4dUlDQWdJR1pzWlhnNklERTdYSEpjYmlBZ0lDQndZV1JrYVc1bk9pQXdJREpsYlR0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JseHlYRzRnSUNBZ0xuTmxZM1JwYjI0Z2UxeHlYRzRnSUNBZ0lDQnZkbVZ5Wm14dmR6b2dkbWx6YVdKc1pUdGNjbHh1WEhKY2JpQWdJQ0FnSUNaZlgyTnZiblJsYm5Rc1hISmNiaUFnSUNBZ0lDWmZYMlp2YjNSbGNpeGNjbHh1SUNBZ0lDQWdKbDlmYUdWaFpHVnlJSHRjY2x4dUlDQWdJQ0FnSUNCdmRtVnlabXh2ZHpvZ2RtbHphV0pzWlR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5ZmFHVmhaR1Z5TEZ4eVhHNGdJQ0FnSUNBbVgxOWpiMjUwWlc1MElIdGNjbHh1SUNBZ0lDQWdJQ0J0WVhKbmFXNDZJREE3WEhKY2JpQWdJQ0FnSUgxY2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyRnphV1JsSUh0Y2NseHVJQ0FnSUdac1pYZ3RjMmh5YVc1ck9pQXdPMXh5WEc0Z0lDQWdkMmxrZEdnNklESTBNSEI0TzF4eVhHNGdJQ0FnWW05eVpHVnlMV3hsWm5RNklERndlQ0J6YjJ4cFpDQkFZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNGdJQ0FnZEhKaGJuTnBkR2x2Ymkxa2RYSmhkR2x2YmpvZ01DNHpjenRjY2x4dVhISmNiaUFnSUNBbUxteDBjaUI3WEhKY2JpQWdJQ0FnSUdKdmNtUmxjaTF5YVdkb2REb2dNWEI0SUhOdmJHbGtJRUJpYjNKa1pYSmZZMjlzYjNJN1hISmNiaUFnSUNBZ0lHSnZjbVJsY2kxc1pXWjBPaUJ1YjI1bE8xeHlYRzRnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpJSHRjY2x4dUlDQWdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUhkb2FYUmxPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1ZlZ4eVhHNWNjbHh1Y0hKbExGeHlYRzR1YzJWamRHbHZibDlmY0hKbElIdGNjbHh1SUNCd1lXUmthVzVuT2lBeVpXMDdYSEpjYmlBZ1ptOXVkQzFtWVcxcGJIazZJRndpUTI5MWNtbGxjaUJPWlhkY0lpd2dRWEpwWVd3c0lITmhibk10YzJWeWFXWTdYSEpjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FHSm5YMk52Ykc5eU8xeHlYRzRnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh5WEc1OVhISmNibHh5WEc1amIyUmxMRnh5WEc0dWMyVmpkR2x2Ymw5ZlkyOWtaU0I3WEhKY2JpQWdabTl1ZEMxbVlXMXBiSGs2SUZ3aVEyOTFjbWxsY2lCT1pYZGNJaXdnUVhKcFlXd3NJSE5oYm5NdGMyVnlhV1k3WEhKY2JpQWdabTl1ZEMxemFYcGxPaUF4Tm5CNE8xeHlYRzU5WEhKY2JseHlYRzR1Wm05dmRHVnlJSHRjY2x4dUlDQmliM0prWlhJdGRHOXdPaUF4Y0hnZ2MyOXNhV1FnUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eU8xeHlYRzRnSUhCaFpHUnBibWM2SURObGJTQXdPMXh5WEc0Z0lIUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdGNjbHh1WEhKY2JpQWdZU0I3WEhKY2JpQWdJQ0FtT214cGJtc3NYSEpjYmlBZ0lDQW1PblpwYzJsMFpXUXNYSEpjYmlBZ0lDQW1PbWh2ZG1WeUlIdGNjbHh1SUNBZ0lDQWdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQnViMjVsTzF4eVhHNGdJQ0FnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSmpwb2IzWmxjaUI3WEhKY2JpQWdJQ0FnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nZFc1a1pYSnNhVzVsTzF4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dWZWeHlYRzVjY2x4dUxuVjBhV3h6TFdKdmNtUmxjaTF5YVdkb2RDQjdYSEpjYmlBZ1ltOXlaR1Z5TFhKcFoyaDBPaUF4Y0hnZ2MyOXNhV1FnUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eU8xeHlYRzU5WEhKY2JseHlYRzR1YUdsa1pHVnVJSHRjY2x4dUlDQmthWE53YkdGNU9pQnViMjVsTzF4eVhHNTlYSEpjYmlJc0lpOHFLbHh1SUNvZ2MyaGhaRzkzTG14bGMzTWdMU0RwbUxUbHZiSG1vTGZsdkkvb3JyN252YTRnYldsNGFXNTRJT1dIdmVhVnNGeHVJQ29nUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1SUNvZ1EzSmxZWFJsWkNCQ2VUb2dXV0Z2YUdGcGVHbGhiMXh1SUNvZ1ZYQmtZWFJsT2lBeU1ESXlMak11TWpCY2JpQXFMMXh1UUdsdGNHOXlkQ0FuTGk5amIyeHZjbk1uTzF4dVhHNHZLaUE5UFQwOVBUMGc2WmkwNWIyeDVxQzM1YnlQNks2KzU3MnU1WWU5NXBXd0lEMDlQVDA5UFNBcUwxeHVMbk5vWVdSdmR5aEFiMlptYzJWME9pQXdJREFnTm5CNElERndlQ3dnUUdOdmJHOXlPaUJBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJcElIdGNiaUFnWW05NExYTm9ZV1J2ZHpvZ1FHOW1abk5sZENCQVkyOXNiM0k3WEc1OVhHNWNiaTV6YUdGa2IzZGZjbVZuZFd4aGNpaEFZMjlzYjNJNklFQndjbWx0WVhKNVgySnZjbVJsY2w5amIyeHZjaWtnZTF4dUlDQXVjMmhoWkc5M0tEQWdNQ0EyY0hnZ01YQjRMQ0JBWTI5c2IzSXBPMXh1ZlZ4dVhHNHVjMmhoWkc5M1gyeGhjbWRsS0VCamIyeHZjam9nUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eUtTQjdYRzRnSUM1emFHRmtiM2NvTUNBd0lERXljSGdnTVhCNExDQkFZMjlzYjNJcE8xeHVmVnh1WEc0dWMyaGhaRzkzWDJ4cFoyaDBYM0psWjNWc1lYSW9LU0I3WEc0Z0lDNXphR0ZrYjNkZmNtVm5kV3hoY2lncE8xeHVmVnh1WEc0dWMyaGhaRzkzWDJ4cFoyaDBYMnhoY21kbEtDa2dlMXh1SUNBdWMyaGhaRzkzWDJ4aGNtZGxLQ2s3WEc1OVhHNWNiaTV6YUdGa2IzZGZaR0Z5YTE5eVpXZDFiR0Z5S0NrZ2UxeHVJQ0F1YzJoaFpHOTNYM0psWjNWc1lYSW9RSE5sWTI5dVpHRnllVjlpYjNKa1pYSmZZMjlzYjNJcE8xeHVmVnh1WEc0dWMyaGhaRzkzWDJSaGNtdGZiR0Z5WjJVb0tTQjdYRzRnSUM1emFHRmtiM2RmYkdGeVoyVW9RSE5sWTI5dVpHRnllVjlpYjNKa1pYSmZZMjlzYjNJcE8xeHVmVnh1SWl3aUx5b2dQVDA5UFQwOVBUMDlQU0JwWTI5dUxuUm9aVzFsSUMwZ2MzWm5JT1didnVhZ2grZWFoT2FndCtXOGp5QTlQVDA5UFQwOVBUMDlJQ292WEc0dWIzVjBiR2x1WlMxcFkyOXVJSHRjYmlBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHVJQ0I2TFdsdVpHVjRPaUF4TzF4dUlDQmthWE53YkdGNU9pQnBibXhwYm1VdFlteHZZMnM3WEc0Z0lIWmxjblJwWTJGc0xXRnNhV2R1T2lCdGFXUmtiR1U3WEc0Z0lIZHBaSFJvT2lBeFpXMDdYRzRnSUdobGFXZG9kRG9nTVdWdE8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1WEc0Z0lDWmZYM04yWnlCN1hHNGdJQ0FnY0c5emFYUnBiMjQ2SUdGaWMyOXNkWFJsTzF4dUlDQWdJSG90YVc1a1pYZzZJREk3WEc0Z0lDQWdkRzl3T2lBMU1DVTdYRzRnSUNBZ2JHVm1kRG9nTlRBbE8xeHVJQ0FnSUhkcFpIUm9PaUF4WlcwN1hHNGdJQ0FnYUdWcFoyaDBPaUF4WlcwN1hHNGdJQ0FnWm1sc2JEb2dZM1Z5Y21WdWRHTnZiRzl5TzF4dUlDQWdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsS0MwMU1DVXNJQzAxTUNVcE8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc0Z0lIMWNibjFjYmlJc0lqcHliMjkwSUh0Y2JpQWdMUzF2ZFhSc2FXNWxMWHBKYm1SbGVEb2dNakF3TUR0Y2JpQWdMUzF2ZFhSc2FXNWxMWE4wYVdOcmVTMW9aV2xuYUhRNklERXdNQ1U3WEc0Z0lDMHRiM1YwYkdsdVpTMWphR0Z3ZEdWeWN5MTNhV1IwYURvZ01UQXdKVHRjYm4xY2JpSXNJa0JwYlhCdmNuUWdKeTR2ZG1GeWFXRmliR1Z6Snp0Y2JrQnBiWEJ2Y25RZ0p5NHZZMjlzYjNKekp6dGNia0JwYlhCdmNuUWdKeTR2YzJoaFpHOTNKenRjYmx4dUxtOTFkR3hwYm1VdFpISmhkMlZ5SUh0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBdE1UdGNiaUFnZEc5d09pQXdPMXh1SUNCc1pXWjBPaUF3TzF4dUlDQnRZWEpuYVc0NklEQTdYRzRnSUhkcFpIUm9PaUF4TURBbE8xeHVJQ0JvWldsbmFIUTZJREV3TUNVN1hHNGdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hHNGdJSFpwYzJsaWFXeHBkSGs2SUdocFpHUmxianRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JseHVJQ0FtWDE5dGIyUmhiQ0I3WEc0Z0lDQWdMbk5vWVdSdmQxOXNhV2RvZEY5eVpXZDFiR0Z5S0NrN1hHNGdJQ0FnWkdsemNHeGhlVG9nWm14bGVEdGNiaUFnSUNCbWJHVjRMV1JwY21WamRHbHZiam9nWTI5c2RXMXVPMXh1SUNBZ0lHWnNaWGd0ZDNKaGNEb2dibTkzY21Gd08xeHVJQ0FnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2JpQWdJQ0I2TFdsdVpHVjRPaUF5TVR0Y2JpQWdJQ0JvWldsbmFIUTZJREV3TUNVN1hHNGdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUhkb2FYUmxPMXh1SUNBZ0lIUnlZVzV6YVhScGIyNHRaSFZ5WVhScGIyNDZJREF1TkhNN1hHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYmlBZ2ZWeHVYRzRnSUNaZlgyaGxZV1JsY2l4Y2JpQWdKbDlmYldGcGJpeGNiaUFnSmw5ZlptOXZkR1Z5SUh0Y2JpQWdJQ0IzYVdSMGFEb2dNVEF3SlR0Y2JpQWdJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0I5WEc1Y2JpQWdKbDlmYUdWaFpHVnlMRnh1SUNBbVgxOW1iMjkwWlhJZ2UxeHVJQ0FnSUdac1pYZ3RjMmh5YVc1ck9pQXdPMXh1SUNCOVhHNWNiaUFnSmw5ZmRHbDBiR1VzWEc0Z0lDWmZYMjFoYVc0c1hHNGdJQ1pmWDJadmIzUmxjaUI3WEc0Z0lDQWdjR0ZrWkdsdVp6b2dNQ0F4Tm5CNE8xeHVJQ0I5WEc1Y2JpQWdKbDlmYUdWaFpHVnlMRnh1SUNBbVgxOTBhWFJzWlNCN1hHNGdJQ0FnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQWdJSG90YVc1a1pYZzZJREU3WEc0Z0lDQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hHNGdJQ0FnYUdWcFoyaDBPaUExTW5CNE8xeHVJQ0FnSUd4cGJtVXRhR1ZwWjJoME9pQTFNbkI0TzF4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzRnSUgxY2JseHVJQ0FtWDE5MGFYUnNaU0I3WEc0Z0lDQWdabTl1ZEMxemFYcGxPaUF4Tm5CNE8xeHVJQ0FnSUdadmJuUXRkMlZwWjJoME9pQTBNREE3WEc0Z0lDQWdiV0Z5WjJsdU9pQXdJREUyY0hnN1hHNGdJQ0FnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNiaUFnSUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eU8xeHVJQ0I5WEc1Y2JpQWdKbDlmWTJ4dmMyVWdlMXh1SUNBZ0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnSUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0FnSUhSdmNEb2dOVEFsTzF4dUlDQWdJSEpwWjJoME9pQXhNbkI0TzF4dUlDQWdJSGRwWkhSb09pQXlNSEI0TzF4dUlDQWdJR2hsYVdkb2REb2dNakJ3ZUR0Y2JpQWdJQ0JzYVc1bExXaGxhV2RvZERvZ01qQndlRHRjYmlBZ0lDQmpiMnh2Y2pvZ1FHWnZkWEowYUY5MFpYaDBYMk52Ykc5eU8xeHVJQ0FnSUdadmJuUXRjMmw2WlRvZ01qQndlRHRjYmlBZ0lDQjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdYRzRnSUNBZ1kzVnljMjl5T2lCd2IybHVkR1Z5TzF4dUlDQWdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV1NndE5UQWxLVHRjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVYRzRnSUNBZ0xtOTFkR3hwYm1VdGFXTnZiaUI3WEc0Z0lDQWdJQ0J3YjNOcGRHbHZiam9nWVdKemIyeDFkR1U3WEc0Z0lDQWdJQ0I2TFdsdVpHVjRPaUF5TzF4dUlDQWdJQ0FnZEc5d09pQXdPMXh1SUNBZ0lDQWdiR1ZtZERvZ01EdGNiaUFnSUNCOVhHNWNiaUFnSUNBbU9taHZkbVZ5SUh0Y2JpQWdJQ0FnSUdOdmJHOXlPaUJBZEdocGNtUmZkR1Y0ZEY5amIyeHZjanRjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0FtWDE5dFlXbHVJSHRjYmlBZ0lDQm1iR1Y0T2lBeE8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh1SUNCOVhHNWNiaUFnSmw5ZlptOXZkR1Z5SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNiaUFnSUNCMFpYaDBMV0ZzYVdkdU9pQnlhV2RvZER0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1SUNCOVhHNWNiaUFnSmw5ZmIzWmxjbXhoZVNCN1hHNGdJQ0FnWTI5dWRHVnVkRG9nSnljN1hHNGdJQ0FnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQWdJSG90YVc1a1pYZzZJREU3WEc0Z0lDQWdkRzl3T2lBd08xeHVJQ0FnSUd4bFpuUTZJREE3WEc0Z0lDQWdkMmxrZEdnNklERXdNQ1U3WEc0Z0lDQWdhR1ZwWjJoME9pQXhNREFsTzF4dUlDQWdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJRUIzYUdsMFpUdGNiaUFnSUNCdmNHRmphWFI1T2lBd0xqRTdYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JpQWdmVnh1WEc0Z0lDWmZjblJzTEZ4dUlDQW1YMngwY2lCN1hHNGdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjaUI3WEc0Z0lDQWdJQ0FtWDNScGJua2dlMXh1SUNBZ0lDQWdJQ0IzYVdSMGFEb2dNamd3Y0hnN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZiV2x1YVNCN1hHNGdJQ0FnSUNBZ0lIZHBaSFJvT2lBME9EQndlRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5emJXRnNiQ0I3WEc0Z0lDQWdJQ0FnSUhkcFpIUm9PaUExTkRCd2VEdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdKbDl5WldkMWJHRnlJSHRjYmlBZ0lDQWdJQ0FnZDJsa2RHZzZJRFk0TUhCNE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YMjFsWkdsMWJTQjdYRzRnSUNBZ0lDQWdJSGRwWkhSb09pQTNNakJ3ZUR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXNZWEpuWlNCN1hHNGdJQ0FnSUNBZ0lIZHBaSFJvT2lBNU5qQndlRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0FtWDNKMGJDQjdYRzRnSUNBZ1ltOXlaR1Z5TFd4bFpuUTZJREZ3ZUNCemIyeHBaQ0JBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJN1hHNWNiaUFnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5SUh0Y2JpQWdJQ0FnSUNaZmRHbHVlU0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCeWFXZG9kRG9nTFRJNU1IQjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmJXbHVhU0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCeWFXZG9kRG9nTFRRNU1IQjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmMyMWhiR3dnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtbG5hSFE2SUMwMU5UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgzSmxaM1ZzWVhJZ2UxeHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJQ0FnSUNBZ0lDQWdjbWxuYUhRNklDMDJPVEJ3ZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YMjFsWkdsMWJTQjdYRzRnSUNBZ0lDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnSUNBZ0lDQWdJQ0J5YVdkb2REb2dMVGN6TUhCNE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmYkdGeVoyVWdlMXh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUNBZ0lDQWdJQ0FnY21sbmFIUTZJQzA1TnpCd2VEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQ1pmYkhSeUlIdGNiaUFnSUNCaWIzSmtaWEl0Y21sbmFIUTZJREZ3ZUNCemIyeHBaQ0JBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJN1hHNWNiaUFnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5SUh0Y2JpQWdJQ0FnSUNaZmRHbHVlU0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCc1pXWjBPaUF0TWprd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5dGFXNXBJSHRjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNBZ0lDQWdJQ0FnSUd4bFpuUTZJQzAwT1RCd2VEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FtWDNOdFlXeHNJSHRjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNBZ0lDQWdJQ0FnSUd4bFpuUTZJQzAxTlRCd2VEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FtWDNKbFozVnNZWElnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2JHVm1kRG9nTFRZNU1IQjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmJXVmthWFZ0SUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lHeGxablE2SUMwM016QndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgyeGhjbWRsSUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lHeGxablE2SUMwNU56QndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZmRIUmlMRnh1SUNBbVgySjBkQ0I3WEc0Z0lDQWdiR1ZtZERvZ01EdGNiaUFnSUNCM2FXUjBhRG9nTVRBd0pUdGNibHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHVJQ0FnSUNBZ0psOTBhVzU1SUh0Y2JpQWdJQ0FnSUNBZ2FHVnBaMmgwT2lBeU5EQndlRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5dGFXNXBJSHRjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBPaUF6TWpCd2VEdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdKbDl6YldGc2JDQjdYRzRnSUNBZ0lDQWdJR2hsYVdkb2REb2dNell3Y0hnN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZjbVZuZFd4aGNpQjdYRzRnSUNBZ0lDQWdJR2hsYVdkb2REb2dOREF3Y0hnN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZiV1ZrYVhWdElIdGNiaUFnSUNBZ0lDQWdhR1ZwWjJoME9pQTBOREJ3ZUR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXNZWEpuWlNCN1hHNGdJQ0FnSUNBZ0lHaGxhV2RvZERvZ05EZ3djSGc3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnSmw5MGRHSWdlMXh1SUNBZ0lHSnZjbVJsY2kxaWIzUjBiMjA2SURGd2VDQnpiMnhwWkNCQWNISnBiV0Z5ZVY5aWIzSmtaWEpmWTI5c2IzSTdYRzVjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNiaUFnSUNBZ0lDWmZkR2x1ZVNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBiM0E2SUMweU5UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgyMXBibWtnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHOXdPaUF0TXpNd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5emJXRnNiQ0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCMGIzQTZJQzB6TnpCd2VEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FtWDNKbFozVnNZWElnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHOXdPaUF0TkRFd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5dFpXUnBkVzBnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHOXdPaUF0TkRVd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5c1lYSm5aU0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCMGIzQTZJQzAwT1RCd2VEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQ1pmWW5SMElIdGNiaUFnSUNCMGIzQTZJR2x1YVhScFlXdzdYRzRnSUNBZ1ltOXlaR1Z5TFhSdmNEb2dNWEI0SUhOdmJHbGtJRUJ3Y21sdFlYSjVYMkp2Y21SbGNsOWpiMnh2Y2p0Y2JseHVJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWElnZTF4dUlDQWdJQ0FnSmw5MGFXNTVJSHRjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNBZ0lDQWdJQ0FnSUdKdmRIUnZiVG9nTFRJMU1IQjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmJXbHVhU0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCaWIzUjBiMjA2SUMwek16QndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgzTnRZV3hzSUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lHSnZkSFJ2YlRvZ0xUTTNNSEI0TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZjbVZuZFd4aGNpQjdYRzRnSUNBZ0lDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnSUNBZ0lDQWdJQ0JpYjNSMGIyMDZJQzAwTVRCd2VEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FtWDIxbFpHbDFiU0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCaWIzUjBiMjA2SUMwME5UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgyeGhjbWRsSUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lHSnZkSFJ2YlRvZ0xUUTVNSEI0TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0psOXZjR1Z1WldRZ2UxeHVJQ0FnSUhacGMybGlhV3hwZEhrNklIWnBjMmxpYkdVN1hHNGdJQ0FnZWkxcGJtUmxlRG9nZG1GeUtDMHRiM1YwYkdsdVpTMTZTVzVrWlhncE8xeHVYRzRnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hHNGdJQ0FnSUNCd2IzTnBkR2x2YmpvZ1ptbDRaV1E3WEc1Y2JpQWdJQ0FnSUNaZmNuUnNJSHRjYmlBZ0lDQWdJQ0FnY21sbmFIUTZJREE3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmJIUnlJSHRjYmlBZ0lDQWdJQ0FnYkdWbWREb2dNRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5MGRHSWdlMXh1SUNBZ0lDQWdJQ0IwYjNBNklEQTdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmWW5SMElIdGNiaUFnSUNBZ0lDQWdZbTkwZEc5dE9pQXdPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQ1pmYjJabWMyVjBJSHRjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNiaUFnSUNBZ0lDWmZjblJzTEZ4dUlDQWdJQ0FnSmw5c2RISWdlMXh1SUNBZ0lDQWdJQ0JvWldsbmFIUTZJR05oYkdNb01UQXdKU0F0SURSbGJTazdYRzRnSUNBZ0lDQWdJSFJ2Y0RvZ05UQWxPMXh1SUNBZ0lDQWdJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZrb0xUVXdKU2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmRIUmlMRnh1SUNBZ0lDQWdKbDlpZEhRZ2UxeHVJQ0FnSUNBZ0lDQjNhV1IwYURvZ1kyRnNZeWd4TURBbElDMGdOR1Z0S1R0Y2JpQWdJQ0FnSUNBZ2JHVm1kRG9nTlRBbE8xeHVJQ0FnSUNBZ0lDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaVmdvTFRVd0pTazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmYjNCbGJtVmtJSHRjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjaUI3WEc0Z0lDQWdJQ0FnSUNBZ0psOXlkR3dnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbWxuYUhRNklESmxiVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FtWDJ4MGNpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pXWjBPaUF5WlcwN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0psOTBkR0lnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkRzl3T2lBeVpXMDdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdKbDlpZEhRZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWW05MGRHOXRPaUF5WlcwN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnSmw5aGRYUnZJSHRjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNiaUFnSUNBZ0lDWmZjblJzTEZ4dUlDQWdJQ0FnSmw5c2RISWdlMXh1SUNBZ0lDQWdJQ0JvWldsbmFIUTZJR0YxZEc4N1hHNGdJQ0FnSUNBZ0lHMWhlQzFvWldsbmFIUTZJR05oYkdNb01UQXdKU0F0SURSbGJTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDltZFd4c0lIdGNiaUFnSUNCd1lXUmthVzVuT2lBd08xeHVJQ0I5WEc1OVhHNGlMQ0pBYVcxd2IzSjBJQ2N1TDJOdmJHOXljeWM3WEc1Y2JpNXZkWFJzYVc1bExXaGxZV1JwYm1jZ2UxeHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lIb3RhVzVrWlhnNklERTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1Y2JpQWdKbDlmWVc1amFHOXlJSHRjYmlBZ0lDQmthWE53YkdGNU9pQnViMjVsTzF4dVhHNGdJQ0FnSmpwc2FXNXJMRnh1SUNBZ0lDWTZkbWx6YVhSbFpDeGNiaUFnSUNBbU9taHZkbVZ5SUh0Y2JpQWdJQ0FnSUdOdmJHOXlPaUJBWm05MWNuUm9YM1JsZUhSZlkyOXNiM0k3WEc0Z0lDQWdJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnSmpwb2IzWmxjaUI3WEc0Z0lDQWdJQ0JqYjJ4dmNqb2dRSEJ5YVcxaGNubGZZMjlzYjNJN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0pqcG9iM1psY2lCN1hHNGdJQ0FnTG05MWRHeHBibVV0YUdWaFpHbHVaMTlmWVc1amFHOXlJSHRjYmlBZ0lDQWdJR1JwYzNCc1lYazZJR2x1YkdsdVpTMWliRzlqYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgzTjBZWEowSUh0Y2JpQWdJQ0FtT21odmRtVnlJSHRjYmlBZ0lDQWdJRzkyWlhKbWJHOTNPaUIyYVhOcFlteGxPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2lCN1hHNGdJQ0FnSUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJQ0FnSUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0FnSUNBZ2RHOXdPaUExTUNVN1hHNGdJQ0FnSUNCMGNtRnVjMlp2Y20wNklIUnlZVzV6YkdGMFpWa29MVFV3SlNrN1hHNGdJQ0FnSUNCc1pXWjBPaUF0TVdWdE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dUlpd2lRR2x0Y0c5eWRDQW5MaTkyWVhKcFlXSnNaWE1uTzF4dVFHbHRjRzl5ZENBbkxpOWpiMnh2Y25Nbk8xeHVRR2x0Y0c5eWRDQW5MaTlsYkd4cGNITnBjeWM3WEc1Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKeklIdGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJSGRwWkhSb09pQjJZWElvTFMxdmRYUnNhVzVsTFdOb1lYQjBaWEp6TFhkcFpIUm9LVHRjYmlBZ2RISmhibk5wZEdsdmJpMWtkWEpoZEdsdmJqb2dNQzR6Y3p0Y2JpQWdiM1psY21ac2IzYzZJR0YxZEc4N1hHNWNiaUFnSmw5ZmRHbDBiR1VnZTF4dUlDQWdJRzFoY21kcGJqb2dNQ0F4Tm5CNE8xeHVJQ0FnSUdobGFXZG9kRG9nTkRCd2VEdGNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dOREJ3ZUR0Y2JpQWdJQ0J3WVdSa2FXNW5PaUF3SURFMmNIZzdYRzRnSUNBZ1ltOXlaR1Z5TFdKdmRIUnZiVG9nTVhCNElITnZiR2xrSUVCd2NtbHRZWEo1WDJKdmNtUmxjbDlqYjJ4dmNqdGNiaUFnSUNCbWIyNTBMWE5wZW1VNklERTJjSGc3WEc0Z0lDQWdabTl1ZEMxM1pXbG5hSFE2SURRd01EdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQjlYRzVjYmlBZ0psOWZiV0ZwYmlCN1hHNGdJQ0FnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQWdJSG90YVc1a1pYZzZJREU3WEc0Z0lDQWdiV0Z5WjJsdU9pQXdPMXh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNGdJSDFjYmx4dUlDQW1YMTlzYVhOMExGeHVJQ0FtWDE5emRXSnFaV04wTEZ4dUlDQW1YMTlwZEdWdElIdGNiaUFnSUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJQ0FnZWkxcGJtUmxlRG9nTWp0Y2JpQWdJQ0J0WVhKbmFXNDZJREE3WEc0Z0lDQWdjR0ZrWkdsdVp6b2dNRHRjYmlBZ0lDQnNhWE4wTFhOMGVXeGxMWFI1Y0dVNklHNXZibVU3WEc0Z0lDQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNiaUFnZlZ4dVhHNGdJQ1pmWDJ4cGMzUWdlMXh1SUNBZ0lIQmhaR1JwYm1jNklEQXVOV1Z0SURBN1hHNGdJSDFjYmx4dUlDQW1YMTl6ZFdKcVpXTjBJSHRjYmlBZ0lDQndZV1JrYVc1bkxXeGxablE2SURGbGJUdGNiaUFnZlZ4dVhHNGdJQ1pmWDJsMFpXMGdlMXh1SUNBZ0lHMWhjbWRwYmpvZ01EdGNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dNekJ3ZUR0Y2JpQWdJQ0JtYjI1MExYTnBlbVU2SURFemNIZzdYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JpQWdmVnh1WEc0Z0lDWmZYM0JzWVdObGFHOXNaR1Z5SUh0Y2JpQWdJQ0J3YjNOcGRHbHZiam9nWVdKemIyeDFkR1U3WEc0Z0lDQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ0lDQjBiM0E2SURBN1hHNGdJQ0FnYkdWbWREb2dNRHRjYmlBZ0lDQjNhV1IwYURvZ01UQXdKVHRjYmlBZ0lDQm9aV2xuYUhRNklETXdjSGc3WEc0Z0lDQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dRR2h2ZG1WeVgySm5YMk52Ykc5eU8xeHVJQ0FnSUdKdmNtUmxjaTFzWldaME9pQXljSGdnYzI5c2FXUWdRSE4xWTJObGMzTmZZMjlzYjNJN1hHNGdJQ0FnZEhKaGJuTnBkR2x2Ymkxa2RYSmhkR2x2YmpvZ01DNHljenRjYmlBZ0lDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzRnSUgxY2JseHVJQ0FtWDE5aGJtTm9iM0lnZTF4dUlDQWdJQzVsYkd4cGNITnBjeWd4S1R0Y2JpQWdJQ0JrYVhOd2JHRjVPaUJpYkc5amF6dGNiaUFnSUNCd1lXUmthVzVuT2lBd0lERXVOV1Z0TzF4dVhHNGdJQ0FnSmpwc2FXNXJMRnh1SUNBZ0lDWTZkbWx6YVhSbFpDeGNiaUFnSUNBbU9taHZkbVZ5SUh0Y2JpQWdJQ0FnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUdGNiaUFnSUNBZ0lHTnZiRzl5T2lCQWMyVmpiMjVrWVhKNVgzUmxlSFJmWTI5c2IzSTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0pqcG9iM1psY2lCN1hHNGdJQ0FnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDlmWTI5a1pTQjdYRzRnSUNBZ2NHRmtaR2x1WnkxeWFXZG9kRG9nTUM0MVpXMDdYRzRnSUgxY2JseHVJQ0FtWDJGamRHbDJaU0I3WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSWdlMXh1SUNBZ0lDQWdKanBzYVc1ckxGeHVJQ0FnSUNBZ0pqcDJhWE5wZEdWa0xGeHVJQ0FnSUNBZ0pqcG9iM1psY2lCN1hHNGdJQ0FnSUNBZ0lHTnZiRzl5T2lCQWMzVmpZMlZ6YzE5amIyeHZjanRjYmlBZ0lDQWdJQ0FnWm05dWRDMTNaV2xuYUhRNklEUXdNRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0FtWDNOMGFXTnJlU3hjYmlBZ0psOW1hWGhsWkNCN1hHNGdJQ0FnWkdsemNHeGhlVG9nWm14bGVEdGNiaUFnSUNCbWJHVjRMWGR5WVhBNklHNXZkM0poY0R0Y2JpQWdJQ0JtYkdWNExXUnBjbVZqZEdsdmJqb2dZMjlzZFcxdU8xeHVJQ0FnSUhvdGFXNWtaWGc2SUhaaGNpZ3RMVzkxZEd4cGJtVXRla2x1WkdWNEtUdGNiaUFnSUNCMGIzQTZJREE3WEc0Z0lDQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibHh1SUNBZ0lDNXZkWFJzYVc1bExXTm9ZWEIwWlhKeklIdGNiaUFnSUNBZ0lDWmZYM1JwZEd4bExGeHVJQ0FnSUNBZ0psOWZiV0ZwYmlCN1hHNGdJQ0FnSUNBZ0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZlgzUnBkR3hsSUh0Y2JpQWdJQ0FnSUNBZ1pteGxlQzF6YUhKcGJtczZJREE3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZlgyMWhhVzRnZTF4dUlDQWdJQ0FnSUNCbWJHVjRPaUF4TzF4dUlDQWdJQ0FnSUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0FtWDNOMGFXTnJlU0I3WEc0Z0lDQWdjRzl6YVhScGIyNDZJSE4wYVdOcmVUdGNiaUFnSUNCdFlYZ3RhR1ZwWjJoME9pQjJZWElvTFMxdmRYUnNhVzVsTFhOMGFXTnJlUzFvWldsbmFIUXBPMXh1SUNCOVhHNWNiaUFnSmw5bWFYaGxaQ0I3WEc0Z0lDQWdjRzl6YVhScGIyNDZJR1pwZUdWa08xeHVJQ0FnSUcxaGVDMW9aV2xuYUhRNklERXdNQ1U3WEc0Z0lIMWNibHh1SUNBbVgyaHBaR1JsYmlCN1hHNGdJQ0FnWkdsemNHeGhlVG9nYm05dVpUdGNiaUFnZlZ4dVhHNGdJQ1pmWm05c1pHVmtJSHRjYmlBZ0lDQjNhV1IwYURvZ01EdGNiaUFnZlZ4dWZWeHVJaXdpTHlvcVhHNGdLaUJsYkd4cGNITnBjeTVzWlhOeklDMGc1cGFINXB5czU1eUI1NVdsSUcxcGVHbHVlQ0RsaDczbWxiQmNiaUFxSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjYmlBcUlFTnlaV0YwWldRZ1FuazZJRmxoYjJoaGFYaHBZVzljYmlBcUlGVndaR0YwWlRvZ01qQXlNaTR6TGpFeFhHNGdLaTljYmx4dUx5b2dQVDA5UFQwOUlPYVdoK2Fjck9lY2dlZVZwZVdIdmVhVnNDQTlQVDA5UFQwZ0tpOWNiaTVsYkd4cGNITnBjeUFvUUd4cGJtVnpLU0IzYUdWdUlDaEFiR2x1WlhNOU1Ta2dlMXh1SUNCM2FHbDBaUzF6Y0dGalpUb2dibTkzY21Gd08xeHVJQ0IwWlhoMExXOTJaWEptYkc5M09pQmxiR3hwY0hOcGN6dGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JseHVMbVZzYkdsd2MybHpJQ2hBYkdsdVpYTXBJSGRvWlc0Z0tFQnNhVzVsY3o0OU1pa2dlMXh1SUNBdGQyVmlhMmwwTFd4cGJtVXRZMnhoYlhBNklFQnNhVzVsY3p0Y2JpQWdaR2x6Y0d4aGVUb2dZbTk0TzF4dUlDQXRkMlZpYTJsMExXSnZlQzF2Y21sbGJuUTZJSFpsY25ScFkyRnNPMXh1SUNCMFpYaDBMVzkyWlhKbWJHOTNPaUJsYkd4cGNITnBjenRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaUlzSWk4cUlEMDlQVDA5UFQwOVBUMGdZblYwZEc5dWN5NTBhR1Z0WlNBdElPYU1pZW1TcnVXdnZPaUlxdWFndCtXOGp5QTlQVDA5UFQwOVBUMDlJQ292WEc1QWFXMXdiM0owSUNjdUwyTnZiRzl5Y3ljN1hHNUFhVzF3YjNKMElDY3VMM05vWVdSdmR5YzdYRzVjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWElnZTF4dUlDQndiM05wZEdsdmJqb2dabWw0WldRN1hHNGdJSG90YVc1a1pYZzZJRGs1T1RrNU8xeHVJQ0J0WVhKbmFXNDZJREE3WEc0Z0lIUnlZVzV6YVhScGIyNHRaSFZ5WVhScGIyNDZJREF1TTNNN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzVjYmlBZ0psOWZZblYwZEc5dUlIdGNiaUFnSUNBdWMyaGhaRzkzWDJ4cFoyaDBYM0psWjNWc1lYSW9LVHRjYmlBZ0lDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUNBZ2VpMXBibVJsZURvZ01UdGNiaUFnSUNCdFlYSm5hVzQ2SURFd2NIZzdYRzRnSUNBZ2QybGtkR2c2SURNMmNIZzdYRzRnSUNBZ2FHVnBaMmgwT2lBek5uQjRPMXh1SUNBZ0lHSnZjbVJsY2pvZ01YQjRJSE52Ykdsa0lFQndjbWx0WVhKNVgySnZjbVJsY2w5amIyeHZjanRjYmlBZ0lDQmliM0prWlhJdGNtRmthWFZ6T2lBemNIZzdYRzRnSUNBZ1ltOTRMWE5wZW1sdVp6b2dZbTl5WkdWeUxXSnZlRHRjYmlBZ0lDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQkFkMmhwZEdVN1hHNGdJQ0FnWTNWeWMyOXlPaUJ3YjJsdWRHVnlPMXh1SUNBZ0lIUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdGNiaUFnSUNCamIyeHZjam9nUUhObFkyOXVaR0Z5ZVY5MFpYaDBYMk52Ykc5eU8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1Y2JpQWdJQ0FtT21odmRtVnlJSHRjYmlBZ0lDQWdJR052Ykc5eU9pQkFjM1ZqWTJWemMxOWpiMnh2Y2p0Y2JpQWdJQ0FnSUdKdmNtUmxjaTFqYjJ4dmNqb2dRSE4xWTJObGMzTmZZMjlzYjNJN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnSmk1b2FXUmxJSHRjYmlBZ0lDQWdJR1JwYzNCc1lYazZJRzV2Ym1VN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0psOWZZVzVqYUc5eUlIdGNiaUFnSUNBbU9teHBibXNzWEc0Z0lDQWdKanAyYVhOcGRHVmtMRnh1SUNBZ0lDWTZhRzkyWlhJZ2UxeHVJQ0FnSUNBZ1kyOXNiM0k2SUVCbWIzVnlkR2hmZEdWNGRGOWpiMnh2Y2p0Y2JpQWdJQ0FnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUdGNiaUFnSUNCOVhHNWNiaUFnSUNBbU9taHZkbVZ5SUh0Y2JpQWdJQ0FnSUdOdmJHOXlPaUJBYzNWalkyVnpjMTlqYjJ4dmNqdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQW1YMTlwWTI5dUlIdGNiaUFnSUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJQ0FnZWkxcGJtUmxlRG9nTWp0Y2JpQWdJQ0IwYjNBNklEVXdKVHRjYmlBZ0lDQnNaV1owT2lBMU1DVTdYRzRnSUNBZ2QybGtkR2c2SURJd2NIZzdYRzRnSUNBZ2FHVnBaMmgwT2lBeU1IQjRPMXh1SUNBZ0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxLQzAxTUNVc0lDMDFNQ1VwTzF4dUlDQWdJR1pwYkd3NklHTjFjbkpsYm5SamIyeHZjanRjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVJQ0I5WEc1Y2JpQWdKbDloWTNScGRtVWdlMXh1SUNBZ0lDWXViM1YwYkdsdVpTMTBiMjlzWW1GeUlIdGNiaUFnSUNBZ0lDWmZYMkoxZEhSdmJpQjdYRzRnSUNBZ0lDQWdJR052Ykc5eU9pQkFkMmhwZEdVN1hHNGdJQ0FnSUNBZ0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklFQnpkV05qWlhOelgyTnZiRzl5TzF4dUlDQWdJQ0FnSUNCaWIzSmtaWEl0WTI5c2IzSTZJRUJ6ZFdOalpYTnpYMk52Ykc5eU8xeHVYRzRnSUNBZ0lDQWdJQ1k2YUc5MlpYSWdlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJHOXlPaUJBZDJocGRHVTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJZ2UxeHVJQ0FnSUNBZ0pqcHNhVzVyTEZ4dUlDQWdJQ0FnSmpwMmFYTnBkR1ZrTEZ4dUlDQWdJQ0FnSmpwb2IzWmxjaUI3WEc0Z0lDQWdJQ0FnSUdOdmJHOXlPaUJBZDJocGRHVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDl5YjNWdVpHVmtJSHRjYmlBZ0lDQW1MbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUlIdGNiaUFnSUNBZ0lHSnZjbVJsY2kxeVlXUnBkWE02SURFNGNIZzdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDlrYVhOaFlteGxaQ0I3WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSXNYRzRnSUNBZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2lCN1hHNGdJQ0FnSUNBbVgxOWhibU5vYjNJNmJHbHVheXhjYmlBZ0lDQWdJQ1pmWDJGdVkyaHZjanAyYVhOcGRHVmtMRnh1SUNBZ0lDQWdKbDlmWVc1amFHOXlPbWh2ZG1WeUxGeHVJQ0FnSUNBZ0psOWZZblYwZEc5dUlIdGNiaUFnSUNBZ0lDQWdZM1Z5YzI5eU9pQnViM1F0WVd4c2IzZGxaRHRjYmlBZ0lDQWdJQ0FnWTI5c2IzSTZJRUJtYjNWeWRHaGZkR1Y0ZEY5amIyeHZjanRjYmx4dUlDQWdJQ0FnSUNBbU9taHZkbVZ5SUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ1FHWnZkWEowYUY5MFpYaDBYMk52Ykc5eU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmWDJKMWRIUnZiaUI3WEc0Z0lDQWdJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCa2FYTmhZbXhsWkY5aVoxOWpiMnh2Y2p0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgzUjBZaXhjYmlBZ0psOWlkSFFnZTF4dUlDQWdJR3hsWm5RNklEVXdKVHRjYmlBZ0lDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaVmdvTFRVd0pTazdYRzVjYmlBZ0lDQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0Z2UxeHVJQ0FnSUNBZ1pHbHpjR3hoZVRvZ2FXNXNhVzVsTFdKc2IyTnJPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQ1pmZEhSaUlIdGNiaUFnSUNCMGIzQTZJREV5Y0hnN1hHNWNiaUFnSUNBbUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRnZTF4dUlDQWdJQ0FnZEc5d09pQXROVFp3ZUR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgySjBkQ0I3WEc0Z0lDQWdZbTkwZEc5dE9pQXhNbkI0TzF4dVhHNGdJQ0FnSmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYUdsa1pHVnVJSHRjYmlBZ0lDQWdJR0p2ZEhSdmJUb2dMVFUyY0hnN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0psOXlkR3dzWEc0Z0lDWmZiSFJ5SUh0Y2JpQWdJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZrb0xUVXdKU2s3WEc0Z0lDQWdkMmxrZEdnNklEVTJjSGc3WEc0Z0lIMWNibHh1SUNBbVgzSjBiQ0I3WEc0Z0lDQWdkRzl3T2lBMU1DVTdYRzRnSUNBZ2NtbG5hSFE2SURFeWNIZzdYRzVjYmlBZ0lDQW1MbTkxZEd4cGJtVXRkRzl2YkdKaGNsOW9hV1JrWlc0Z2UxeHVJQ0FnSUNBZ2NtbG5hSFE2SUMwNE5uQjRPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQ1pmYkhSeUlIdGNiaUFnSUNCMGIzQTZJRFV3SlR0Y2JpQWdJQ0JzWldaME9pQXhNbkI0TzF4dVhHNGdJQ0FnSmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYUdsa1pHVnVJSHRjYmlBZ0lDQWdJR3hsWm5RNklDMDRObkI0TzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZmRIUmlMRnh1SUNBbVgzSjBiQ3hjYmlBZ0psOWlkSFFzWEc0Z0lDWmZiSFJ5SUh0Y2JpQWdJQ0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNBZ0lDQWdKaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZhR2xrWkdWdUlIdGNiaUFnSUNBZ0lDQWdaR2x6Y0d4aGVUb2dibTl1WlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibjFjYmlKZGZRPT0gKi9cbiJdLCJmaWxlIjoiY3NzL2V4YW1wbGUubWluLmNzcyJ9 */ diff --git a/docs/js/docs.min.js.map b/docs/js/docs.min.js.map index 069db2ce..d3b6d8d3 100644 --- a/docs/js/docs.min.js.map +++ b/docs/js/docs.min.js.map @@ -1 +1 @@ -{"version":3,"file":"docs.min.js","sources":["../../node_modules/@yaohaixiao/subscribers.js/_subscribers.js","../../node_modules/@yaohaixiao/subscribers.js/utils/hasOwn.js","../../node_modules/@yaohaixiao/subscribers.js/_hasDirectSubscribersFor.js","../../node_modules/@yaohaixiao/subscribers.js/has.js","../../node_modules/@yaohaixiao/subscribers.js/_hasSubscribers.js","../../node_modules/@yaohaixiao/subscribers.js/emit.js","../../node_modules/@yaohaixiao/subscribers.js/utils/isTypedArray.js","../../node_modules/@yaohaixiao/subscribers.js/utils/guid.js","../../node_modules/@yaohaixiao/subscribers.js/on.js","../../node_modules/@yaohaixiao/subscribers.js/utils/isFunction.js","../../node_modules/@yaohaixiao/subscribers.js/_removeSubscriber.js","../../node_modules/@yaohaixiao/subscribers.js/off.js","../../node_modules/@yaohaixiao/subscribers.js/_removeSubscriberByToken.js","../../node_modules/@yaohaixiao/subscribers.js/subscribers.core.js","../../api/js/scroller.js","../../node_modules/@yaohaixiao/delegate.js/createEvent.js","../../node_modules/@yaohaixiao/delegate.js/isString.js","../../node_modules/@yaohaixiao/delegate.js/isElement.js","../../node_modules/@yaohaixiao/delegate.js/getListeners.js","../../node_modules/@yaohaixiao/delegate.js/enum.js","../../node_modules/@yaohaixiao/delegate.js/_off.js","../../node_modules/@yaohaixiao/delegate.js/_delete.js","../../node_modules/@yaohaixiao/delegate.js/purgeElement.js","../../node_modules/@yaohaixiao/delegate.js/isFunction.js","../../node_modules/@yaohaixiao/delegate.js/_typeof.js","../../node_modules/@yaohaixiao/delegate.js/off.js","../../node_modules/@yaohaixiao/delegate.js/matches.js","../../node_modules/@yaohaixiao/delegate.js/getParentOrHost.js","../../node_modules/@yaohaixiao/delegate.js/resolveTextNode.js","../../node_modules/@yaohaixiao/delegate.js/getTarget.js","../../node_modules/@yaohaixiao/delegate.js/on.js","../../node_modules/@yaohaixiao/delegate.js/closest.js","../../node_modules/@yaohaixiao/delegate.js/isIE.js","../../node_modules/@yaohaixiao/delegate.js/getTypes.js","../../node_modules/@yaohaixiao/delegate.js/getScroll.js","../../node_modules/@yaohaixiao/delegate.js/getPageX.js","../../node_modules/@yaohaixiao/delegate.js/getScrollLeft.js","../../node_modules/@yaohaixiao/delegate.js/getPageY.js","../../node_modules/@yaohaixiao/delegate.js/getScrollTop.js","../../node_modules/@yaohaixiao/delegate.js/getCharCode.js","../../node_modules/@yaohaixiao/delegate.js/isAppleSafari.js","../../node_modules/@yaohaixiao/delegate.js/preventDefault.js","../../node_modules/@yaohaixiao/delegate.js/stopPropagation.js","../../node_modules/@yaohaixiao/delegate.js/stopEvent.js","../../node_modules/@yaohaixiao/delegate.js/emitter.js","../../node_modules/@yaohaixiao/delegate.js/hasEvent.js","../../node_modules/@yaohaixiao/delegate.js/getPageXY.js","../../node_modules/@yaohaixiao/delegate.js/getRelatedTarget.js","../../node_modules/@yaohaixiao/delegate.js/destroy.js","../../node_modules/@yaohaixiao/delegate.js/once.js","../../node_modules/@yaohaixiao/delegate.js/focusin.js","../../node_modules/@yaohaixiao/delegate.js/focusout.js","../../node_modules/@yaohaixiao/delegate.js/trigger.js","../../node_modules/@yaohaixiao/delegate.js/stopImmediate.js","../../node_modules/@yaohaixiao/delegate.js/delegate.js","../../api/js/anchors.js","../../api/js/buttons.js","../../api/js/main.js"],"sourcesContent":["/**\n * 存储订阅者(主题和处理器的)私有对象\n * ========================================================================\n * @type {{}}\n * @private\n */\nconst _subscribers = {}\n\nexport default _subscribers\n","/**\n * 检测对象自身属性中是否具有指定的属性。\n * ========================================================================\n * @method hasOwn\n * @param {Object} obj - (必须)检测的目标对象\n * @param {String} prop - (必须)属性名\n * @returns {Boolean}\n */\nconst hasOwn = (obj, prop) => {\n const hasOwnProperty = Object.prototype.hasOwnProperty\n return obj && hasOwnProperty.call(obj, prop)\n}\n\nexport default hasOwn\n","import _subscribers from './_subscribers'\nimport hasOwn from './utils/hasOwn'\n\n/**\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\n * ========================================================================\n * @method _hasDirectSubscribersFor\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasDirectSubscribersFor = (topic) => {\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\n}\n\nexport default _hasDirectSubscribersFor\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\nimport _hasSubscribers from './_hasSubscribers'\n\n/**\n * 判断是否存在包含 topic 指定的订阅者信息\n * ========================================================================\n * @method has\n * @param {String} topic - (必须)主题名称\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\n * @returns {Boolean}\n */\nconst has = (topic, isDirect = true) => {\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\n}\n\nexport default has\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * 判断是否存在包含给定 topic 相关的订阅者信息\n * ========================================================================\n * @method _hasSubscribers\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasSubscribers = (topic) => {\n let found = _hasDirectSubscribersFor(topic)\n let position = topic.lastIndexOf('.')\n\n while (!found && position !== -1) {\n topic = topic.substring(0, position)\n position = topic.lastIndexOf('.')\n found = _hasDirectSubscribersFor(topic)\n }\n\n return found\n}\n\nexport default _hasSubscribers\n","import _subscribers from './_subscribers'\nimport has from './has'\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\nimport isTypedArray from './utils/isTypedArray'\n\n/**\n * (异步)发布订阅主题信息\n * ========================================================================\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\n * ========================================================================\n * @method emit\n * @param {String} topic - (必须)主题名称\n * @param {Object} data - (必须)数据对象\n * @param {Boolean} async - (可选) 是否异步发布\n */\nconst emit = (topic, data, async = true) => {\n const execute = (topic) => {\n if (!_hasDirectSubscribersFor(topic)) {\n return false\n }\n\n _subscribers[topic].forEach((subscriber) => {\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\n // 采用 toString() 方法转化为普通(JSON)字符串\n const message = isTypedArray(data) ? data.toString() : data\n subscriber.callback(message)\n })\n }\n const deliver = () => {\n let subscriber = topic\n let position = topic.lastIndexOf('.')\n\n while (position !== -1) {\n subscriber = subscriber.substring(0, position)\n position = subscriber.lastIndexOf('.')\n\n execute(subscriber)\n }\n\n // 执行 topic 对应的处理器\n execute(topic)\n // 执行特殊 topic:'*'(监听全部消息的发布)\n execute('*')\n }\n\n if (!has(topic)) {\n return false\n }\n\n if (async) {\n setTimeout(deliver, 10)\n } else {\n deliver()\n }\n}\n\nexport default emit\n","/**\n * 判断检测数据是否为 Typed Arrays 类型的数据\n * ========================================================================\n * @param {*} val\n * @returns {boolean}\n */\nconst isTypedArray = (val) => {\n const TYPES = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n '[object BigInt64Array]',\n '[object BigUint64Array]'\n ]\n const toString = Object.prototype.toString\n\n return TYPES.indexOf(toString.call(val)) > -1\n}\n\nexport default isTypedArray\n","/**\n * 生成唯一 id 字符串的函数\n * ========================================================================\n * @method guid\n * @param {String} [prefix] - 生成 id 的前缀字符串\n * @return {String} 返回一个表示唯一 id 的字符串\n */\nconst guid = (() => {\n let id = 0\n\n return (prefix = 'guid-') => {\n id += 1\n\n return `${prefix + id}`\n }\n})()\n\nexport default guid\n","import _subscribers from './_subscribers'\nimport isFunction from './utils/isFunction'\nimport guid from './utils/guid'\n\n/**\n * 订阅主题,并给出处理器函数\n * ========================================================================\n * @method on\n * @param {String} topic - (必须)主题名称\n * @param {Function} handler - (必须)主题的处理器函数\n * @return {String|Boolean} - 唯一的 token 字符串,例如:'guid-1'。\n */\nconst on = (topic, handler) => {\n const token = guid()\n let subject = typeof topic === 'symbol' ? topic.toString() : topic\n\n if (!isFunction(handler)) {\n return false\n }\n\n /* istanbul ignore else */\n if (!_subscribers[subject]) {\n _subscribers[subject] = []\n }\n\n _subscribers[subject].push({\n topic: subject,\n callback: handler,\n token\n })\n\n return token\n}\n\nexport default on\n","/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {Boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return Object.prototype.toString.apply(val) === '[object Function]'\n}\n\nexport default isFunction\n","import _subscribers from './_subscribers'\nimport hasOwn from './utils/hasOwn'\n\n/**\n * 删除与给定 topic 相同的订阅者信息\n * ========================================================================\n * @method _removeSubscriber\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _removeSubscriber = (topic) => {\n if (!hasOwn(_subscribers, topic)) {\n return false\n }\n\n delete _subscribers[topic]\n}\n\nexport default _removeSubscriber\n","import has from './has'\nimport _removeSubscriber from './_removeSubscriber'\nimport _removeSubscriberByToken from './_removeSubscriberByToken'\n\n/**\n * 取消订阅主题\n * ========================================================================\n * @method off\n * @param {String} topic - (必须)订阅的主题\n * @param {Function|String} [token] - (可选)订阅主题的处理器函数或者唯一 Id 值\n */\nconst off = (topic, token) => {\n if (!has(topic)) {\n return false\n }\n\n if (token) {\n _removeSubscriberByToken(token)\n } else {\n _removeSubscriber(topic)\n }\n}\n\nexport default off\n","import _subscribers from './_subscribers'\nimport _removeSubscriber from './_removeSubscriber'\n\n/**\n * 通过订阅者 token 值删除订阅者信息\n * ========================================================================\n * @method _removeSubscriberByToken\n * @param {String} token - 订阅者 token 字符串\n * @returns {boolean}\n * @private\n */\nconst _removeSubscriberByToken = (token) => {\n const keys = Object.keys(_subscribers)\n let index = -1\n\n if (!token || keys.length < 1) {\n return false\n }\n\n keys.forEach((subject) => {\n const subscriber = _subscribers[subject]\n let topic\n\n subscriber.forEach((execution, j) => {\n if (execution.callback === token || execution.token === token) {\n topic = execution.topic\n subscriber.splice(index, j)\n }\n })\n\n /* istanbul ignore else */\n if (subscriber.length < 1) {\n _removeSubscriber(topic)\n }\n })\n}\n\nexport default _removeSubscriberByToken\n","import emit from './emit'\nimport on from './on'\nimport off from './off'\n\nconst subscribers = {\n on(topic, handler) {\n return on(topic, handler)\n },\n\n emit(topic, data, async = true) {\n emit(topic, data, async)\n\n return this\n },\n\n off(topic, token) {\n off(topic, token)\n\n return this\n }\n}\n\nexport default subscribers\n","import $observer from '@yaohaixiao/subscribers.js/subscribers.core'\r\n\r\nconst $main = document.querySelector('#main')\r\nconst MIN = 0\r\nconst MAX = $main.scrollHeight\r\nlet timer = null\r\nlet playing = false\r\n\r\nconst scrollTo = (top, speed = 100) => {\r\n let scrollTop = $main.scrollTop\r\n const distance = top - scrollTop\r\n const step = Math.ceil(distance / 15)\r\n const scroll = () => {\r\n if (timer) {\r\n clearTimeout(timer)\r\n }\r\n\r\n scrollTop += step\r\n\r\n if (\r\n (scrollTop <= top && distance < 0) ||\r\n (scrollTop >= top && distance > 0)\r\n ) {\r\n scrollTop = top\r\n playing = false\r\n }\r\n\r\n $main.scrollTop = scrollTop\r\n\r\n if (!playing) {\r\n clearTimeout(timer)\r\n timer = null\r\n $observer.emit('buttons:toggle', scrollTop)\r\n return false\r\n } else {\r\n timer = setTimeout(scroll, speed)\r\n }\r\n }\r\n\r\n if (playing) {\r\n clearTimeout(timer)\r\n timer = null\r\n playing = false\r\n\r\n return false\r\n }\r\n\r\n playing = true\r\n\r\n scroll()\r\n}\r\n\r\nconst sync = () => {\r\n const Observer = new IntersectionObserver(\r\n (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.intersectionRatio > 0) {\r\n $observer.emit('sync:anchor', entry.target.getAttribute('id'))\r\n }\r\n })\r\n },\r\n {\r\n root: $main,\r\n rootMargin: '0px 0px -90% 0px'\r\n }\r\n )\r\n\r\n $main.querySelectorAll('.section__h3').forEach((section) => {\r\n Observer.observe(section)\r\n })\r\n}\r\n\r\nconst onScrollToTop = (speed) => {\r\n scrollTo(MIN, speed)\r\n}\r\nconst onScrollToBottom = (speed) => {\r\n scrollTo(MAX, speed)\r\n}\r\n\r\nconst onScrollToMethod = (method) => {\r\n const $method = document.querySelector(`#${method}`)\r\n scrollTo($method.offsetTop)\r\n}\r\n\r\nconst setup = () => {\r\n sync()\r\n\r\n $observer.on('scroll:to:top', onScrollToTop)\r\n $observer.on('scroll:to:bottom', onScrollToBottom)\r\n $observer.on('scroll:to:method', onScrollToMethod)\r\n}\r\n\r\nexport default {\r\n setup\r\n}\r\n","/**\n * 创建自定义事件(CustomerEvent)\n * ========================================================================\n * @method createEvent\n * @param {String} type - (必须)事件类型(名称)\n * @param {Object} [detail] - (可选)传递给自定义事件的数据,默认为 null\n * @param {Boolean} [bubbles] - (可选)是否支持冒泡,默认为 true\n * @param {Boolean} [cancelable] - (可选)是否可以取消,默认为 true\n * @returns {CustomEvent} - CustomerEvent 实例\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const logEvent = createEvent('log', {\n * name: 'Yao',\n * hi() {\n * console.log('hi!!!')\n * }\n * })\n *\n * const logHandler = function(evt) {\n * console.log('detail', evt.detail)\n * console.log('type', evt.type)\n * }\n *\n * $nav.addEventListener('log', logHandler)\n *\n * $nav.dispatchEvent(logEvent)\n */\nconst createEvent = (\n type,\n detail = null,\n bubbles = true,\n cancelable = true\n) => {\n return new CustomEvent(type, {\n detail: detail,\n bubbles: bubbles,\n cancelable: cancelable\n })\n}\n\nexport default createEvent\n","/**\n * 判断是否为 String 类型值\n * ========================================================================\n * @method isString\n * @param {*} val - (必须)待检测的字符串\n * @returns {Boolean}\n */\nconst isString = (val) => {\n return typeof val === 'string'\n}\n\nexport default isString\n","/**\n * 检测是否为 HTMLElement 元素节点\n * ========================================================================\n * @method isElement\n * @param {*|HTMLElement} el - (必须)待检测的数据(DOM 元素)\n * @returns {Boolean}\n */\nconst isElement = (el) => {\n return !!(el && el.nodeName && el.tagName && el.nodeType === 1)\n}\n\nexport default isElement\n","import isString from './isString'\n\n/**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @methods getListeners\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\nconst getListeners = (el, type) => {\n let listeners = el._listeners || []\n\n if (isString(type) && type) {\n listeners = listeners.filter((listener) => {\n return listener.type === type\n })\n }\n\n return listeners\n}\n\nexport default getListeners\n","export const CAPTURE_EVENTS = [\n 'focusout',\n 'blur',\n 'focusin',\n 'focus',\n 'load',\n 'unload',\n 'mouseenter',\n 'mouseleave'\n]\n","import { CAPTURE_EVENTS } from './enum'\nimport _delete from './_delete'\n\n/**\n * (私有方法)取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method _off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须)事件处理器回调函数\n * @private\n */\nconst _off = (el, type, fn) => {\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n /* istanbul ignore else */\n if (fn._delegateListener) {\n fn = fn._delegateListener\n delete fn._delegateListener\n }\n\n // 移除缓存的 _listeners 数据\n _delete(el, type, fn)\n\n el.removeEventListener(type, fn, capture)\n}\n\nexport default _off\n","/**\n * 删除 DOM 元素缓存的 _listeners 数据\n * ========================================================================\n * @method _delete\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\n * @param {String} type - 事件类型(名称)\n * @param {Function} [fn] - 事件处理器回调函数\n */\nconst _delete = function (el, type, fn) {\n const listeners = el._listeners\n let index = -1\n\n if (listeners.length < 1) {\n return false\n }\n\n // 移除缓存的 _listeners 数据\n listeners.forEach((listener, i) => {\n const handler = listener.fn\n\n if (type === listener.type) {\n index = i\n\n if (handler === fn) {\n index = i\n }\n }\n })\n\n /* istanbul ignore else */\n if (index > -1) {\n listeners.splice(index, 1)\n }\n}\n\nexport default _delete\n","import isString from './isString'\nimport isElement from './isElement'\nimport getListeners from './getListeners'\nimport _off from './_off'\n\n/**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purgeElement\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\n * @param {String|Boolean} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n */\nconst purgeElement = function (el, type, recurse = false) {\n const $element = isString(el) ? document.querySelector(el) : el\n const $children = $element.childNodes\n const listeners = getListeners($element, type)\n\n listeners.forEach((listener) => {\n _off($element, listener.type, listener.fn)\n })\n\n if (\n (recurse || type === true || arguments.length === 1) &&\n $element &&\n $children\n ) {\n $children.forEach(($child) => {\n if (isElement($child)) {\n purgeElement($child, type, recurse)\n }\n })\n }\n}\n\nexport default purgeElement\n","import _typeof from './_typeof'\n\n/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return typeof val === 'function' || _typeof(val) === '[object Function]'\n}\n\nexport default isFunction\n","/**\n * 返回检测数据调用 toString() 方法后的字符串,用以判断数据类型。\n * ========================================================================\n * @method _typeof\n * @param {*} val - (必须)待检测的数据\n * @returns {String}\n *\n * @example\n * _typeof({})\n * // => '[object Object]'\n *\n * _typeof(function(){})\n * // => '[object Function]'\n *\n * _typeof([])\n * // => '[object Array]'\n *\n * _typeof('')\n * // => '[object String]'\n *\n * _typeof(2)\n * // => '[object Number]'\n */\nconst _typeof = (val) => {\n return Object.prototype.toString.apply(val)\n}\n\nexport default _typeof\n","import purgeElement from './purgeElement'\nimport isFunction from './isFunction'\nimport _off from './_off'\n\n/**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} [fn] - (可选)事件处理器回调函数\n */\nconst off = (el, type, fn) => {\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\n if (!isFunction(fn)) {\n return purgeElement(el, type)\n }\n\n _off(el, type, fn)\n}\n\nexport default off\n","/**\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\n * ========================================================================\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\n * 标 DOM 元素是否为事件代理所期望触发的目标。\n * ========================================================================\n * @method matches\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\n * @returns {Boolean}\n */\nconst matches = (el, selector = '') => {\n const sel = selector.replace(/^>/i, '')\n\n if (!selector || !sel || !el) {\n return false\n }\n\n /* istanbul ignore else */\n if (el.matches) {\n return el.matches(sel)\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(sel)\n } else {\n return false\n }\n}\n\nexport default matches\n","/**\n * 获取 DOM 元素的父节点\n * ========================================================================\n * @method getParentOrHost\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\n * @returns {*|HTMLElement}\n */\nconst getParentOrHost = (el) => {\n return el.host && el !== document && el.host.nodeType\n ? el.host\n : el.parentNode\n}\n\nexport default getParentOrHost\n","/**\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\n * resolveTextNode() 方法则会返回实际的目标节点。\n * ========================================================================\n * @method resolveTextNode\n * @param {HTMLElement|Text} el - 要解析的节点\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\n */\nconst resolveTextNode = function (el) {\n if (el && el.nodeType === 3) {\n return el.parentNode\n }\n\n return el\n}\n\nexport default resolveTextNode\n","import resolveTextNode from './resolveTextNode'\n\n/**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\nconst getTarget = function (evt) {\n const target = evt.target\n\n return resolveTextNode(target)\n}\n\nexport default getTarget\n","import closest from './closest'\nimport off from './off'\nimport getTarget from './getTarget'\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {HTMLElement|String} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst on = (el, selector, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n const listener = function (evt) {\n const target = getTarget(evt)\n // 通过 Element.matches 方法获得点击的目标元素\n const delegateTarget = closest(target, selector, el)\n let overrideContext = context || el\n\n evt.delegateTarget = delegateTarget\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n /* istanbul ignore else */\n if (delegateTarget) {\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n selector,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default on\n","import matches from './matches'\nimport getParentOrHost from './getParentOrHost'\n\n/**\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\n * ========================================================================\n * @method closest\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)DOM 元素的选择其\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\n */\nconst closest = (el, selector, ctx, includeCTX) => {\n const context = ctx || document\n\n if (!el) {\n return null\n }\n\n do {\n /* istanbul ignore else */\n if (\n (selector != null &&\n (selector[0] === '>'\n ? el.parentNode === context && matches(el, selector)\n : matches(el, selector))) ||\n (includeCTX && el === context)\n ) {\n return el\n }\n\n /* istanbul ignore else */\n if (el === context) {\n break\n }\n\n /* jshint boss:true */\n } while ((el = getParentOrHost(el)))\n}\n\nexport default closest\n","/**\n * 检测当前浏览器是否为 IE 浏览器\n * ========================================================================\n * IE 浏览器返回 true,其它浏览器返回 false\n * ========================================================================\n * @method isIE\n * @returns {Boolean} - IE 浏览器返回 true,其它浏览器返回 false\n */\nconst isIE = () => {\n const agent = navigator.userAgent\n\n return !!agent.match(/Trident/g) || !!agent.match(/MSIE/g)\n}\n\nexport default isIE\n","import getListeners from './getListeners'\n\n/**\n * 返回已绑定的事件类型的数组(去除名称重复的事件)\n * ========================================================================\n * @method getTypes\n * @returns {Array}\n */\nconst getTypes = (el) => {\n const listeners = getListeners(el)\n const types = []\n\n listeners.forEach((listener) => {\n types.push(listener.type)\n })\n\n return [...new Set(types)]\n}\n\nexport default getTypes\n","/**\n * 获取 scrollTop 和 scrollLeft 数组数据\n * ========================================================================\n * IE 浏览器种计算 pageX 和 pageY,需要包含 scrollTop 和 scrollLeft 的值\n * ========================================================================\n * @method getScroll\n * @return {Array} - 返回滚动信息的数组 [scrollTop, scrollLeft]\n */\nconst getScroll = function () {\n const $body = document.documentElement || document.body\n let scrollXY = [0, 0]\n\n if ($body && ($body.scrollTop || $body.scrollLeft)) {\n scrollXY = [$body.scrollTop, $body.scrollLeft]\n }\n\n return scrollXY\n}\n\nexport default getScroll\n","import getScrollLeft from './getScrollLeft'\nimport isIE from './isIE'\n\n/**\n * 获取事件触发时的 pageX 值\n * ========================================================================\n * @method getPageX\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/pageX\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件触发时的 pageX 值\n */\nconst getPageX = function (evt) {\n let x = evt.pageX\n\n /* istanbul ignore else */\n if (!x && 0 !== x) {\n x = evt.clientX || 0\n\n if (isIE()) {\n x += getScrollLeft()\n }\n }\n\n return x\n}\n\nexport default getPageX\n","import getScroll from './getScroll'\n\n/**\n * 获取 scrollTop 值\n * ========================================================================\n * @method getScrollLeft\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollLeft\n * @return {Number} - 返回 scrollLeft 值\n */\nconst getScrollLeft = function () {\n return getScroll()[1]\n}\n\nexport default getScrollLeft\n","import getScrollTop from './getScrollTop'\nimport isIE from './isIE'\n\n/**\n * 获取事件触发时的 pageY 值\n * ========================================================================\n * @method getPageY\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/pageY\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件触发时的 pageY 值\n */\nconst getPageY = function (evt) {\n let y = evt.pageY\n\n /* istanbul ignore else */\n if (!y && 0 !== y) {\n y = evt.clientY || 0\n\n if (isIE()) {\n y += getScrollTop()\n }\n }\n\n return y\n}\n\nexport default getPageY\n","import getScroll from './getScroll'\n\n/**\n * 获取 scrollTop 值\n * ========================================================================\n * @method getScrollTop\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollTop\n * @return {Number} - 返回 getScrollTop 值\n */\nconst getScrollTop = function () {\n return getScroll()[0]\n}\n\nexport default getScrollTop\n","import isAppleSafari from './isAppleSafari'\n\n/**\n * 返回触发事件的 charCode\n * ========================================================================\n * @method getCharCode\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/keyCode\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/charCode\n * @param {Event} evt - Event 对象\n * @return {Number} - 返回事件的 charCode\n */\nconst getCharCode = function (evt) {\n let code = evt.keyCode || evt.charCode\n // keycodes for webkit/safari\n const webkitKeymap = {\n 63232: 38, // up\n 63233: 40, // down\n 63234: 37, // left\n 63235: 39, // right\n 63276: 33, // page up\n 63277: 34, // page down\n 25: 9 // The SHIFT-TAB (Safari provides a different key code in\n // this case, even though the shiftKey modifier is set)\n }\n\n // webkit key normalization\n if (isAppleSafari() && code in webkitKeymap) {\n code = webkitKeymap[code]\n }\n\n return code\n}\n\nexport default getCharCode\n","/**\n * 判断是否为 Apple 设备的 Safari 浏览器\n * ========================================================================\n * @method isAppleSafari\n * @returns {Boolean}\n */\nconst isAppleSafari = () => {\n const UA = navigator.userAgent\n const platforms = /Mac|iPhone|iPod|iPad/i\n const rejected = /Chrome|Android|CriOS|FxiOS|EdgiOS/i\n const expected = /Safari/i\n\n if (rejected.test(UA)) {\n return false\n }\n\n return platforms.test(UA) && expected.test(UA)\n}\n\nexport default isAppleSafari\n","/**\n * 阻止触发绑定事件 DOM 元素的默认行为\n * ========================================================================\n * @method preventDefault\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/preventDefault\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 在工作台输出:'a'\n * // 会触发事件冒泡,输出:'你点击了导航栏'\n * // 但不会切换到 href 属性的页面地址,阻止了点击链接的默认行为\n * stopEvent(evt)\n * })\n */\nconst preventDefault = function (evt) {\n evt.preventDefault()\n}\n\nexport default preventDefault\n","/**\n * 终止事件在传播过程的捕获或冒泡的事件流\n * ========================================================================\n * @method stopPropagation\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/stopPropagation\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 工作台输出:'a'\n * // 然后跳转到 href 的地址\n * // 但不会触发事件冒泡,输出:'你点击了导航栏'\n * stopPropagation(evt)\n * })\n */\nconst stopPropagation = function (evt) {\n evt.stopPropagation()\n}\n\nexport default stopPropagation\n","import stopPropagation from './stopPropagation'\nimport preventDefault from './preventDefault'\n\n/**\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\n * ========================================================================\n * @method stopEvent\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 工作台输出:'a'\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\n * stopEvent(evt)\n * })\n */\nconst stopEvent = function (evt) {\n stopPropagation(evt)\n preventDefault(evt)\n}\n\nexport default stopEvent\n","import createEvent from './createEvent'\nimport off from './off'\nimport on from './on'\nimport once from './once'\nimport focusin from './focusin'\nimport focusout from './focusout'\nimport isElement from './isElement'\nimport isString from './isString'\nimport getListeners from './getListeners'\nimport getTypes from './getTypes'\nimport hasEvent from './hasEvent'\nimport getPageX from './getPageX'\nimport getPageY from './getPageY'\nimport getPageXY from './getPageXY'\nimport getCharCode from './getCharCode'\nimport getRelatedTarget from './getRelatedTarget'\nimport getTarget from './getTarget'\nimport purgeElement from './purgeElement'\nimport destroy from './destroy'\nimport preventDefault from './preventDefault'\nimport stopPropagation from './stopPropagation'\nimport stopEvent from './stopEvent'\nimport stopImmediate from './stopImmediate'\nimport trigger from './trigger'\n\n/**\n * Emitter 类 - JavaScript 事件代理对象\n * ========================================================================\n */\nclass Emitter {\n /**\n * Emitter 构造函数\n * ========================================================================\n * @constructor\n * @param {HTMLElement|String} el - (必须)DOM 元素或其选择器\n * @returns {Emitter} - Emitter 对象\n */\n constructor(el) {\n if (isElement(el)) {\n this.$el = el\n } else {\n if (isString(el)) {\n this.$el = document.querySelector(el)\n }\n }\n\n return this\n }\n\n /**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @method getListeners\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\n getListeners(type) {\n return getListeners(this.$el, type)\n }\n\n /**\n * 返回已绑定的事件类型的数组(去除名称重复的事件)\n * ========================================================================\n * @method getTypes\n * @since 1.5.0\n * @returns {Array}\n */\n getTypes() {\n return getTypes(this.$el)\n }\n\n /**\n * 判断是否已经(指定类型的)绑定事件\n * ========================================================================\n * @method hasEvent\n * @since 1.4.0\n * @param {String} [type] - (可选)事件名称:\n * 指定 type,则判断是否绑定 type 类型事件;\n * 未指定 type,则判断是否绑定任意类型的事件;\n * @returns {Boolean}\n */\n hasEvent(type) {\n return hasEvent(this.$el, type)\n }\n\n /**\n * 获取事件触发时的 pageX 值\n * ========================================================================\n * @method getPageX\n * @see getPageX\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件触发时的 pageX 值\n */\n getPageX(evt) {\n return getPageX(evt)\n }\n\n /**\n * 获取事件触发时的 pageY 值\n * ========================================================================\n * @method getPageY\n * @see getPageY\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件触发时的 pageY 值\n */\n getPageY(evt) {\n return getPageY(evt)\n }\n\n /**\n * 获取事件触发时的 pageX 和 pageY 数组数据\n * ========================================================================\n * @method getPageXY\n * @see getPageXY\n * @param {Event} evt - (必须)Event 对象\n * @return {Array} - 返回事件触发时的数组数据:[pageX, pageY]\n */\n getPageXY(evt) {\n return getPageXY(evt)\n }\n\n /**\n * 返回触发事件的 charCode\n * ========================================================================\n * @method getCharCode\n * @see getCharCode\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件的 charCode\n */\n getCharCode(evt) {\n return getCharCode(evt)\n }\n\n /**\n * 返回触发(鼠标)事件的 relatedTarget DOM 元素。\n * ========================================================================\n * MouseEvent.relatedTarget 只读属性是鼠标事件的次要目标(如果有)。相关的鼠标事件:\n * mouseenter\n * mouseleave\n * mouseover\n * mouseout\n * dragenter\n * dragleave\n * ========================================================================\n * @method getRelatedTarget\n * @since 1.1.0\n * @see https://developer.mozilla.org/en-US/docs/web/api/mouseevent/relatedtarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 relatedTarget DOM 元素\n */\n getRelatedTarget(evt) {\n return getRelatedTarget(evt)\n }\n\n /**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @since 1.1.0\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\n getTarget(evt) {\n return getTarget(evt)\n }\n\n /**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purge\n * @param {String} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n * 元素绑定的全部事件处理器\n * @returns {Emitter} - Emitter 对象\n */\n purge(type, recurse = false) {\n purgeElement(this.$el, type, recurse)\n\n return this\n }\n\n /**\n * 销毁所有已绑定的代理事件\n * ========================================================================\n * @method destroy\n * @returns {Emitter} - Emitter 对象\n */\n destroy() {\n destroy(this.$el)\n\n return this\n }\n\n /**\n * 创建自定义事件(CustomerEvent)\n * ========================================================================\n * @method createEvent\n * @since 1.8.0\n * @see createEvent\n * @param {String} type - (必须)事件类型(名称)\n * @param {Object} [detail] - (可选)传递给自定义事件的数据,默认为 null\n * @param {Boolean} [bubbles] - (可选)是否支持冒泡,默认为 true\n * @param {Boolean} [cancelable] - (可选)是否可以取消,默认为 true\n * @returns {CustomEvent} - CustomerEvent 实例\n */\n createEvent(type, detail = null, bubbles = true, cancelable = true) {\n return createEvent(type, detail, bubbles, cancelable)\n }\n\n /**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {String} type - (必须)事件类型\n * @param {Function} [handler] - (可选)事件处理器回调函数\n * @returns {Emitter} - Emitter 对象\n */\n off(type, handler) {\n off(this.$el, type, handler)\n\n return this\n }\n\n /**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String} type - (必须)事件类型\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向:\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象;\n * 如未指定 context,则事件处理器回调函数的 this 上下文指向为 Emitter 对象;\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n on(selector, type, handler, data, context, once = false) {\n on(this.$el, selector, type, handler, data, context || this, once)\n\n return this\n }\n\n /**\n * 绑定仅触发一次的代理事件\n * ========================================================================\n * @method once\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String} type - (必须)事件类型\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @returns {Emitter} - Emitter 对象\n */\n once(selector, type, handler, data, context) {\n once(this.$el, selector, type, handler, data, context)\n\n return this\n }\n\n /**\n * 绑定 click 代理事件\n * ========================================================================\n * @method click\n * @since 1.4.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/click_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n click(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'click', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dbclick 代理事件\n * ========================================================================\n * @method dbclick\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/dblclick_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dbclick(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dbclick', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseenter 代理事件\n * ========================================================================\n * @method mouseenter\n * @since 1.4.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseenter_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseenter(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseenter', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseleave 代理事件\n * ========================================================================\n * @method mouseleave\n * @since 1.4.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseleave_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseleave(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseleave', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mousedown 代理事件\n * ========================================================================\n * @method mousedown\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mousedown_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mousedown(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mousedown', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseup 代理事件\n * ========================================================================\n * @method mouseup\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseup_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseup(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseup', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseover 代理事件\n * ========================================================================\n * @method mouseover\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseover_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseover(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseover', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mousemove 代理事件\n * ========================================================================\n * @method mousemove\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mousemove_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mousemove(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mousemove', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseout 代理事件\n * ========================================================================\n * @method mouseout\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseout_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseout(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseout', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 drag 代理事件\n * ========================================================================\n * @method drag\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/drag_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n drag(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'drag', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragend 代理事件\n * ========================================================================\n * @method dragend\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragend_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragend(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragend', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragenter 代理事件\n * ========================================================================\n * @method dragenter\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragenter_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragenter(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragenter', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragleave 代理事件\n * ========================================================================\n * @method dragleave\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragleave_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragleave(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragleave', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragover 代理事件\n * ========================================================================\n * @method dragover\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragover_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragover(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragover', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragstart 代理事件\n * ========================================================================\n * @method dragstart\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragstart_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragstart(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragstart', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 drop 代理事件\n * ========================================================================\n * @method drop\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/drop_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n drop(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'drop', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 wheel 代理事件\n * ========================================================================\n * @method wheel\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n wheel(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'wheel', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 contextmenu 代理事件\n * ========================================================================\n * @method contextmenu\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/contextmenu_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n contextmenu(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'contextmenu', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 focusin 或者 focus 代理事件\n * ========================================================================\n * @method focusin\n * @since 1.4.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/focus_event\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/focusin_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n focusin(selector, handler, data, context, once = false) {\n focusin(this.$el, selector, handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 focusout 或者 blur 代理事件\n * ========================================================================\n * @method focusout\n * @since 1.4.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/blur_event\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/focusout_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n focusout(selector, handler, data, context, once = false) {\n focusout(this.$el, selector, handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 change 代理事件\n * ========================================================================\n * @method change\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/change_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n change(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'change', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 input 代理事件\n * ========================================================================\n * @method input\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/input_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n input(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'input', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 compositionstart 代理事件\n * ========================================================================\n * @method compositionstart\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/compositionstart_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n compositionstart(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'compositionstart', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 compositionupdate 代理事件\n * ========================================================================\n * @method compositionupdate\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/compositionupdate_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n compositionupdate(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'compositionupdate', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 compositionend 代理事件\n * ========================================================================\n * @method compositionend\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/compositionend_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n compositionend(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'compositionend', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 paste 代理事件\n * ========================================================================\n * @method paste\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/paste_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n paste(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'paste', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 copy 代理事件\n * ========================================================================\n * @method copy\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/copy_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n copy(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'copy', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 cut 代理事件\n * ========================================================================\n * @method cut\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/cut_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n cut(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'cut', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 keydown 代理事件\n * ========================================================================\n * @method keydown\n * @since 1.7.0\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n keydown(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'keydown', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 keyup 代理事件\n * ========================================================================\n * @method keyup\n * @since 1.7.0\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n keyup(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'keyup', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 error 代理事件\n * ========================================================================\n * @method error\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/error_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n error(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'error', handler, data, context, once)\n\n return this\n }\n\n /**\n * 触发代理自定义事件\n * ========================================================================\n * @method trigger\n * @since 1.6.0\n * @param {String} type - (必须)事件类型\n * @param {String} selector - (必须)选择器\n * @returns {Emitter} - Emitter 对象\n */\n trigger(type, selector) {\n trigger(this.$el, type, selector)\n\n return this\n }\n\n /**\n * 阻止事件的默认行为\n * ========================================================================\n * @method preventDefault\n * @see preventDefault\n * @param {Event} evt - (必须)Event 对象\n * @returns {Emitter} - Emitter 对象\n */\n preventDefault(evt) {\n preventDefault(evt)\n\n return this\n }\n\n /**\n * 终止事件在传播过程的捕获或冒泡的事件流\n * ========================================================================\n * @method stopPropagation\n * @see stopPropagation\n * @param {Event} evt - (必须)Event 对象\n * @returns {Emitter} - Emitter 对象\n */\n stopPropagation(evt) {\n stopPropagation(evt)\n\n return this\n }\n\n /**\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\n * ========================================================================\n * @method stopEvent\n * @see stopEvent\n * @param {Event} evt - (必须)Event 对象\n * @returns {Emitter} - Emitter 对象\n */\n stopEvent(evt) {\n stopEvent(evt)\n\n return this\n }\n\n /**\n * 阻止监听同一事件的其他事件监听器被调用,并且阻止默认行为和事件冒泡。\n * ========================================================================\n * @method stopImmediate\n * @since 1.8.0\n * @see stopImmediate\n * @param {Event} evt - (必须)Event 对象\n */\n stopImmediate(evt) {\n stopImmediate(evt)\n\n return this\n }\n}\n\nexport default Emitter\n","import isString from './isString'\nimport getTypes from './getTypes'\n\n/**\n * 判断是否已经(指定类型的)绑定事件\n * ========================================================================\n * @method hasEvent\n * @param {HTMLElement} el - 要检测是否绑定事件的 DOM 元素\n * @param {String} [type] - (可选)事件名称:\n * 指定 type,则判断是否绑定 type 类型事件;\n * 未指定 type,则判断是否绑定任意类型的事件;\n * @returns {Boolean}\n */\nconst hasEvent = (el, type) => {\n const types = getTypes(el)\n let result\n\n if (types.length < 1) {\n return false\n }\n\n result = types.length > 0\n\n /* istanbul ignore else */\n if (type && isString(type)) {\n result = types.indexOf(type) > -1\n }\n\n return result\n}\n\nexport default hasEvent\n","import getPageX from './getPageX'\nimport getPageY from './getPageY'\n\n/**\n * 获取事件触发时的 pageX 和 pageY 数组数据\n * ========================================================================\n * @method getPageXY\n * @param {Event} evt - (必须)Event 对象\n * @return {Array} - 返回事件触发时的数组数据:[pageX, pageY]\n */\nconst getPageXY = function (evt) {\n return [getPageX(evt), getPageY(evt)]\n}\n\nexport default getPageXY\n","import resolveTextNode from './resolveTextNode'\n\n/**\n * 返回触发(鼠标)事件的 relatedTarget DOM 元素。\n * ========================================================================\n * MouseEvent.relatedTarget 只读属性是鼠标事件的次要目标(如果有)。相关的鼠标事件:\n * mouseenter\n * mouseleave\n * mouseover\n * mouseout\n * dragenter\n * dragleave\n * ========================================================================\n * @method getRelatedTarget\n * @see https://developer.mozilla.org/en-US/docs/web/api/mouseevent/relatedtarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 relatedTarget DOM 元素\n */\nconst getRelatedTarget = function (evt) {\n let target = evt.relatedTarget\n const type = evt.type\n\n if (!target) {\n if (type === 'mouseout') {\n target = evt.toElement\n } else if (type === 'mouseover') {\n target = evt.fromElement\n }\n }\n\n return resolveTextNode(target)\n}\n\nexport default getRelatedTarget\n","import getTypes from './getTypes'\nimport purgeElement from './purgeElement'\n\n/**\n * 销毁所有已绑定的代理事件\n * ========================================================================\n * @method destroy\n * @param {HTMLElement} el - 需要解除所有事件绑定的 DOM 元素\n * @returns {Emitter} - Emitter 对象\n */\nconst destroy = (el) => {\n const types = getTypes(el)\n\n types.forEach((type) => {\n purgeElement(el, type, true)\n })\n}\n\nexport default destroy\n","import on from './on'\n\n/**\n * 绑定只触发一次的事件\n * ========================================================================\n * @method once\n * @param {HTMLElement} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须) 事件处理器回调函数\n * @param {Object} data - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} context - (可选)事件处理器回调函数的 this 上下文指向,\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n */\nconst once = (el, selector, type, fn, data, context) => {\n on(el, selector, type, fn, data, context, true)\n}\n\nexport default once\n","import isIE from './isIE'\nimport on from './on'\n\n/**\n * 绑定 focusin 或者 focus 代理事件\n * ========================================================================\n * @method focusin\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/focus_event\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/focusin_event\n * @param {HTMLElement} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} fn - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} [once] - (可选)是否仅触发一次\n */\nconst focusin = function (el, selector, fn, data, context, once = false) {\n const FOCUSIN = isIE() ? 'focusin' : 'focus'\n\n return on(el, selector, FOCUSIN, fn, data, context, once)\n}\n\nexport default focusin\n","import isIE from './isIE'\nimport on from './on'\n\n/**\n * 绑定 focusout 或者 blur 代理事件\n * ========================================================================\n * @method focusout\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/blur_event\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/focusout_event\n * @param {HTMLElement} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} fn - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} [once] - (可选)是否仅触发一次\n */\nconst focusout = function (el, selector, fn, data, context, once = false) {\n const FOCUSOUT = isIE() ? 'focusout' : 'blur'\n\n on(el, selector, FOCUSOUT, fn, data, context, once)\n}\n\nexport default focusout\n","import createEvent from './createEvent'\n\n/**\n * 触发代理自定义事件\n * ========================================================================\n * trigger() 方法也可以用来手动触发内置的事件,例如 click, mouseenter 等事件,通常\n * 使用 trigger() 来手动触发用户自定义事件。\n *\n * 另外,选择器 selector 的匹配使用 document.querySelector() 方法,因此仅事件触发一次。\n * ========================================================================\n * @method trigger\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/CustomEvent\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/dispatchEvent\n * @param {HTMLElement} el - (必须)绑定代理事件的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {String} selector - (必须)选择器\n *\n * @example\n * const $list = document.querySelector('#list')\n * // 绑定 alert 自定义事件\n * on($list, '.item', 'alert', itemHandler)\n * on($list, '.remove', 'alert', removeHandler)\n *\n * // 触发 $list 下匹配 '.item' 元素手动触发 alert 自定义事件\n * trigger('alert', '.item')\n *\n * // 可以使用伪类选择器,更精确的匹配元素\n * trigger('alert', '.item:last-child')\n *\n * // 触发 $list 下匹配 '.remove' 元素手动触发 alert 自定义事件\n * trigger('alert', '.remove')\n * trigger('alert', '.remove:nth-child(2)')\n */\nconst trigger = (el, type, selector) => {\n let $child\n\n if (!type || !selector) {\n return false\n }\n\n $child = el.querySelector(selector)\n\n if (!$child) {\n return false\n }\n\n $child.dispatchEvent(createEvent(type))\n}\n\nexport default trigger\n","import stopEvent from './stopEvent'\n\n/**\n * 阻止监听同一事件的其他事件监听器被调用,并且阻止默认行为和事件冒泡。\n * ========================================================================\n * @method stopImmediate\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/stopImmediatePropagation\n * @param {Event} evt - (必须)Event 对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('#service')\n * const logHandler = function(evt) {\n * console.log(evt.target)\n * }\n * const styleHandler = function(evt) {\n * $nav.classList.add('checked')\n * }\n * const serviceHandler = function(evt) {\n * alert(evt.target)\n * stopImmediate(evt)\n * }\n * const removeHandler = function(evt) {\n * const $target = evt.target\n *\n * $target.parentNode.removeChild($target)\n * }\n *\n * $nav.addEventListener('click', logHandler)\n * $nav.addEventListener('click', styleHandler)\n * $service.addEventListener('click', serviceHandler)\n * $service.addEventListener('click', removeHandler)\n *\n * $nav.click()\n * // => 触发 logHandler 和 styleHandler\n *\n * $service.click()\n * // => 仅触发 serviceHandler,不会触发 removeHandler\n * // => 并且不会跳转页面,也不会冒泡到 $nav,不会触发 logHandler 和 styleHandler\n */\nconst stopImmediate = function (evt) {\n stopEvent(evt)\n evt.stopImmediatePropagation()\n}\n\nexport default stopImmediate\n","import Emitter from './emitter'\n\nconst delegate = (el) => {\n return new Emitter(el)\n}\n\nexport default delegate\n","import delegate from '@yaohaixiao/delegate.js/delegate'\r\nimport $observer from '@yaohaixiao/subscribers.js/subscribers.core'\r\n\r\nconst $aside = document.querySelector('#aside')\r\nlet $active = null\r\n\r\nconst onAnchorTrigger = function (evt) {\r\n const $target = evt.delegateTarget\r\n const id = $target.href.split('#')[1]\r\n\r\n $observer.emit('scroll:to:method', id)\r\n\r\n evt.stopPropagation()\r\n evt.preventDefault()\r\n}\r\n\r\nconst onAsyncAnchor = (id) => {\r\n const $anchor = document.querySelector(\r\n `.aside__anchor[href=\"#${id}\"]`\r\n )\r\n const $item = $anchor.parentNode\r\n\r\n if ($active) {\r\n $active.classList.remove('active')\r\n }\r\n\r\n $item.classList.add('active')\r\n $active = $item\r\n}\r\n\r\nconst setup = () => {\r\n const $emitter = delegate($aside)\r\n\r\n $observer.on('sync:anchor', onAsyncAnchor)\r\n $emitter.click('.aside__anchor', onAnchorTrigger)\r\n}\r\n\r\nexport default {\r\n setup\r\n}\r\n","import delegate from '@yaohaixiao/delegate.js/delegate'\r\nimport $observer from '@yaohaixiao/subscribers.js/subscribers.core'\r\n\r\nconst $buttons = document.querySelector('#buttons')\r\n\r\nconst toggle = (top) => {\r\n const $main = document.querySelector('#main')\r\n const MIN = 0\r\n const MAX = $main.scrollHeight\r\n const $up = $buttons.querySelector('.up')\r\n const $down = $buttons.querySelector('.down')\r\n\r\n if (top <= MIN) {\r\n $up.classList.add('hide')\r\n $down.classList.remove('hide')\r\n } else if (top >= MAX) {\r\n $down.classList.add('hide')\r\n $up.classList.remove('hide')\r\n } else if (top > MIN && top < MAX) {\r\n $up.classList.remove('hide')\r\n $down.classList.remove('hide')\r\n }\r\n}\r\n\r\nconst setup = () => {\r\n const $emitter = delegate($buttons)\r\n\r\n toggle(0)\r\n\r\n $observer.on('buttons:toggle', toggle)\r\n\r\n $emitter.click('.up', () => {\r\n $observer.emit('scroll:to:top', 50)\r\n })\r\n $emitter.click('.down', () => {\r\n $observer.emit('scroll:to:bottom', 50)\r\n })\r\n}\r\n\r\nexport default {\r\n setup\r\n}\r\n","import scroller from './scroller'\r\nimport anchors from './anchors'\r\nimport buttons from './buttons'\r\n\r\nscroller.setup()\r\nanchors.setup()\r\nbuttons.setup()\r\n"],"names":["_subscribers","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","_hasDirectSubscribersFor","topic","length","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","data","async","execute","forEach","subscriber","message","val","toString","indexOf","isTypedArray","callback","deliver","setTimeout","guid","id","prefix","on","handler","token","subject","apply","push","_removeSubscriber","off","keys","execution","j","splice","_removeSubscriberByToken","subscribers","this","$main","document","querySelector","MAX","scrollHeight","timer","playing","scrollTo","top","speed","scrollTop","distance","step","Math","ceil","scroll","clearTimeout","$observer","onScrollToTop","onScrollToBottom","onScrollToMethod","method","$method","offsetTop","scroller","Observer","IntersectionObserver","entries","entry","intersectionRatio","target","getAttribute","root","rootMargin","querySelectorAll","section","observe","sync","createEvent","type","detail","bubbles","cancelable","CustomEvent","isString","isElement","el","nodeName","tagName","nodeType","getListeners","listeners","_listeners","filter","listener","CAPTURE_EVENTS","_off","fn","capture","_delegateListener","index","i","_delete","removeEventListener","purgeElement","recurse","$element","$children","childNodes","arguments","$child","isFunction","_typeof","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","resolveTextNode","getTarget","evt","context","once","delegateTarget","ctx","includeCTX","closest","overrideContext","addEventListener","isIE","agent","navigator","userAgent","match","getTypes","types","Set","getScroll","$body","documentElement","body","scrollXY","scrollLeft","getPageX","x","pageX","clientX","getPageY","y","pageY","clientY","getCharCode","code","keyCode","charCode","webkitKeymap","UA","test","isAppleSafari","preventDefault","stopPropagation","stopEvent","Emitter","constructor","$el","hasEvent","result","getPageXY","getRelatedTarget","relatedTarget","toElement","fromElement","purge","destroy","click","dbclick","mouseenter","mouseleave","mousedown","mouseup","mouseover","mousemove","mouseout","drag","dragend","dragenter","dragleave","dragover","dragstart","drop","wheel","contextmenu","focusin","FOCUSIN","focusout","FOCUSOUT","change","input","compositionstart","compositionupdate","compositionend","paste","copy","cut","keydown","keyup","error","trigger","dispatchEvent","stopImmediate","stopImmediatePropagation","delegate","$aside","$active","onAnchorTrigger","href","split","onAsyncAnchor","$item","classList","remove","add","anchors","$emitter","$buttons","toggle","$up","$down","buttons"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54]} \ No newline at end of file +{"version":3,"file":"docs.min.js","sources":["../../node_modules/@yaohaixiao/subscribers.js/_subscribers.js","../../node_modules/@yaohaixiao/subscribers.js/utils/hasOwn.js","../../node_modules/@yaohaixiao/subscribers.js/_hasDirectSubscribersFor.js","../../node_modules/@yaohaixiao/subscribers.js/has.js","../../node_modules/@yaohaixiao/subscribers.js/_hasSubscribers.js","../../node_modules/@yaohaixiao/subscribers.js/emit.js","../../node_modules/@yaohaixiao/subscribers.js/utils/isTypedArray.js","../../node_modules/@yaohaixiao/subscribers.js/utils/guid.js","../../node_modules/@yaohaixiao/subscribers.js/on.js","../../node_modules/@yaohaixiao/subscribers.js/utils/isFunction.js","../../node_modules/@yaohaixiao/subscribers.js/_removeSubscriber.js","../../node_modules/@yaohaixiao/subscribers.js/off.js","../../node_modules/@yaohaixiao/subscribers.js/_removeSubscriberByToken.js","../../node_modules/@yaohaixiao/subscribers.js/subscribers.core.js","../../api/js/scroller.js","../../node_modules/@yaohaixiao/delegate.js/createEvent.js","../../node_modules/@yaohaixiao/delegate.js/isString.js","../../node_modules/@yaohaixiao/delegate.js/isElement.js","../../node_modules/@yaohaixiao/delegate.js/getListeners.js","../../node_modules/@yaohaixiao/delegate.js/enum.js","../../node_modules/@yaohaixiao/delegate.js/_off.js","../../node_modules/@yaohaixiao/delegate.js/_delete.js","../../node_modules/@yaohaixiao/delegate.js/purgeElement.js","../../node_modules/@yaohaixiao/delegate.js/isFunction.js","../../node_modules/@yaohaixiao/delegate.js/_typeof.js","../../node_modules/@yaohaixiao/delegate.js/off.js","../../node_modules/@yaohaixiao/delegate.js/matches.js","../../node_modules/@yaohaixiao/delegate.js/getParentOrHost.js","../../node_modules/@yaohaixiao/delegate.js/resolveTextNode.js","../../node_modules/@yaohaixiao/delegate.js/getTarget.js","../../node_modules/@yaohaixiao/delegate.js/on.js","../../node_modules/@yaohaixiao/delegate.js/closest.js","../../node_modules/@yaohaixiao/delegate.js/isIE.js","../../node_modules/@yaohaixiao/delegate.js/getTypes.js","../../node_modules/@yaohaixiao/delegate.js/getScroll.js","../../node_modules/@yaohaixiao/delegate.js/getPageX.js","../../node_modules/@yaohaixiao/delegate.js/getScrollLeft.js","../../node_modules/@yaohaixiao/delegate.js/getPageY.js","../../node_modules/@yaohaixiao/delegate.js/getScrollTop.js","../../node_modules/@yaohaixiao/delegate.js/getCharCode.js","../../node_modules/@yaohaixiao/delegate.js/isAppleSafari.js","../../node_modules/@yaohaixiao/delegate.js/preventDefault.js","../../node_modules/@yaohaixiao/delegate.js/stopPropagation.js","../../node_modules/@yaohaixiao/delegate.js/stopEvent.js","../../node_modules/@yaohaixiao/delegate.js/emitter.js","../../node_modules/@yaohaixiao/delegate.js/hasEvent.js","../../node_modules/@yaohaixiao/delegate.js/getPageXY.js","../../node_modules/@yaohaixiao/delegate.js/getRelatedTarget.js","../../node_modules/@yaohaixiao/delegate.js/destroy.js","../../node_modules/@yaohaixiao/delegate.js/once.js","../../node_modules/@yaohaixiao/delegate.js/focusin.js","../../node_modules/@yaohaixiao/delegate.js/focusout.js","../../node_modules/@yaohaixiao/delegate.js/trigger.js","../../node_modules/@yaohaixiao/delegate.js/stopImmediate.js","../../node_modules/@yaohaixiao/delegate.js/delegate.js","../../api/js/anchors.js","../../api/js/buttons.js","../../api/js/main.js"],"sourcesContent":["/**\n * 存储订阅者(主题和处理器的)私有对象\n * ========================================================================\n * @type {{}}\n * @private\n */\nconst _subscribers = {}\n\nexport default _subscribers\n","/**\n * 检测对象自身属性中是否具有指定的属性。\n * ========================================================================\n * @method hasOwn\n * @param {Object} obj - (必须)检测的目标对象\n * @param {String} prop - (必须)属性名\n * @returns {Boolean}\n */\nconst hasOwn = (obj, prop) => {\n const hasOwnProperty = Object.prototype.hasOwnProperty\n return obj && hasOwnProperty.call(obj, prop)\n}\n\nexport default hasOwn\n","import _subscribers from './_subscribers'\nimport hasOwn from './utils/hasOwn'\n\n/**\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\n * ========================================================================\n * @method _hasDirectSubscribersFor\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasDirectSubscribersFor = (topic) => {\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\n}\n\nexport default _hasDirectSubscribersFor\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\nimport _hasSubscribers from './_hasSubscribers'\n\n/**\n * 判断是否存在包含 topic 指定的订阅者信息\n * ========================================================================\n * @method has\n * @param {String} topic - (必须)主题名称\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\n * @returns {Boolean}\n */\nconst has = (topic, isDirect = true) => {\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\n}\n\nexport default has\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * 判断是否存在包含给定 topic 相关的订阅者信息\n * ========================================================================\n * @method _hasSubscribers\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasSubscribers = (topic) => {\n let found = _hasDirectSubscribersFor(topic)\n let position = topic.lastIndexOf('.')\n\n while (!found && position !== -1) {\n topic = topic.substring(0, position)\n position = topic.lastIndexOf('.')\n found = _hasDirectSubscribersFor(topic)\n }\n\n return found\n}\n\nexport default _hasSubscribers\n","import _subscribers from './_subscribers'\nimport has from './has'\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\nimport isTypedArray from './utils/isTypedArray'\n\n/**\n * (异步)发布订阅主题信息\n * ========================================================================\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\n * ========================================================================\n * @method emit\n * @param {String} topic - (必须)主题名称\n * @param {Object} data - (必须)数据对象\n * @param {Boolean} async - (可选) 是否异步发布\n */\nconst emit = (topic, data, async = true) => {\n const execute = (topic) => {\n if (!_hasDirectSubscribersFor(topic)) {\n return false\n }\n\n _subscribers[topic].forEach((subscriber) => {\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\n // 采用 toString() 方法转化为普通(JSON)字符串\n const message = isTypedArray(data) ? data.toString() : data\n subscriber.callback(message)\n })\n }\n const deliver = () => {\n let subscriber = topic\n let position = topic.lastIndexOf('.')\n\n while (position !== -1) {\n subscriber = subscriber.substring(0, position)\n position = subscriber.lastIndexOf('.')\n\n execute(subscriber)\n }\n\n // 执行 topic 对应的处理器\n execute(topic)\n // 执行特殊 topic:'*'(监听全部消息的发布)\n execute('*')\n }\n\n if (!has(topic)) {\n return false\n }\n\n if (async) {\n setTimeout(deliver, 10)\n } else {\n deliver()\n }\n}\n\nexport default emit\n","/**\n * 判断检测数据是否为 Typed Arrays 类型的数据\n * ========================================================================\n * @param {*} val\n * @returns {boolean}\n */\nconst isTypedArray = (val) => {\n const TYPES = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n '[object BigInt64Array]',\n '[object BigUint64Array]'\n ]\n const toString = Object.prototype.toString\n\n return TYPES.indexOf(toString.call(val)) > -1\n}\n\nexport default isTypedArray\n","/**\n * 生成唯一 id 字符串的函数\n * ========================================================================\n * @method guid\n * @param {String} [prefix] - 生成 id 的前缀字符串\n * @return {String} 返回一个表示唯一 id 的字符串\n */\nconst guid = (() => {\n let id = 0\n\n return (prefix = 'guid-') => {\n id += 1\n\n return `${prefix + id}`\n }\n})()\n\nexport default guid\n","import _subscribers from './_subscribers'\nimport isFunction from './utils/isFunction'\nimport guid from './utils/guid'\n\n/**\n * 订阅主题,并给出处理器函数\n * ========================================================================\n * @method on\n * @param {String} topic - (必须)主题名称\n * @param {Function} handler - (必须)主题的处理器函数\n * @return {String|Boolean} - 唯一的 token 字符串,例如:'guid-1'。\n */\nconst on = (topic, handler) => {\n const token = guid()\n let subject = typeof topic === 'symbol' ? topic.toString() : topic\n\n if (!isFunction(handler)) {\n return false\n }\n\n /* istanbul ignore else */\n if (!_subscribers[subject]) {\n _subscribers[subject] = []\n }\n\n _subscribers[subject].push({\n topic: subject,\n callback: handler,\n token\n })\n\n return token\n}\n\nexport default on\n","/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {Boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return Object.prototype.toString.apply(val) === '[object Function]'\n}\n\nexport default isFunction\n","import _subscribers from './_subscribers'\nimport hasOwn from './utils/hasOwn'\n\n/**\n * 删除与给定 topic 相同的订阅者信息\n * ========================================================================\n * @method _removeSubscriber\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _removeSubscriber = (topic) => {\n if (!hasOwn(_subscribers, topic)) {\n return false\n }\n\n delete _subscribers[topic]\n}\n\nexport default _removeSubscriber\n","import has from './has'\nimport _removeSubscriber from './_removeSubscriber'\nimport _removeSubscriberByToken from './_removeSubscriberByToken'\n\n/**\n * 取消订阅主题\n * ========================================================================\n * @method off\n * @param {String} topic - (必须)订阅的主题\n * @param {Function|String} [token] - (可选)订阅主题的处理器函数或者唯一 Id 值\n */\nconst off = (topic, token) => {\n if (!has(topic)) {\n return false\n }\n\n if (token) {\n _removeSubscriberByToken(token)\n } else {\n _removeSubscriber(topic)\n }\n}\n\nexport default off\n","import _subscribers from './_subscribers'\nimport _removeSubscriber from './_removeSubscriber'\n\n/**\n * 通过订阅者 token 值删除订阅者信息\n * ========================================================================\n * @method _removeSubscriberByToken\n * @param {String} token - 订阅者 token 字符串\n * @returns {boolean}\n * @private\n */\nconst _removeSubscriberByToken = (token) => {\n const keys = Object.keys(_subscribers)\n let index = -1\n\n if (!token || keys.length < 1) {\n return false\n }\n\n keys.forEach((subject) => {\n const subscriber = _subscribers[subject]\n let topic\n\n subscriber.forEach((execution, j) => {\n if (execution.callback === token || execution.token === token) {\n topic = execution.topic\n subscriber.splice(index, j)\n }\n })\n\n /* istanbul ignore else */\n if (subscriber.length < 1) {\n _removeSubscriber(topic)\n }\n })\n}\n\nexport default _removeSubscriberByToken\n","import emit from './emit'\nimport on from './on'\nimport off from './off'\n\nconst subscribers = {\n on(topic, handler) {\n return on(topic, handler)\n },\n\n emit(topic, data, async = true) {\n emit(topic, data, async)\n\n return this\n },\n\n off(topic, token) {\n off(topic, token)\n\n return this\n }\n}\n\nexport default subscribers\n","import $observer from '@yaohaixiao/subscribers.js/subscribers.core'\n\nconst $main = document.querySelector('#main')\nconst MIN = 0\nconst MAX = $main.scrollHeight\nlet timer = null\nlet playing = false\n\nconst scrollTo = (top, speed = 100) => {\n let scrollTop = $main.scrollTop\n const distance = top - scrollTop\n const step = Math.ceil(distance / 15)\n const scroll = () => {\n if (timer) {\n clearTimeout(timer)\n }\n\n scrollTop += step\n\n if (\n (scrollTop <= top && distance < 0) ||\n (scrollTop >= top && distance > 0)\n ) {\n scrollTop = top\n playing = false\n }\n\n $main.scrollTop = scrollTop\n\n if (!playing) {\n clearTimeout(timer)\n timer = null\n $observer.emit('buttons:toggle', scrollTop)\n return false\n } else {\n timer = setTimeout(scroll, speed)\n }\n }\n\n if (playing) {\n clearTimeout(timer)\n timer = null\n playing = false\n\n return false\n }\n\n playing = true\n\n scroll()\n}\n\nconst sync = () => {\n const Observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio > 0) {\n $observer.emit('sync:anchor', entry.target.getAttribute('id'))\n }\n })\n },\n {\n root: $main,\n rootMargin: '0px 0px -90% 0px'\n }\n )\n\n $main.querySelectorAll('.section__h3').forEach((section) => {\n Observer.observe(section)\n })\n}\n\nconst onScrollToTop = (speed) => {\n scrollTo(MIN, speed)\n}\nconst onScrollToBottom = (speed) => {\n scrollTo(MAX, speed)\n}\n\nconst onScrollToMethod = (method) => {\n const $method = document.querySelector(`#${method}`)\n scrollTo($method.offsetTop)\n}\n\nconst setup = () => {\n sync()\n\n $observer.on('scroll:to:top', onScrollToTop)\n $observer.on('scroll:to:bottom', onScrollToBottom)\n $observer.on('scroll:to:method', onScrollToMethod)\n}\n\nexport default {\n setup\n}\n","/**\n * 创建自定义事件(CustomerEvent)\n * ========================================================================\n * @method createEvent\n * @param {String} type - (必须)事件类型(名称)\n * @param {Object} [detail] - (可选)传递给自定义事件的数据,默认为 null\n * @param {Boolean} [bubbles] - (可选)是否支持冒泡,默认为 true\n * @param {Boolean} [cancelable] - (可选)是否可以取消,默认为 true\n * @returns {CustomEvent} - CustomerEvent 实例\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const logEvent = createEvent('log', {\n * name: 'Yao',\n * hi() {\n * console.log('hi!!!')\n * }\n * })\n *\n * const logHandler = function(evt) {\n * console.log('detail', evt.detail)\n * console.log('type', evt.type)\n * }\n *\n * $nav.addEventListener('log', logHandler)\n *\n * $nav.dispatchEvent(logEvent)\n */\nconst createEvent = (\n type,\n detail = null,\n bubbles = true,\n cancelable = true\n) => {\n return new CustomEvent(type, {\n detail: detail,\n bubbles: bubbles,\n cancelable: cancelable\n })\n}\n\nexport default createEvent\n","/**\n * 判断是否为 String 类型值\n * ========================================================================\n * @method isString\n * @param {*} val - (必须)待检测的字符串\n * @returns {Boolean}\n */\nconst isString = (val) => {\n return typeof val === 'string'\n}\n\nexport default isString\n","/**\n * 检测是否为 HTMLElement 元素节点\n * ========================================================================\n * @method isElement\n * @param {*|HTMLElement} el - (必须)待检测的数据(DOM 元素)\n * @returns {Boolean}\n */\nconst isElement = (el) => {\n return !!(el && el.nodeName && el.tagName && el.nodeType === 1)\n}\n\nexport default isElement\n","import isString from './isString'\n\n/**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @methods getListeners\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\nconst getListeners = (el, type) => {\n let listeners = el._listeners || []\n\n if (isString(type) && type) {\n listeners = listeners.filter((listener) => {\n return listener.type === type\n })\n }\n\n return listeners\n}\n\nexport default getListeners\n","export const CAPTURE_EVENTS = [\n 'focusout',\n 'blur',\n 'focusin',\n 'focus',\n 'load',\n 'unload',\n 'mouseenter',\n 'mouseleave'\n]\n","import { CAPTURE_EVENTS } from './enum'\nimport _delete from './_delete'\n\n/**\n * (私有方法)取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method _off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须)事件处理器回调函数\n * @private\n */\nconst _off = (el, type, fn) => {\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n /* istanbul ignore else */\n if (fn._delegateListener) {\n fn = fn._delegateListener\n delete fn._delegateListener\n }\n\n // 移除缓存的 _listeners 数据\n _delete(el, type, fn)\n\n el.removeEventListener(type, fn, capture)\n}\n\nexport default _off\n","/**\n * 删除 DOM 元素缓存的 _listeners 数据\n * ========================================================================\n * @method _delete\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\n * @param {String} type - 事件类型(名称)\n * @param {Function} [fn] - 事件处理器回调函数\n */\nconst _delete = function (el, type, fn) {\n const listeners = el._listeners\n let index = -1\n\n if (listeners.length < 1) {\n return false\n }\n\n // 移除缓存的 _listeners 数据\n listeners.forEach((listener, i) => {\n const handler = listener.fn\n\n if (type === listener.type) {\n index = i\n\n if (handler === fn) {\n index = i\n }\n }\n })\n\n /* istanbul ignore else */\n if (index > -1) {\n listeners.splice(index, 1)\n }\n}\n\nexport default _delete\n","import isString from './isString'\nimport isElement from './isElement'\nimport getListeners from './getListeners'\nimport _off from './_off'\n\n/**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purgeElement\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\n * @param {String|Boolean} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n */\nconst purgeElement = function (el, type, recurse = false) {\n const $element = isString(el) ? document.querySelector(el) : el\n const $children = $element.childNodes\n const listeners = getListeners($element, type)\n\n listeners.forEach((listener) => {\n _off($element, listener.type, listener.fn)\n })\n\n if (\n (recurse || type === true || arguments.length === 1) &&\n $element &&\n $children\n ) {\n $children.forEach(($child) => {\n if (isElement($child)) {\n purgeElement($child, type, recurse)\n }\n })\n }\n}\n\nexport default purgeElement\n","import _typeof from './_typeof'\n\n/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return typeof val === 'function' || _typeof(val) === '[object Function]'\n}\n\nexport default isFunction\n","/**\n * 返回检测数据调用 toString() 方法后的字符串,用以判断数据类型。\n * ========================================================================\n * @method _typeof\n * @param {*} val - (必须)待检测的数据\n * @returns {String}\n *\n * @example\n * _typeof({})\n * // => '[object Object]'\n *\n * _typeof(function(){})\n * // => '[object Function]'\n *\n * _typeof([])\n * // => '[object Array]'\n *\n * _typeof('')\n * // => '[object String]'\n *\n * _typeof(2)\n * // => '[object Number]'\n */\nconst _typeof = (val) => {\n return Object.prototype.toString.apply(val)\n}\n\nexport default _typeof\n","import purgeElement from './purgeElement'\nimport isFunction from './isFunction'\nimport _off from './_off'\n\n/**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} [fn] - (可选)事件处理器回调函数\n */\nconst off = (el, type, fn) => {\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\n if (!isFunction(fn)) {\n return purgeElement(el, type)\n }\n\n _off(el, type, fn)\n}\n\nexport default off\n","/**\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\n * ========================================================================\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\n * 标 DOM 元素是否为事件代理所期望触发的目标。\n * ========================================================================\n * @method matches\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\n * @returns {Boolean}\n */\nconst matches = (el, selector = '') => {\n const sel = selector.replace(/^>/i, '')\n\n if (!selector || !sel || !el) {\n return false\n }\n\n /* istanbul ignore else */\n if (el.matches) {\n return el.matches(sel)\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(sel)\n } else {\n return false\n }\n}\n\nexport default matches\n","/**\n * 获取 DOM 元素的父节点\n * ========================================================================\n * @method getParentOrHost\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\n * @returns {*|HTMLElement}\n */\nconst getParentOrHost = (el) => {\n return el.host && el !== document && el.host.nodeType\n ? el.host\n : el.parentNode\n}\n\nexport default getParentOrHost\n","/**\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\n * resolveTextNode() 方法则会返回实际的目标节点。\n * ========================================================================\n * @method resolveTextNode\n * @param {HTMLElement|Text} el - 要解析的节点\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\n */\nconst resolveTextNode = function (el) {\n if (el && el.nodeType === 3) {\n return el.parentNode\n }\n\n return el\n}\n\nexport default resolveTextNode\n","import resolveTextNode from './resolveTextNode'\n\n/**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\nconst getTarget = function (evt) {\n const target = evt.target\n\n return resolveTextNode(target)\n}\n\nexport default getTarget\n","import closest from './closest'\nimport off from './off'\nimport getTarget from './getTarget'\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {HTMLElement|String} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst on = (el, selector, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n const listener = function (evt) {\n const target = getTarget(evt)\n // 通过 Element.matches 方法获得点击的目标元素\n const delegateTarget = closest(target, selector, el)\n let overrideContext = context || el\n\n evt.delegateTarget = delegateTarget\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n /* istanbul ignore else */\n if (delegateTarget) {\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n selector,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default on\n","import matches from './matches'\nimport getParentOrHost from './getParentOrHost'\n\n/**\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\n * ========================================================================\n * @method closest\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)DOM 元素的选择其\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\n */\nconst closest = (el, selector, ctx, includeCTX) => {\n const context = ctx || document\n\n if (!el) {\n return null\n }\n\n do {\n /* istanbul ignore else */\n if (\n (selector != null &&\n (selector[0] === '>'\n ? el.parentNode === context && matches(el, selector)\n : matches(el, selector))) ||\n (includeCTX && el === context)\n ) {\n return el\n }\n\n /* istanbul ignore else */\n if (el === context) {\n break\n }\n\n /* jshint boss:true */\n } while ((el = getParentOrHost(el)))\n}\n\nexport default closest\n","/**\n * 检测当前浏览器是否为 IE 浏览器\n * ========================================================================\n * IE 浏览器返回 true,其它浏览器返回 false\n * ========================================================================\n * @method isIE\n * @returns {Boolean} - IE 浏览器返回 true,其它浏览器返回 false\n */\nconst isIE = () => {\n const agent = navigator.userAgent\n\n return !!agent.match(/Trident/g) || !!agent.match(/MSIE/g)\n}\n\nexport default isIE\n","import getListeners from './getListeners'\n\n/**\n * 返回已绑定的事件类型的数组(去除名称重复的事件)\n * ========================================================================\n * @method getTypes\n * @returns {Array}\n */\nconst getTypes = (el) => {\n const listeners = getListeners(el)\n const types = []\n\n listeners.forEach((listener) => {\n types.push(listener.type)\n })\n\n return [...new Set(types)]\n}\n\nexport default getTypes\n","/**\n * 获取 scrollTop 和 scrollLeft 数组数据\n * ========================================================================\n * IE 浏览器种计算 pageX 和 pageY,需要包含 scrollTop 和 scrollLeft 的值\n * ========================================================================\n * @method getScroll\n * @return {Array} - 返回滚动信息的数组 [scrollTop, scrollLeft]\n */\nconst getScroll = function () {\n const $body = document.documentElement || document.body\n let scrollXY = [0, 0]\n\n if ($body && ($body.scrollTop || $body.scrollLeft)) {\n scrollXY = [$body.scrollTop, $body.scrollLeft]\n }\n\n return scrollXY\n}\n\nexport default getScroll\n","import getScrollLeft from './getScrollLeft'\nimport isIE from './isIE'\n\n/**\n * 获取事件触发时的 pageX 值\n * ========================================================================\n * @method getPageX\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/pageX\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件触发时的 pageX 值\n */\nconst getPageX = function (evt) {\n let x = evt.pageX\n\n /* istanbul ignore else */\n if (!x && 0 !== x) {\n x = evt.clientX || 0\n\n if (isIE()) {\n x += getScrollLeft()\n }\n }\n\n return x\n}\n\nexport default getPageX\n","import getScroll from './getScroll'\n\n/**\n * 获取 scrollTop 值\n * ========================================================================\n * @method getScrollLeft\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollLeft\n * @return {Number} - 返回 scrollLeft 值\n */\nconst getScrollLeft = function () {\n return getScroll()[1]\n}\n\nexport default getScrollLeft\n","import getScrollTop from './getScrollTop'\nimport isIE from './isIE'\n\n/**\n * 获取事件触发时的 pageY 值\n * ========================================================================\n * @method getPageY\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent/pageY\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件触发时的 pageY 值\n */\nconst getPageY = function (evt) {\n let y = evt.pageY\n\n /* istanbul ignore else */\n if (!y && 0 !== y) {\n y = evt.clientY || 0\n\n if (isIE()) {\n y += getScrollTop()\n }\n }\n\n return y\n}\n\nexport default getPageY\n","import getScroll from './getScroll'\n\n/**\n * 获取 scrollTop 值\n * ========================================================================\n * @method getScrollTop\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollTop\n * @return {Number} - 返回 getScrollTop 值\n */\nconst getScrollTop = function () {\n return getScroll()[0]\n}\n\nexport default getScrollTop\n","import isAppleSafari from './isAppleSafari'\n\n/**\n * 返回触发事件的 charCode\n * ========================================================================\n * @method getCharCode\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/keyCode\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/KeyboardEvent/charCode\n * @param {Event} evt - Event 对象\n * @return {Number} - 返回事件的 charCode\n */\nconst getCharCode = function (evt) {\n let code = evt.keyCode || evt.charCode\n // keycodes for webkit/safari\n const webkitKeymap = {\n 63232: 38, // up\n 63233: 40, // down\n 63234: 37, // left\n 63235: 39, // right\n 63276: 33, // page up\n 63277: 34, // page down\n 25: 9 // The SHIFT-TAB (Safari provides a different key code in\n // this case, even though the shiftKey modifier is set)\n }\n\n // webkit key normalization\n if (isAppleSafari() && code in webkitKeymap) {\n code = webkitKeymap[code]\n }\n\n return code\n}\n\nexport default getCharCode\n","/**\n * 判断是否为 Apple 设备的 Safari 浏览器\n * ========================================================================\n * @method isAppleSafari\n * @returns {Boolean}\n */\nconst isAppleSafari = () => {\n const UA = navigator.userAgent\n const platforms = /Mac|iPhone|iPod|iPad/i\n const rejected = /Chrome|Android|CriOS|FxiOS|EdgiOS/i\n const expected = /Safari/i\n\n if (rejected.test(UA)) {\n return false\n }\n\n return platforms.test(UA) && expected.test(UA)\n}\n\nexport default isAppleSafari\n","/**\n * 阻止触发绑定事件 DOM 元素的默认行为\n * ========================================================================\n * @method preventDefault\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/preventDefault\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 在工作台输出:'a'\n * // 会触发事件冒泡,输出:'你点击了导航栏'\n * // 但不会切换到 href 属性的页面地址,阻止了点击链接的默认行为\n * stopEvent(evt)\n * })\n */\nconst preventDefault = function (evt) {\n evt.preventDefault()\n}\n\nexport default preventDefault\n","/**\n * 终止事件在传播过程的捕获或冒泡的事件流\n * ========================================================================\n * @method stopPropagation\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/stopPropagation\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 工作台输出:'a'\n * // 然后跳转到 href 的地址\n * // 但不会触发事件冒泡,输出:'你点击了导航栏'\n * stopPropagation(evt)\n * })\n */\nconst stopPropagation = function (evt) {\n evt.stopPropagation()\n}\n\nexport default stopPropagation\n","import stopPropagation from './stopPropagation'\nimport preventDefault from './preventDefault'\n\n/**\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\n * ========================================================================\n * @method stopEvent\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 工作台输出:'a'\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\n * stopEvent(evt)\n * })\n */\nconst stopEvent = function (evt) {\n stopPropagation(evt)\n preventDefault(evt)\n}\n\nexport default stopEvent\n","import createEvent from './createEvent'\nimport off from './off'\nimport on from './on'\nimport once from './once'\nimport focusin from './focusin'\nimport focusout from './focusout'\nimport isElement from './isElement'\nimport isString from './isString'\nimport getListeners from './getListeners'\nimport getTypes from './getTypes'\nimport hasEvent from './hasEvent'\nimport getPageX from './getPageX'\nimport getPageY from './getPageY'\nimport getPageXY from './getPageXY'\nimport getCharCode from './getCharCode'\nimport getRelatedTarget from './getRelatedTarget'\nimport getTarget from './getTarget'\nimport purgeElement from './purgeElement'\nimport destroy from './destroy'\nimport preventDefault from './preventDefault'\nimport stopPropagation from './stopPropagation'\nimport stopEvent from './stopEvent'\nimport stopImmediate from './stopImmediate'\nimport trigger from './trigger'\n\n/**\n * Emitter 类 - JavaScript 事件代理对象\n * ========================================================================\n */\nclass Emitter {\n /**\n * Emitter 构造函数\n * ========================================================================\n * @constructor\n * @param {HTMLElement|String} el - (必须)DOM 元素或其选择器\n * @returns {Emitter} - Emitter 对象\n */\n constructor(el) {\n if (isElement(el)) {\n this.$el = el\n } else {\n if (isString(el)) {\n this.$el = document.querySelector(el)\n }\n }\n\n return this\n }\n\n /**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @method getListeners\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\n getListeners(type) {\n return getListeners(this.$el, type)\n }\n\n /**\n * 返回已绑定的事件类型的数组(去除名称重复的事件)\n * ========================================================================\n * @method getTypes\n * @since 1.5.0\n * @returns {Array}\n */\n getTypes() {\n return getTypes(this.$el)\n }\n\n /**\n * 判断是否已经(指定类型的)绑定事件\n * ========================================================================\n * @method hasEvent\n * @since 1.4.0\n * @param {String} [type] - (可选)事件名称:\n * 指定 type,则判断是否绑定 type 类型事件;\n * 未指定 type,则判断是否绑定任意类型的事件;\n * @returns {Boolean}\n */\n hasEvent(type) {\n return hasEvent(this.$el, type)\n }\n\n /**\n * 获取事件触发时的 pageX 值\n * ========================================================================\n * @method getPageX\n * @see getPageX\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件触发时的 pageX 值\n */\n getPageX(evt) {\n return getPageX(evt)\n }\n\n /**\n * 获取事件触发时的 pageY 值\n * ========================================================================\n * @method getPageY\n * @see getPageY\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件触发时的 pageY 值\n */\n getPageY(evt) {\n return getPageY(evt)\n }\n\n /**\n * 获取事件触发时的 pageX 和 pageY 数组数据\n * ========================================================================\n * @method getPageXY\n * @see getPageXY\n * @param {Event} evt - (必须)Event 对象\n * @return {Array} - 返回事件触发时的数组数据:[pageX, pageY]\n */\n getPageXY(evt) {\n return getPageXY(evt)\n }\n\n /**\n * 返回触发事件的 charCode\n * ========================================================================\n * @method getCharCode\n * @see getCharCode\n * @param {Event} evt - (必须)Event 对象\n * @return {Number} - 返回事件的 charCode\n */\n getCharCode(evt) {\n return getCharCode(evt)\n }\n\n /**\n * 返回触发(鼠标)事件的 relatedTarget DOM 元素。\n * ========================================================================\n * MouseEvent.relatedTarget 只读属性是鼠标事件的次要目标(如果有)。相关的鼠标事件:\n * mouseenter\n * mouseleave\n * mouseover\n * mouseout\n * dragenter\n * dragleave\n * ========================================================================\n * @method getRelatedTarget\n * @since 1.1.0\n * @see https://developer.mozilla.org/en-US/docs/web/api/mouseevent/relatedtarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 relatedTarget DOM 元素\n */\n getRelatedTarget(evt) {\n return getRelatedTarget(evt)\n }\n\n /**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @since 1.1.0\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\n getTarget(evt) {\n return getTarget(evt)\n }\n\n /**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purge\n * @param {String} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n * 元素绑定的全部事件处理器\n * @returns {Emitter} - Emitter 对象\n */\n purge(type, recurse = false) {\n purgeElement(this.$el, type, recurse)\n\n return this\n }\n\n /**\n * 销毁所有已绑定的代理事件\n * ========================================================================\n * @method destroy\n * @returns {Emitter} - Emitter 对象\n */\n destroy() {\n destroy(this.$el)\n\n return this\n }\n\n /**\n * 创建自定义事件(CustomerEvent)\n * ========================================================================\n * @method createEvent\n * @since 1.8.0\n * @see createEvent\n * @param {String} type - (必须)事件类型(名称)\n * @param {Object} [detail] - (可选)传递给自定义事件的数据,默认为 null\n * @param {Boolean} [bubbles] - (可选)是否支持冒泡,默认为 true\n * @param {Boolean} [cancelable] - (可选)是否可以取消,默认为 true\n * @returns {CustomEvent} - CustomerEvent 实例\n */\n createEvent(type, detail = null, bubbles = true, cancelable = true) {\n return createEvent(type, detail, bubbles, cancelable)\n }\n\n /**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {String} type - (必须)事件类型\n * @param {Function} [handler] - (可选)事件处理器回调函数\n * @returns {Emitter} - Emitter 对象\n */\n off(type, handler) {\n off(this.$el, type, handler)\n\n return this\n }\n\n /**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String} type - (必须)事件类型\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向:\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象;\n * 如未指定 context,则事件处理器回调函数的 this 上下文指向为 Emitter 对象;\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n on(selector, type, handler, data, context, once = false) {\n on(this.$el, selector, type, handler, data, context || this, once)\n\n return this\n }\n\n /**\n * 绑定仅触发一次的代理事件\n * ========================================================================\n * @method once\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String} type - (必须)事件类型\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @returns {Emitter} - Emitter 对象\n */\n once(selector, type, handler, data, context) {\n once(this.$el, selector, type, handler, data, context)\n\n return this\n }\n\n /**\n * 绑定 click 代理事件\n * ========================================================================\n * @method click\n * @since 1.4.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/click_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n click(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'click', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dbclick 代理事件\n * ========================================================================\n * @method dbclick\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/dblclick_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dbclick(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dbclick', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseenter 代理事件\n * ========================================================================\n * @method mouseenter\n * @since 1.4.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseenter_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseenter(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseenter', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseleave 代理事件\n * ========================================================================\n * @method mouseleave\n * @since 1.4.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseleave_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseleave(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseleave', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mousedown 代理事件\n * ========================================================================\n * @method mousedown\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mousedown_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mousedown(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mousedown', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseup 代理事件\n * ========================================================================\n * @method mouseup\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseup_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseup(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseup', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseover 代理事件\n * ========================================================================\n * @method mouseover\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseover_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseover(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseover', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mousemove 代理事件\n * ========================================================================\n * @method mousemove\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mousemove_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mousemove(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mousemove', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 mouseout 代理事件\n * ========================================================================\n * @method mouseout\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseout_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n mouseout(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'mouseout', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 drag 代理事件\n * ========================================================================\n * @method drag\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/drag_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n drag(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'drag', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragend 代理事件\n * ========================================================================\n * @method dragend\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragend_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragend(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragend', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragenter 代理事件\n * ========================================================================\n * @method dragenter\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragenter_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragenter(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragenter', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragleave 代理事件\n * ========================================================================\n * @method dragleave\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragleave_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragleave(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragleave', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragover 代理事件\n * ========================================================================\n * @method dragover\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragover_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragover(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragover', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 dragstart 代理事件\n * ========================================================================\n * @method dragstart\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/dragstart_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n dragstart(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'dragstart', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 drop 代理事件\n * ========================================================================\n * @method drop\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/drop_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n drop(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'drop', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 wheel 代理事件\n * ========================================================================\n * @method wheel\n * @since 1.7.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n wheel(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'wheel', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 contextmenu 代理事件\n * ========================================================================\n * @method contextmenu\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/contextmenu_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n contextmenu(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'contextmenu', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 focusin 或者 focus 代理事件\n * ========================================================================\n * @method focusin\n * @since 1.4.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/focus_event\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/focusin_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n focusin(selector, handler, data, context, once = false) {\n focusin(this.$el, selector, handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 focusout 或者 blur 代理事件\n * ========================================================================\n * @method focusout\n * @since 1.4.0\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/blur_event\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/focusout_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n focusout(selector, handler, data, context, once = false) {\n focusout(this.$el, selector, handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 change 代理事件\n * ========================================================================\n * @method change\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/change_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n change(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'change', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 input 代理事件\n * ========================================================================\n * @method input\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/input_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n input(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'input', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 compositionstart 代理事件\n * ========================================================================\n * @method compositionstart\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/compositionstart_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n compositionstart(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'compositionstart', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 compositionupdate 代理事件\n * ========================================================================\n * @method compositionupdate\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/compositionupdate_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n compositionupdate(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'compositionupdate', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 compositionend 代理事件\n * ========================================================================\n * @method compositionend\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/compositionend_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n compositionend(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'compositionend', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 paste 代理事件\n * ========================================================================\n * @method paste\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/paste_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n paste(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'paste', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 copy 代理事件\n * ========================================================================\n * @method copy\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/copy_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n copy(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'copy', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 cut 代理事件\n * ========================================================================\n * @method cut\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/cut_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n cut(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'cut', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 keydown 代理事件\n * ========================================================================\n * @method keydown\n * @since 1.7.0\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n keydown(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'keydown', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 keyup 代理事件\n * ========================================================================\n * @method keyup\n * @since 1.7.0\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n keyup(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'keyup', handler, data, context, once)\n\n return this\n }\n\n /**\n * 绑定 error 代理事件\n * ========================================================================\n * @method error\n * @since 1.7.0\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/error_event\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} handler - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向\n * @param {Boolean} [once] - (可选)是否仅触发一次\n * @returns {Emitter} - Emitter 对象\n */\n error(selector, handler, data, context, once = false) {\n on(this.$el, selector, 'error', handler, data, context, once)\n\n return this\n }\n\n /**\n * 触发代理自定义事件\n * ========================================================================\n * @method trigger\n * @since 1.6.0\n * @param {String} type - (必须)事件类型\n * @param {String} selector - (必须)选择器\n * @returns {Emitter} - Emitter 对象\n */\n trigger(type, selector) {\n trigger(this.$el, type, selector)\n\n return this\n }\n\n /**\n * 阻止事件的默认行为\n * ========================================================================\n * @method preventDefault\n * @see preventDefault\n * @param {Event} evt - (必须)Event 对象\n * @returns {Emitter} - Emitter 对象\n */\n preventDefault(evt) {\n preventDefault(evt)\n\n return this\n }\n\n /**\n * 终止事件在传播过程的捕获或冒泡的事件流\n * ========================================================================\n * @method stopPropagation\n * @see stopPropagation\n * @param {Event} evt - (必须)Event 对象\n * @returns {Emitter} - Emitter 对象\n */\n stopPropagation(evt) {\n stopPropagation(evt)\n\n return this\n }\n\n /**\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\n * ========================================================================\n * @method stopEvent\n * @see stopEvent\n * @param {Event} evt - (必须)Event 对象\n * @returns {Emitter} - Emitter 对象\n */\n stopEvent(evt) {\n stopEvent(evt)\n\n return this\n }\n\n /**\n * 阻止监听同一事件的其他事件监听器被调用,并且阻止默认行为和事件冒泡。\n * ========================================================================\n * @method stopImmediate\n * @since 1.8.0\n * @see stopImmediate\n * @param {Event} evt - (必须)Event 对象\n */\n stopImmediate(evt) {\n stopImmediate(evt)\n\n return this\n }\n}\n\nexport default Emitter\n","import isString from './isString'\nimport getTypes from './getTypes'\n\n/**\n * 判断是否已经(指定类型的)绑定事件\n * ========================================================================\n * @method hasEvent\n * @param {HTMLElement} el - 要检测是否绑定事件的 DOM 元素\n * @param {String} [type] - (可选)事件名称:\n * 指定 type,则判断是否绑定 type 类型事件;\n * 未指定 type,则判断是否绑定任意类型的事件;\n * @returns {Boolean}\n */\nconst hasEvent = (el, type) => {\n const types = getTypes(el)\n let result\n\n if (types.length < 1) {\n return false\n }\n\n result = types.length > 0\n\n /* istanbul ignore else */\n if (type && isString(type)) {\n result = types.indexOf(type) > -1\n }\n\n return result\n}\n\nexport default hasEvent\n","import getPageX from './getPageX'\nimport getPageY from './getPageY'\n\n/**\n * 获取事件触发时的 pageX 和 pageY 数组数据\n * ========================================================================\n * @method getPageXY\n * @param {Event} evt - (必须)Event 对象\n * @return {Array} - 返回事件触发时的数组数据:[pageX, pageY]\n */\nconst getPageXY = function (evt) {\n return [getPageX(evt), getPageY(evt)]\n}\n\nexport default getPageXY\n","import resolveTextNode from './resolveTextNode'\n\n/**\n * 返回触发(鼠标)事件的 relatedTarget DOM 元素。\n * ========================================================================\n * MouseEvent.relatedTarget 只读属性是鼠标事件的次要目标(如果有)。相关的鼠标事件:\n * mouseenter\n * mouseleave\n * mouseover\n * mouseout\n * dragenter\n * dragleave\n * ========================================================================\n * @method getRelatedTarget\n * @see https://developer.mozilla.org/en-US/docs/web/api/mouseevent/relatedtarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 relatedTarget DOM 元素\n */\nconst getRelatedTarget = function (evt) {\n let target = evt.relatedTarget\n const type = evt.type\n\n if (!target) {\n if (type === 'mouseout') {\n target = evt.toElement\n } else if (type === 'mouseover') {\n target = evt.fromElement\n }\n }\n\n return resolveTextNode(target)\n}\n\nexport default getRelatedTarget\n","import getTypes from './getTypes'\nimport purgeElement from './purgeElement'\n\n/**\n * 销毁所有已绑定的代理事件\n * ========================================================================\n * @method destroy\n * @param {HTMLElement} el - 需要解除所有事件绑定的 DOM 元素\n * @returns {Emitter} - Emitter 对象\n */\nconst destroy = (el) => {\n const types = getTypes(el)\n\n types.forEach((type) => {\n purgeElement(el, type, true)\n })\n}\n\nexport default destroy\n","import on from './on'\n\n/**\n * 绑定只触发一次的事件\n * ========================================================================\n * @method once\n * @param {HTMLElement} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须) 事件处理器回调函数\n * @param {Object} data - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} context - (可选)事件处理器回调函数的 this 上下文指向,\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n */\nconst once = (el, selector, type, fn, data, context) => {\n on(el, selector, type, fn, data, context, true)\n}\n\nexport default once\n","import isIE from './isIE'\nimport on from './on'\n\n/**\n * 绑定 focusin 或者 focus 代理事件\n * ========================================================================\n * @method focusin\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Element/focus_event\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/focusin_event\n * @param {HTMLElement} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} fn - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} [once] - (可选)是否仅触发一次\n */\nconst focusin = function (el, selector, fn, data, context, once = false) {\n const FOCUSIN = isIE() ? 'focusin' : 'focus'\n\n return on(el, selector, FOCUSIN, fn, data, context, once)\n}\n\nexport default focusin\n","import isIE from './isIE'\nimport on from './on'\n\n/**\n * 绑定 focusout 或者 blur 代理事件\n * ========================================================================\n * @method focusout\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/blur_event\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/focusout_event\n * @param {HTMLElement} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {Function} fn - (必须) 事件处理器回调函数\n * @param {Object} [data] - (可选)传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} [once] - (可选)是否仅触发一次\n */\nconst focusout = function (el, selector, fn, data, context, once = false) {\n const FOCUSOUT = isIE() ? 'focusout' : 'blur'\n\n on(el, selector, FOCUSOUT, fn, data, context, once)\n}\n\nexport default focusout\n","import createEvent from './createEvent'\n\n/**\n * 触发代理自定义事件\n * ========================================================================\n * trigger() 方法也可以用来手动触发内置的事件,例如 click, mouseenter 等事件,通常\n * 使用 trigger() 来手动触发用户自定义事件。\n *\n * 另外,选择器 selector 的匹配使用 document.querySelector() 方法,因此仅事件触发一次。\n * ========================================================================\n * @method trigger\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/CustomEvent\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/dispatchEvent\n * @param {HTMLElement} el - (必须)绑定代理事件的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {String} selector - (必须)选择器\n *\n * @example\n * const $list = document.querySelector('#list')\n * // 绑定 alert 自定义事件\n * on($list, '.item', 'alert', itemHandler)\n * on($list, '.remove', 'alert', removeHandler)\n *\n * // 触发 $list 下匹配 '.item' 元素手动触发 alert 自定义事件\n * trigger('alert', '.item')\n *\n * // 可以使用伪类选择器,更精确的匹配元素\n * trigger('alert', '.item:last-child')\n *\n * // 触发 $list 下匹配 '.remove' 元素手动触发 alert 自定义事件\n * trigger('alert', '.remove')\n * trigger('alert', '.remove:nth-child(2)')\n */\nconst trigger = (el, type, selector) => {\n let $child\n\n if (!type || !selector) {\n return false\n }\n\n $child = el.querySelector(selector)\n\n if (!$child) {\n return false\n }\n\n $child.dispatchEvent(createEvent(type))\n}\n\nexport default trigger\n","import stopEvent from './stopEvent'\n\n/**\n * 阻止监听同一事件的其他事件监听器被调用,并且阻止默认行为和事件冒泡。\n * ========================================================================\n * @method stopImmediate\n * @see https://developer.mozilla.org/zh-CN/docs/Web/API/Event/stopImmediatePropagation\n * @param {Event} evt - (必须)Event 对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('#service')\n * const logHandler = function(evt) {\n * console.log(evt.target)\n * }\n * const styleHandler = function(evt) {\n * $nav.classList.add('checked')\n * }\n * const serviceHandler = function(evt) {\n * alert(evt.target)\n * stopImmediate(evt)\n * }\n * const removeHandler = function(evt) {\n * const $target = evt.target\n *\n * $target.parentNode.removeChild($target)\n * }\n *\n * $nav.addEventListener('click', logHandler)\n * $nav.addEventListener('click', styleHandler)\n * $service.addEventListener('click', serviceHandler)\n * $service.addEventListener('click', removeHandler)\n *\n * $nav.click()\n * // => 触发 logHandler 和 styleHandler\n *\n * $service.click()\n * // => 仅触发 serviceHandler,不会触发 removeHandler\n * // => 并且不会跳转页面,也不会冒泡到 $nav,不会触发 logHandler 和 styleHandler\n */\nconst stopImmediate = function (evt) {\n stopEvent(evt)\n evt.stopImmediatePropagation()\n}\n\nexport default stopImmediate\n","import Emitter from './emitter'\n\nconst delegate = (el) => {\n return new Emitter(el)\n}\n\nexport default delegate\n","import delegate from '@yaohaixiao/delegate.js/delegate'\nimport $observer from '@yaohaixiao/subscribers.js/subscribers.core'\n\nconst $aside = document.querySelector('#aside')\nlet $active = null\n\nconst onAnchorTrigger = function (evt) {\n const $target = evt.delegateTarget\n const id = $target.href.split('#')[1]\n\n $observer.emit('scroll:to:method', id)\n\n evt.stopPropagation()\n evt.preventDefault()\n}\n\nconst onAsyncAnchor = (id) => {\n const $anchor = document.querySelector(\n `.aside__anchor[href=\"#${id}\"]`\n )\n const $item = $anchor.parentNode\n\n if ($active) {\n $active.classList.remove('active')\n }\n\n $item.classList.add('active')\n $active = $item\n}\n\nconst setup = () => {\n const $emitter = delegate($aside)\n\n $observer.on('sync:anchor', onAsyncAnchor)\n $emitter.click('.aside__anchor', onAnchorTrigger)\n}\n\nexport default {\n setup\n}\n","import delegate from '@yaohaixiao/delegate.js/delegate'\nimport $observer from '@yaohaixiao/subscribers.js/subscribers.core'\n\nconst $buttons = document.querySelector('#buttons')\n\nconst toggle = (top) => {\n const $main = document.querySelector('#main')\n const MIN = 0\n const MAX = $main.scrollHeight\n const $up = $buttons.querySelector('.up')\n const $down = $buttons.querySelector('.down')\n\n if (top <= MIN) {\n $up.classList.add('hide')\n $down.classList.remove('hide')\n } else if (top >= MAX) {\n $down.classList.add('hide')\n $up.classList.remove('hide')\n } else if (top > MIN && top < MAX) {\n $up.classList.remove('hide')\n $down.classList.remove('hide')\n }\n}\n\nconst setup = () => {\n const $emitter = delegate($buttons)\n\n toggle(0)\n\n $observer.on('buttons:toggle', toggle)\n\n $emitter.click('.up', () => {\n $observer.emit('scroll:to:top', 50)\n })\n $emitter.click('.down', () => {\n $observer.emit('scroll:to:bottom', 50)\n })\n}\n\nexport default {\n setup\n}\n","import scroller from './scroller'\nimport anchors from './anchors'\nimport buttons from './buttons'\n\nscroller.setup()\nanchors.setup()\nbuttons.setup()\n"],"names":["_subscribers","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","_hasDirectSubscribersFor","topic","length","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","data","async","execute","forEach","subscriber","message","val","toString","indexOf","isTypedArray","callback","deliver","setTimeout","guid","id","prefix","on","handler","token","subject","apply","push","_removeSubscriber","off","keys","execution","j","splice","_removeSubscriberByToken","subscribers","this","$main","document","querySelector","MAX","scrollHeight","timer","playing","scrollTo","top","speed","scrollTop","distance","step","Math","ceil","scroll","clearTimeout","$observer","onScrollToTop","onScrollToBottom","onScrollToMethod","method","$method","offsetTop","scroller","Observer","IntersectionObserver","entries","entry","intersectionRatio","target","getAttribute","root","rootMargin","querySelectorAll","section","observe","sync","createEvent","type","detail","bubbles","cancelable","CustomEvent","isString","isElement","el","nodeName","tagName","nodeType","getListeners","listeners","_listeners","filter","listener","CAPTURE_EVENTS","_off","fn","capture","_delegateListener","index","i","_delete","removeEventListener","purgeElement","recurse","$element","$children","childNodes","arguments","$child","isFunction","_typeof","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","resolveTextNode","getTarget","evt","context","once","delegateTarget","ctx","includeCTX","closest","overrideContext","addEventListener","isIE","agent","navigator","userAgent","match","getTypes","types","Set","getScroll","$body","documentElement","body","scrollXY","scrollLeft","getPageX","x","pageX","clientX","getPageY","y","pageY","clientY","getCharCode","code","keyCode","charCode","webkitKeymap","UA","test","isAppleSafari","preventDefault","stopPropagation","stopEvent","Emitter","constructor","$el","hasEvent","result","getPageXY","getRelatedTarget","relatedTarget","toElement","fromElement","purge","destroy","click","dbclick","mouseenter","mouseleave","mousedown","mouseup","mouseover","mousemove","mouseout","drag","dragend","dragenter","dragleave","dragover","dragstart","drop","wheel","contextmenu","focusin","FOCUSIN","focusout","FOCUSOUT","change","input","compositionstart","compositionupdate","compositionend","paste","copy","cut","keydown","keyup","error","trigger","dispatchEvent","stopImmediate","stopImmediatePropagation","delegate","$aside","$active","onAnchorTrigger","href","split","onAsyncAnchor","$item","classList","remove","add","anchors","$emitter","$buttons","toggle","$up","$down","buttons"],"mappings":"yBAMA,MAAMA,EAAe,CAAA,ECEfC,EAAS,CAACC,EAAKC,KACnB,MAAMC,EAAiBC,OAAOC,UAAUF,eACxC,OAAOF,GAAOE,EAAeG,KAAKL,EAAKC,EAAI,ECAvCK,EAA4BC,GACzBR,EAAOD,EAAcS,IAAUT,EAAaS,GAAOC,OAAS,ECA/DC,EAAM,CAACF,EAAOG,GAAW,IACtBA,EAAWJ,EAAyBC,GCHrB,CAACA,IACvB,IAAII,EAAQL,EAAyBC,GACjCK,EAAWL,EAAMM,YAAY,KAEjC,MAAQF,IAAuB,IAAdC,GAEfA,GADAL,EAAQA,EAAMO,UAAU,EAAGF,IACVC,YAAY,KAC7BF,EAAQL,EAAyBC,GAGnC,OAAOI,GDP6CI,CAAgBR,GEGhES,EAAO,CAACT,EAAOU,EAAMC,GAAQ,KACjC,MAAMC,EAAWZ,IACf,IAAKD,EAAyBC,GAC5B,OAAO,EAGTT,EAAaS,GAAOa,SAASC,IAG3B,MAAMC,EClBS,CAACC,IACpB,MAaMC,EAAWrB,OAAOC,UAAUoB,SAElC,MAfc,CACZ,qBACA,sBACA,6BACA,sBACA,uBACA,sBACA,uBACA,wBACA,wBACA,yBACA,2BAIWC,QAAQD,EAASnB,KAAKkB,KAAS,GDExBG,CAAaT,GAAQA,EAAKO,WAAaP,EACvDI,EAAWM,SAASL,EAAQ,GAC5B,EAEEM,EAAU,KACd,IAAIP,EAAad,EACbK,EAAWL,EAAMM,YAAY,KAEjC,MAAqB,IAAdD,GACLS,EAAaA,EAAWP,UAAU,EAAGF,GACrCA,EAAWS,EAAWR,YAAY,KAElCM,EAAQE,GAIVF,EAAQZ,GAERY,EAAQ,IAAI,EAGd,IAAKV,EAAIF,GACP,OAAO,EAGLW,EACFW,WAAWD,EAAS,IAEpBA,GACD,EE9CGE,EAAO,MACX,IAAIC,EAAK,EAET,MAAO,CAACC,EAAS,WACfD,GAAM,EAEC,GAAGC,EAASD,IAEtB,EARY,GCKPE,EAAK,CAAC1B,EAAO2B,KACjB,MAAMC,EAAQL,IACd,IAAIM,EAA2B,iBAAV7B,EAAqBA,EAAMiB,WAAajB,EAE7D,OCTkBgB,EDSFW,ECRgC,sBAAzC/B,OAAOC,UAAUoB,SAASa,MAAMd,KDalCzB,EAAasC,KAChBtC,EAAasC,GAAW,IAG1BtC,EAAasC,GAASE,KAAK,CACzB/B,MAAO6B,EACPT,SAAUO,EACVC,UAGKA,GCxBU,IAACZ,CDwBXY,EErBHI,EAAqBhC,IACzB,IAAKR,EAAOD,EAAcS,GACxB,OAAO,SAGFT,EAAaS,EAAM,ECJtBiC,EAAM,CAACjC,EAAO4B,KAClB,IAAK1B,EAAIF,GACP,OAAO,EAGL4B,ECL2B,CAACA,IAChC,MAAMM,EAAOtC,OAAOsC,KAAK3C,GAGzB,IAAKqC,GAASM,EAAKjC,OAAS,EAC1B,OAAO,EAGTiC,EAAKrB,SAASgB,IACZ,MAAMf,EAAavB,EAAasC,GAChC,IAAI7B,EAEJc,EAAWD,SAAQ,CAACsB,EAAWC,KACzBD,EAAUf,WAAaQ,GAASO,EAAUP,QAAUA,IACtD5B,EAAQmC,EAAUnC,MAClBc,EAAWuB,QAbL,EAamBD,GAC1B,IAICtB,EAAWb,OAAS,GACtB+B,EAAkBhC,EACnB,GACD,EDjBAsC,CAAyBV,GAEzBI,EAAkBhC,EACnB,EEhBGuC,EAAc,CAClBb,GAAE,CAAC1B,EAAO2B,IACDD,EAAG1B,EAAO2B,GAGnBlB,KAAKT,EAAOU,EAAMC,GAAQ,GAGxB,OAFAF,EAAKT,EAAOU,EAAMC,GAEX6B,IACR,EAEDP,IAAIjC,EAAO4B,GAGT,OAFAK,EAAIjC,EAAO4B,GAEJY,IACR,GCjBGC,EAAQC,SAASC,cAAc,SAE/BC,EAAMH,EAAMI,aAClB,IAAIC,EAAQ,KACRC,GAAU,EAEd,MAAMC,EAAW,CAACC,EAAKC,EAAQ,OAC7B,IAAIC,EAAYV,EAAMU,UACtB,MAAMC,EAAWH,EAAME,EACjBE,EAAOC,KAAKC,KAAKH,EAAW,IAC5BI,EAAS,KAiBb,GAhBIV,GACFW,aAAaX,GAGfK,GAAaE,GAGVF,GAAaF,GAAOG,EAAW,GAC/BD,GAAaF,GAAOG,EAAW,KAEhCD,EAAYF,EACZF,GAAU,GAGZN,EAAMU,UAAYA,GAEbJ,EAIH,OAHAU,aAAaX,GACbA,EAAQ,KACRY,EAAUjD,KAAK,iBAAkB0C,IAC1B,EAEPL,EAAQxB,WAAWkC,EAAQN,EAC5B,EAGH,GAAIH,EAKF,OAJAU,aAAaX,GACbA,EAAQ,KACRC,GAAU,GAEH,EAGTA,GAAU,EAEVS,GAAQ,EAuBJG,EAAiBT,IACrBF,EAtEU,EAsEIE,EAAM,EAEhBU,EAAoBV,IACxBF,EAASJ,EAAKM,EAAM,EAGhBW,EAAoBC,IACxB,MAAMC,EAAUrB,SAASC,cAAc,IAAImB,KAC3Cd,EAASe,EAAQC,UAAU,EAWd,IAAAC,EARD,KAhCD,MACX,MAAMC,EAAW,IAAIC,sBAClBC,IACCA,EAAQvD,SAASwD,IACXA,EAAMC,kBAAoB,GAC5BZ,EAAUjD,KAAK,cAAe4D,EAAME,OAAOC,aAAa,MACzD,GACD,GAEJ,CACEC,KAAMhC,EACNiC,WAAY,qBAIhBjC,EAAMkC,iBAAiB,gBAAgB9D,SAAS+D,IAC9CV,EAASW,QAAQD,EAAQ,GACzB,EAgBFE,GAEApB,EAAUhC,GAAG,gBAAiBiC,GAC9BD,EAAUhC,GAAG,mBAAoBkC,GACjCF,EAAUhC,GAAG,mBAAoBmC,EAAiB,ECxDpD,MAAMkB,EAAc,CAClBC,EACAC,EAAS,KACTC,GAAU,EACVC,GAAa,IAEN,IAAIC,YAAYJ,EAAM,CAC3BC,OAAQA,EACRC,QAASA,EACTC,WAAYA,ICnCVE,EAAYrE,GACM,iBAARA,ECDVsE,EAAaC,MACPA,GAAMA,EAAGC,UAAYD,EAAGE,SAA2B,IAAhBF,EAAGG,UCI5CC,EAAe,CAACJ,EAAIP,KACxB,IAAIY,EAAYL,EAAGM,YAAc,GAQjC,OANIR,EAASL,IAASA,IACpBY,EAAYA,EAAUE,QAAQC,GACrBA,EAASf,OAASA,KAItBY,GCrBII,EAAiB,CAC5B,WACA,OACA,UACA,QACA,OACA,SACA,aACA,cCMIC,EAAO,CAACV,EAAIP,EAAMkB,KACtB,MAAMC,EAAUH,EAAe9E,QAAQ8D,IAAS,EAG5CkB,EAAGE,0BACLF,EAAKA,EAAGE,mBACEA,kBCZE,SAAUb,EAAIP,EAAMkB,GAClC,MAAMN,EAAYL,EAAGM,WACrB,IAAIQ,GAAS,EAEb,GAAIT,EAAU3F,OAAS,EACrB,OAAO,EAIT2F,EAAU/E,SAAQ,CAACkF,EAAUO,KAC3B,MAAM3E,EAAUoE,EAASG,GAErBlB,IAASe,EAASf,OACpBqB,EAAQC,EAEJ3E,IAAYuE,IACdG,EAAQC,GAEX,IAICD,GAAS,GACXT,EAAUvD,OAAOgE,EAAO,EAE5B,CDTEE,CAAQhB,EAAIP,EAAMkB,GAElBX,EAAGiB,oBAAoBxB,EAAMkB,EAAIC,EAAQ,EEVrCM,EAAe,SAAUlB,EAAIP,EAAM0B,GAAU,GACjD,MAAMC,EAAWtB,EAASE,GAAM7C,SAASC,cAAc4C,GAAMA,EACvDqB,EAAYD,EAASE,WACTlB,EAAagB,EAAU3B,GAE/BnE,SAASkF,IACjBE,EAAKU,EAAUZ,EAASf,KAAMe,EAASG,GAAG,KAIzCQ,IAAoB,IAAT1B,GAAsC,IAArB8B,UAAU7G,SACvC0G,GACAC,GAEAA,EAAU/F,SAASkG,IACbzB,EAAUyB,IACZN,EAAaM,EAAQ/B,EAAM0B,EAC5B,GAGP,EC3BMM,EAAchG,GACI,mBAARA,GAAuC,sBCavC,CAACA,GACRpB,OAAOC,UAAUoB,SAASa,MAAMd,GDdHiG,CAAQjG,GEIxCiB,EAAM,CAACsD,EAAIP,EAAMkB,KAErB,IAAKc,EAAWd,GACd,OAAOO,EAAalB,EAAIP,GAG1BiB,EAAKV,EAAIP,EAAMkB,EAAG,ECPdgB,EAAU,CAAC3B,EAAI4B,EAAW,MAC9B,MAAMC,EAAMD,EAASE,QAAQ,MAAO,IAEpC,SAAKF,GAAaC,GAAQ7B,KAKtBA,EAAG2B,QACE3B,EAAG2B,QAAQE,KACT7B,EAAG+B,mBACL/B,EAAG+B,kBAAkBF,GAG7B,ECpBGG,EAAmBhC,GAChBA,EAAGiC,MAAQjC,IAAO7C,UAAY6C,EAAGiC,KAAK9B,SACzCH,EAAGiC,KACHjC,EAAGkC,WCFHC,EAAkB,SAAUnC,GAChC,OAAIA,GAAsB,IAAhBA,EAAGG,SACJH,EAAGkC,WAGLlC,CACT,ECLMoC,EAAY,SAAUC,GAC1B,MAAMrD,EAASqD,EAAIrD,OAEnB,OAAOmD,EAAgBnD,EACzB,ECKM7C,EAAK,CAAC6D,EAAI4B,EAAUnC,EAAMkB,EAAIxF,EAAMmH,EAASC,GAAO,KAExD,MAAM3B,EAAUH,EAAe9E,QAAQ8D,IAAS,EAE1Ce,EAAW,SAAU6B,GACzB,MAEMG,ECZM,EAACxC,EAAI4B,EAAUa,EAAKC,KAClC,MAAMJ,EAAUG,GAAOtF,SAEvB,IAAK6C,EACH,OAAO,KAGT,EAAG,CAED,GACe,MAAZ4B,IACkB,MAAhBA,EAAS,GACN5B,EAAGkC,aAAeI,GAAWX,EAAQ3B,EAAI4B,GACzCD,EAAQ3B,EAAI4B,KACjBc,GAAc1C,IAAOsC,EAEtB,OAAOtC,EAIT,GAAIA,IAAOsC,EACT,KAIN,OAAYtC,EAAKgC,EAAgBhC,GAAK,EDbX2C,CAFRP,EAAUC,GAEcT,EAAU5B,GACjD,IAAI4C,EAAkBN,GAAWtC,EAEjCqC,EAAIG,eAAiBA,GAIL,IAAZF,IACFM,EAAkBzH,GAIhBqH,KAGW,IAATD,GACF7F,EAAIsD,EAAIP,EAAMe,GAGhBG,EAAGpG,KAAKqI,EAAiBP,EAAKlH,GAEjC,EAEI6E,EAAGM,aACNN,EAAGM,WAAa,IAIlBN,EAAGM,WAAW9D,KAAK,CACjBwD,KACA4B,WACAnC,OACAkB,GAAIH,EACJrF,OACAmH,UACA1B,YAIFD,EAAGE,kBAAoBL,EAEvBR,EAAG6C,iBAAiBpD,EAAMe,EAAUI,EAAQ,EE1DxCkC,EAAO,KACX,MAAMC,EAAQC,UAAUC,UAExB,QAASF,EAAMG,MAAM,eAAiBH,EAAMG,MAAM,QAAO,ECHrDC,EAAYnD,IAChB,MAAMK,EAAYD,EAAaJ,GACzBoD,EAAQ,GAMd,OAJA/C,EAAU/E,SAASkF,IACjB4C,EAAM5G,KAAKgE,EAASf,KAAK,IAGpB,IAAI,IAAI4D,IAAID,GAAM,ECRrBE,EAAY,WAChB,MAAMC,EAAQpG,SAASqG,iBAAmBrG,SAASsG,KACnD,IAAIC,EAAW,CAAC,EAAG,GAMnB,OAJIH,IAAUA,EAAM3F,WAAa2F,EAAMI,cACrCD,EAAW,CAACH,EAAM3F,UAAW2F,EAAMI,aAG9BD,CACT,ECNME,EAAW,SAAUvB,GACzB,IAAIwB,EAAIxB,EAAIyB,MAWZ,OARKD,GAAK,IAAMA,IACdA,EAAIxB,EAAI0B,SAAW,EAEfjB,MACFe,GCTGP,IAAY,KDaZO,CACT,EEbMG,EAAW,SAAU3B,GACzB,IAAI4B,EAAI5B,EAAI6B,MAWZ,OARKD,GAAK,IAAMA,IACdA,EAAI5B,EAAI8B,SAAW,EAEfrB,MACFmB,GCTGX,IAAY,KDaZW,CACT,EEbMG,EAAc,SAAU/B,GAC5B,IAAIgC,EAAOhC,EAAIiC,SAAWjC,EAAIkC,SAE9B,MAAMC,EAAe,CACnB,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,GACP,MAAO,GACP,GAAI,GASN,MCxBoB,MACpB,MAAMC,EAAKzB,UAAUC,UAKrB,OAHiB,qCAGJyB,KAAKD,IAJA,wBAQDC,KAAKD,IANL,UAMqBC,KAAKD,EAAE,EDUzCE,IAAmBN,KAAQG,IAC7BH,EAAOG,EAAaH,IAGfA,CACT,EEFMO,EAAiB,SAAUvC,GAC/BA,EAAIuC,gBACN,ECFMC,EAAkB,SAAUxC,GAChCA,EAAIwC,iBACN,ECAMC,EAAY,SAAUzC,GAC1BwC,EAAgBxC,GAChBuC,EAAevC,EACjB,ECLA,MAAM0C,EAQJC,YAAYhF,GASV,OARID,EAAUC,GACZ/C,KAAKgI,IAAMjF,EAEPF,EAASE,KACX/C,KAAKgI,IAAM9H,SAASC,cAAc4C,IAI/B/C,IACR,CAWDmD,aAAaX,GACX,OAAOW,EAAanD,KAAKgI,IAAKxF,EAC/B,CASD0D,WACE,OAAOA,EAASlG,KAAKgI,IACtB,CAYDC,SAASzF,GACP,MCvEa,EAACO,EAAIP,KACpB,MAAM2D,EAAQD,EAASnD,GACvB,IAAImF,EAEJ,QAAI/B,EAAM1I,OAAS,KAInByK,EAAS/B,EAAM1I,OAAS,EAGpB+E,GAAQK,EAASL,KACnB0F,EAAS/B,EAAMzH,QAAQ8D,IAAS,GAG3B0F,IDwDED,CAASjI,KAAKgI,IAAKxF,EAC3B,CAUDmE,SAASvB,GACP,OAAOuB,EAASvB,EACjB,CAUD2B,SAAS3B,GACP,OAAO2B,EAAS3B,EACjB,CAUD+C,UAAU/C,GACR,OE9Gc,SAAUA,GAC1B,MAAO,CAACuB,EAASvB,GAAM2B,EAAS3B,GAClC,CF4GW+C,CAAU/C,EAClB,CAUD+B,YAAY/B,GACV,OAAO+B,EAAY/B,EACpB,CAmBDgD,iBAAiBhD,GACf,OGvIqB,SAAUA,GACjC,IAAIrD,EAASqD,EAAIiD,cACjB,MAAM7F,EAAO4C,EAAI5C,KAUjB,OARKT,IACU,aAATS,EACFT,EAASqD,EAAIkD,UACK,cAAT9F,IACTT,EAASqD,EAAImD,cAIVrD,EAAgBnD,EACzB,CH0HWqG,CAAiBhD,EACzB,CAUDD,UAAUC,GACR,OAAOD,EAAUC,EAClB,CAcDoD,MAAMhG,EAAM0B,GAAU,GAGpB,OAFAD,EAAajE,KAAKgI,IAAKxF,EAAM0B,GAEtBlE,IACR,CAQDyI,UItLc,IAAC1F,EJyLb,OIzLaA,EJuLL/C,KAAKgI,IItLD9B,EAASnD,GAEjB1E,SAASmE,IACbyB,EAAalB,EAAIP,GAAM,EAAK,IJqLrBxC,IACR,CAcDuC,YAAYC,EAAMC,EAAS,KAAMC,GAAU,EAAMC,GAAa,GAC5D,OAAOJ,EAAYC,EAAMC,EAAQC,EAASC,EAC3C,CAYDlD,IAAI+C,EAAMrD,GAGR,OAFAM,EAAIO,KAAKgI,IAAKxF,EAAMrD,GAEba,IACR,CAgBDd,GAAGyF,EAAUnC,EAAMrD,EAASjB,EAAMmH,EAASC,GAAO,GAGhD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAUnC,EAAMrD,EAASjB,EAAMmH,GAAWrF,KAAMsF,GAEtDtF,IACR,CAaDsF,KAAKX,EAAUnC,EAAMrD,EAASjB,EAAMmH,GAGlC,MK1PS,EAACtC,EAAI4B,EAAUnC,EAAMkB,EAAIxF,EAAMmH,KAC1CnG,EAAG6D,EAAI4B,EAAUnC,EAAMkB,EAAIxF,EAAMmH,GAAS,EAAK,ELuP7CC,CAAKtF,KAAKgI,IAAKrD,EAAUnC,EAAMrD,EAASjB,EAAMmH,GAEvCrF,IACR,CAeD0I,MAAM/D,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG7C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,QAASxF,EAASjB,EAAMmH,EAASC,GAEjDtF,IACR,CAeD2I,QAAQhE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG/C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,UAAWxF,EAASjB,EAAMmH,EAASC,GAEnDtF,IACR,CAeD4I,WAAWjE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGlD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,aAAcxF,EAASjB,EAAMmH,EAASC,GAEtDtF,IACR,CAeD6I,WAAWlE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGlD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,aAAcxF,EAASjB,EAAMmH,EAASC,GAEtDtF,IACR,CAeD8I,UAAUnE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGjD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,YAAaxF,EAASjB,EAAMmH,EAASC,GAErDtF,IACR,CAeD+I,QAAQpE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG/C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,UAAWxF,EAASjB,EAAMmH,EAASC,GAEnDtF,IACR,CAeDgJ,UAAUrE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGjD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,YAAaxF,EAASjB,EAAMmH,EAASC,GAErDtF,IACR,CAeDiJ,UAAUtE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGjD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,YAAaxF,EAASjB,EAAMmH,EAASC,GAErDtF,IACR,CAeDkJ,SAASvE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGhD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,WAAYxF,EAASjB,EAAMmH,EAASC,GAEpDtF,IACR,CAeDmJ,KAAKxE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG5C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,OAAQxF,EAASjB,EAAMmH,EAASC,GAEhDtF,IACR,CAeDoJ,QAAQzE,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG/C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,UAAWxF,EAASjB,EAAMmH,EAASC,GAEnDtF,IACR,CAeDqJ,UAAU1E,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGjD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,YAAaxF,EAASjB,EAAMmH,EAASC,GAErDtF,IACR,CAeDsJ,UAAU3E,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGjD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,YAAaxF,EAASjB,EAAMmH,EAASC,GAErDtF,IACR,CAeDuJ,SAAS5E,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGhD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,WAAYxF,EAASjB,EAAMmH,EAASC,GAEpDtF,IACR,CAeDwJ,UAAU7E,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGjD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,YAAaxF,EAASjB,EAAMmH,EAASC,GAErDtF,IACR,CAeDyJ,KAAK9E,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG5C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,OAAQxF,EAASjB,EAAMmH,EAASC,GAEhDtF,IACR,CAeD0J,MAAM/E,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG7C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,QAASxF,EAASjB,EAAMmH,EAASC,GAEjDtF,IACR,CAeD2J,YAAYhF,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGnD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,cAAexF,EAASjB,EAAMmH,EAASC,GAEvDtF,IACR,CAgBD4J,QAAQjF,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG/C,OMjmBY,SAAUvC,EAAI4B,EAAUjB,EAAIxF,EAAMmH,EAASC,GAAO,GAChE,MAAMuE,EAAUhE,IAAS,UAAY,QAE9B3G,EAAG6D,EAAI4B,EAAUkF,EAASnG,EAAIxF,EAAMmH,EAASC,EACtD,CN2lBIsE,CAAQ5J,KAAKgI,IAAKrD,EAAUxF,EAASjB,EAAMmH,EAASC,GAE7CtF,IACR,CAgBD8J,SAASnF,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGhD,OOrnBa,SAAUvC,EAAI4B,EAAUjB,EAAIxF,EAAMmH,EAASC,GAAO,GACjE,MAAMyE,EAAWlE,IAAS,WAAa,OAEvC3G,EAAG6D,EAAI4B,EAAUoF,EAAUrG,EAAIxF,EAAMmH,EAASC,EAChD,CP+mBIwE,CAAS9J,KAAKgI,IAAKrD,EAAUxF,EAASjB,EAAMmH,EAASC,GAE9CtF,IACR,CAeDgK,OAAOrF,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG9C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,SAAUxF,EAASjB,EAAMmH,EAASC,GAElDtF,IACR,CAeDiK,MAAMtF,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG7C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,QAASxF,EAASjB,EAAMmH,EAASC,GAEjDtF,IACR,CAeDkK,iBAAiBvF,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGxD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,mBAAoBxF,EAASjB,EAAMmH,EAASC,GAE5DtF,IACR,CAeDmK,kBAAkBxF,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGzD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,oBAAqBxF,EAASjB,EAAMmH,EAASC,GAE7DtF,IACR,CAeDoK,eAAezF,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAGtD,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,iBAAkBxF,EAASjB,EAAMmH,EAASC,GAE1DtF,IACR,CAeDqK,MAAM1F,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG7C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,QAASxF,EAASjB,EAAMmH,EAASC,GAEjDtF,IACR,CAeDsK,KAAK3F,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG5C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,OAAQxF,EAASjB,EAAMmH,EAASC,GAEhDtF,IACR,CAeDuK,IAAI5F,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG3C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,MAAOxF,EAASjB,EAAMmH,EAASC,GAE/CtF,IACR,CAcDwK,QAAQ7F,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG/C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,UAAWxF,EAASjB,EAAMmH,EAASC,GAEnDtF,IACR,CAcDyK,MAAM9F,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG7C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,QAASxF,EAASjB,EAAMmH,EAASC,GAEjDtF,IACR,CAeD0K,MAAM/F,EAAUxF,EAASjB,EAAMmH,EAASC,GAAO,GAG7C,OAFApG,EAAGc,KAAKgI,IAAKrD,EAAU,QAASxF,EAASjB,EAAMmH,EAASC,GAEjDtF,IACR,CAWD2K,QAAQnI,EAAMmC,GAGZ,MQn0BY,EAAC5B,EAAIP,EAAMmC,KACzB,IAAIJ,KAEC/B,IAASmC,KAIdJ,EAASxB,EAAG5C,cAAcwE,KAErBJ,GAILA,EAAOqG,cAAcrI,EAAYC,IAAM,ERozBrCmI,CAAQ3K,KAAKgI,IAAKxF,EAAMmC,GAEjB3E,IACR,CAUD2H,eAAevC,GAGb,OAFAuC,EAAevC,GAERpF,IACR,CAUD4H,gBAAgBxC,GAGd,OAFAwC,EAAgBxC,GAETpF,IACR,CAUD6H,UAAUzC,GAGR,OAFAyC,EAAUzC,GAEHpF,IACR,CAUD6K,cAAczF,GAGZ,OS/2BkB,SAAUA,GAC9ByC,EAAUzC,GACVA,EAAI0F,0BACN,CT02BID,CAAczF,GAEPpF,IACR,EU35BH,MAAM+K,EAAYhI,GACT,IAAI+E,EAAQ/E,GCAfiI,EAAS9K,SAASC,cAAc,UACtC,IAAI8K,EAAU,KAEd,MAAMC,EAAkB,SAAU9F,GAChC,MACMpG,EADUoG,EAAIG,eACD4F,KAAKC,MAAM,KAAK,GAEnClK,EAAUjD,KAAK,mBAAoBe,GAEnCoG,EAAIwC,kBACJxC,EAAIuC,gBACN,EAEM0D,EAAiBrM,IACrB,MAGMsM,EAHUpL,SAASC,cACvB,yBAAyBnB,OAELiG,WAElBgG,GACFA,EAAQM,UAAUC,OAAO,UAG3BF,EAAMC,UAAUE,IAAI,UACpBR,EAAUK,CAAK,EAUF,IAAAI,EAPD,KACZ,MAAMC,EAAWZ,EAASC,GAE1B9J,EAAUhC,GAAG,cAAemM,GAC5BM,EAASjD,MAAM,iBAAkBwC,EAAgB,EC/BnD,MAAMU,EAAW1L,SAASC,cAAc,YAElC0L,EAAUpL,IACd,MAEML,EAFQF,SAASC,cAAc,SAEnBE,aACZyL,EAAMF,EAASzL,cAAc,OAC7B4L,EAAQH,EAASzL,cAAc,SAEjCM,GALQ,GAMVqL,EAAIP,UAAUE,IAAI,QAClBM,EAAMR,UAAUC,OAAO,SACd/K,GAAOL,GAChB2L,EAAMR,UAAUE,IAAI,QACpBK,EAAIP,UAAUC,OAAO,SACZ/K,EAXC,GAWYA,EAAML,IAC5B0L,EAAIP,UAAUC,OAAO,QACrBO,EAAMR,UAAUC,OAAO,QACxB,EAkBY,IAAAQ,EAfD,KACZ,MAAML,EAAWZ,EAASa,GAE1BC,EAAO,GAEP3K,EAAUhC,GAAG,iBAAkB2M,GAE/BF,EAASjD,MAAM,OAAO,KACpBxH,EAAUjD,KAAK,gBAAiB,GAAG,IAErC0N,EAASjD,MAAM,SAAS,KACtBxH,EAAUjD,KAAK,mBAAoB,GAAG,GACtC,EChCJwD,IACAiK,IACAM","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54]} \ No newline at end of file diff --git a/docs/js/outline.min.js b/docs/js/outline.min.js index f30550ac..2f08e993 100644 --- a/docs/js/outline.min.js +++ b/docs/js/outline.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Outline=e()}(this,(function(){"use strict";const t=t=>"string"==typeof t,e=(t,e)=>{const s=Object.prototype.hasOwnProperty;return t&&s.call(t,e)},s=t=>Object.prototype.toString.apply(t),i=t=>"function"==typeof t||"[object Function]"===s(t),r=t=>("[object Object]"===s(t)||"object"==typeof t||i(t))&&null!==t;class l{constructor(t){this.attrs={},t&&this.initialize(t)}initialize(t){return this.attr(t).render().addListeners(),this}attr(s,i){const l=this.attrs;return t(s)?i&&e(l,s)?(l[s]=i,this):l[s]:r(s)?(o=l,n=s,Object.keys(n).forEach((t=>{e(n,t)&&(o[t]=n[t])})),this):0===arguments.length?l:this;var o,n}render(){return this}destroy(){return this.removeListeners(),this}reload(t){return this.destroy().initialize(this.attr(t)),this}addListeners(){return this}removeListeners(){return this}}const o=t=>!!(r(t)&&t.nodeName&&t.tagName&&1===t.nodeType),n=(t,e=300)=>!!i(t)&&setTimeout((()=>{t()}),e),h=t=>t*t,a=(e=null)=>{let s,i;return e?t(e)?i=document.querySelector(e):o(e)&&(i=e):(s=document.querySelectorAll("html,body"),i=s[0].scrollTop-s[1].scrollTop>=0?s[0]:s[1]),i},c=(t,e,s)=>{const r=a(t);let l=r.scrollTop,o=0;const n=e-l,c=r.scrollHeight,d=e-c<=0?e:c,u=t=>(i(s)&&s(t),!1),p=()=>{if(o+=1,n<0){if(l-=h(o),r.scrollTop=l,l<=e)return r.scrollTop=e,u(e)}else if(l+=h(o),r.scrollTop=l,l>=d)return r.scrollTop=d,u(d);requestAnimationFrame(p)};requestAnimationFrame(p)},d=t=>{let e=t.offsetTop;return null!==t.offsetParent&&(e+=d(t.offsetParent)),e},u=(t,e="")=>{const s=e.replace(/^>/i,"");return!!(e&&s&&t)&&(t.matches?t.matches(s):!!t.msMatchesSelector&&t.msMatchesSelector(s))},p=t=>t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode,m=["focusout","blur","focusin","focus","load","unload","mouseenter","mouseleave"],f=(t,e,s)=>{const i=m.indexOf(e)>-1;s._delegateListener&&delete(s=s._delegateListener)._delegateListener,function(t,e,s){const i=t._listeners;let r=-1;if(i.length<1)return!1;i.forEach(((t,i)=>{const l=t.fn;e===t.type&&(r=i,l===s&&(r=i))})),r>-1&&i.splice(r,1)}(t,e,s),t.removeEventListener(e,s,i)},g=function(e,s,i=!1){const r=t(e)?document.querySelector(e):e,l=r.childNodes,n=((e,s)=>{let i=e._listeners||[];return t(s)&&s&&(i=i.filter((t=>t.type===s))),i})(r,s);n.forEach((t=>{f(r,t.type,t.fn)})),(i||!0===s||1===arguments.length)&&r&&l&&l.forEach((t=>{o(t)&&g(t,s,i)}))},b=(t,e,s)=>{if(!i(s))return g(t,e);f(t,e,s)},y=(t,e,s,i,r,l,o=!1)=>{const n=m.indexOf(s)>-1,h=function(n){const a=function(t){const e=t.target;return(s=e)&&3===s.nodeType?s.parentNode:s;var s}(n),c=((t,e,s,i)=>{const r=s||document;if(!t)return null;do{if(null!=e&&(e.startsWith(">")?t.parentNode===r&&u(t,e):u(t,e))||i&&t===r)return t;if(t===r)break}while(t=p(t))})(a,e,t);let d=l||t;n.delegateTarget=c,!0===l&&(d=r),c&&(!0===o&&b(t,s,h),i.call(d,n,r))};t._listeners||(t._listeners=[]),t._listeners.push({el:t,selector:e,type:s,fn:h,data:r,context:l,capture:n}),i._delegateListener=h,t.addEventListener(s,h,n)},$=function(t){t.stopPropagation(),t.preventDefault()},v={},E=t=>e(v,t)&&v[t].length>0,_=(t,e=!0)=>e?E(t):(t=>{let e=E(t),s=t.lastIndexOf(".");for(;!e&&-1!==s;)s=(t=t.substring(0,s)).lastIndexOf("."),e=E(t);return e})(t),w=(t,e,i=!0)=>{const r=t=>{if(!E(t))return!1;v[t].forEach((t=>{const i=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]","[object BigInt64Array]","[object BigUint64Array]"].indexOf(s(e))>-1?e.toString():e;t.callback.call(t.context||t,i)}))},l=()=>{let e=t,s=t.lastIndexOf(".");for(;-1!==s;)e=e.substring(0,s),s=e.lastIndexOf("."),r(e);r(t),r("*")};if(!_(t))return!1;i?setTimeout(l,10):l()},T=t=>Array.isArray?Array.isArray(t):"[object Array]"===s(t),S=['','','','','','','','',''],L=(e,s="icon")=>t(e)?((t,e="icon")=>{const s=/id="(.*?)"/,i=/^(\w+)-/;return S.find((r=>{const l=s.exec(r)[1];return i.exec(l)[1]===e&&l===("icon"===e?`${e}-${t}`:`${e}-icon-${t}`)}))})(e,s):[...S],x=(e="")=>{const s=document.body;let i=document.querySelector("#outline-icons"),r=[];(e=>{if(!e)return!1;T(e)&&e.length>0?e.forEach((e=>{-1===S.indexOf(e)&&t(e)&&S.push(e)})):t(e)&&S.push(e)})(e),r=L(),i?i.innerHTML=r.join(""):(i=document.createElement("div"),i.innerHTML=``,s.insertBefore(i.firstChild,s.firstChild))},C=e=>!!t(e)&&e.replace(/(^\s+)|(\s+$)/g,""),z=t=>{return!(!r(t)||!(o(t)||(t=>!(!r(t)||"[object NodeList]"!==s(t)))(t)||(e=t,r(e)&&"[object DocumentFragment]"===s(e))||(t=>!(!r(t)||!("[object Text]"===s(t)||t.tagName&&3===t.nodeType)))(t)));var e},k=(t,e,s)=>{let i=t.tagName.toLowerCase();switch(e){case"style":t.style.cssText=s;break;case"value":"input"===i||"textarea"===i?t.value=s:t.setAttribute(e,s);break;case"className":t.className=s;break;default:t.setAttribute(e,s)}},A=(s,i,l)=>{const o=document.createDocumentFragment(),n=document.createElement(s),h=e=>z(e)||t(e),a=e=>{let s;if(!h(e))return!1;z(e)?s=e:t(e)&&(s=document.createTextNode(e)),o.appendChild(s)};return r(i)?Object.keys(i).forEach((t=>{e(i,t)&&k(n,t,i[t])})):T(i)&&i.every((t=>h(t)))&&i.forEach((t=>{a(t)})),T(l)?l.forEach((t=>{a(t)})):a(l),n.appendChild(o),n},N=e=>{const s=new RegExp("^\\s*(?:<\\?xml[^>]*>\\s*)?(?:<\\!doctype svg[^>]*\\s*(?:\\[?(?:\\s*]*>\\s*)*\\]?)*[^>]*>\\s*)?]*>[^]*<\\/svg>\\s*$\\s*$","i");return t(e)&&s.test(e)},O=(e,s={})=>((e,s={})=>{const i=s.size||0,r=s.color||"",l=s.iconSet||"",o=T(i)?i[0]:i,n=T(i)?i[1]:i,h=i?`width:${o}px;height:${n}px;`:"",a=r?h+`color:${r}`:h,c=document.createElement("i");let d,u="",p="";return t(e)?(N(e)?p=e:(u=l&&"icon"!==l?`xlink:href="#${l}-icon-${e}"`:`xlink:href="#icon-${e}"`,p=``),c.className="outline-icon",c.innerHTML=p,N(e)&&(d=c.querySelector("svg"),d.setAttribute("aria-hidden","true"),d.setAttribute("xmlns","http://www.w3.org/2000/svg"),d.setAttribute("class","outline-icon__svg"),d.setAttribute("width","200"),d.setAttribute("height","200"),d.style=a),c):null})(e,s),M=(t,e)=>{const s=new RegExp("(\\s|^)"+e+"(\\s|$)");let i,r;return!!o(t)&&(i=t.className,!!i&&(r=t.classList,r?.contains?t.classList.contains(e):!!s.exec(i)))},D=(t,e)=>{let s,i=t.className;if(!i||!M(t,e))return!1;s=t.classList,s?.remove?s.remove(e):(i=C(i.replace(e,"")),t.className=i)},H=(e,s=!0,i=!0)=>{const r="outline-heading",l=e.innerHTML;let o;if(e.innerHTML=l.replace(/^\d+(\.?\d+)*\s?/gi,""),e.removeAttribute("id"),e.removeAttribute("data-id"),D(e,r),!s)return!1;var n;o=e.querySelector(`.${r}__anchor`),i&&D(e,`${r}_start`),n=C(e.className),t(n)&&""===n&&e.removeAttribute("class"),e.removeChild(o)},j=(e,s=!0)=>{let i=1,r=0;const l=[];return e.forEach(((e,s)=>{const o=e.tagName.replace(/h/i,"");let n=parseInt(o,10),h=-1;var a;n>i?(r+=1,h=1===r?-1:s-1):n===i||nr?1===n?(r=1,h=-1):h=l[s-1].pid:n<=r&&(1===n?r=1:(r-=i-n,r<=1&&(r=1)),h=1===r?-1:((t,e,s)=>{let i,r,l=t[s-1];for(r=0;r]+(>|$)/g,""):"")})})),s?(t=>{const e={};return t.forEach((t=>{const s=JSON.stringify((t=>[t.pid])(t));e[s]=e[s]||[],e[s].push(t),t.index=e[s].length,-1===t.pid&&(t.code=String(t.index))})),Object.keys(e).forEach((s=>{e[s].forEach((e=>{t.filter((t=>t.pid===e.id)).forEach((t=>{t.code=e.code+"."+t.index}))}))})),t})(l):l};class F extends l{constructor(t){super(),this.attrs=F.DEFAULTS,this.$articleElement=null,this.$scrollElement=null,this.$headings=[],this.chapters=[],t&&this.initialize(t)}initialize(e){let s,r,l,n,h;return this.attr(e),h=this.attr("articleElement"),r=this.attr("scrollElement"),l=this.attr("selector"),s=this.attr("created"),t(h)?n=document.querySelector(h):o(h)&&(n=h),n?(this.$articleElement=n,this.$scrollElement=a(r),this.$headings=[...n.querySelectorAll(l)],this.$headings.length<1||(this.chapters=j(this.$headings),i(s)&&s.call(this),this.render().addListeners()),this):this}getChapters(t=!1){const e=this.chapters;return t?((t,e,s)=>{const i={},r=[];return t.forEach(((t,s)=>{i[t[e]]=s,t.children=[]})),t.forEach((e=>{const l=t[i[e[s]]];-1!==e[s]?l.children.push(e):r.push(e)})),r})(e,"id","pid"):e}count(){return this.chapters.length}render(){const t=this.attr("mounted"),e=this.attr("hasAnchor"),s=this.attr("isAtStart"),r=this.attr("showCode"),l=this.attr("anchorURL"),o=this.$headings,n=this.getChapters();return x(),o.forEach(((t,i)=>{const o=n[i].code;((t,e,s)=>{const i=document.createDocumentFragment(),r="outline-heading",l=s.hasAnchor||!0,o=s.isAtStart||!0,n=s.showCode||!1,h=s.chapterCode||"",a=s.anchorURL||"",c=`heading-${e}`,d={id:c,className:o?`${r} ${r}_start`:r,"data-id":e},u=Object.keys(d),p=C(t.innerHTML);let m,f;if(u.forEach((e=>{k(t,e,d[e])})),n&&(t.innerHTML=h+" "+p),!l)return!1;f=O("hash",{iconSet:"outline"}),m=A("a",{id:`anchor-${e}`,className:`${r}__anchor anchor-${e}`,href:a||`#${c}`,target:a?"_blank":"self","data-id":e},[f]),i.appendChild(m),t.appendChild(i)})(t,i,{hasAnchor:e,isAtStart:s,showCode:r,chapterCode:o,anchorURL:l})})),i(t)&&t.call(this),this}scrollTo(t,e){const s=this.$scrollElement;return c(s,t,e),this}destroy(){const t=this.attr("hasAnchor"),e=this.attr("isAtStart"),s=this.attr("beforeDestroy"),r=this.attr("afterDestroy"),l=this.$headings;return i(s)&&s.call(this),this.removeListeners(),l.forEach((s=>{H(s,t,e)})),this.attr(F.DEFAULTS),this.$articleElement=null,this.$scrollElement=null,this.$headings=[],this.chapters=[],i(r)&&r.call(this),this}onAnchorTrigger(t){const e=this.attr("anchorURL"),s=this.attr("afterScroll"),r=this.attr("stickyHeight"),l=t.delegateTarget.parentNode,o=d(l)-(r+10),h=this.$scrollElement,a=h.scrollHeight-h.clientHeight;return this.scrollTo(o,(()=>{i(s)&&s.call(this,"anchor"),n((()=>{w("toolbar:update",{top:o,min:0,max:a})}))})),e||$(t),this}addListeners(){const t=this.$articleElement;return y(t,".outline-heading__anchor","click",this.onAnchorTrigger,this,!0),this}removeListeners(){const t=this.$articleElement;return b(t,"click",this.onAnchorTrigger),this}}F.DEFAULTS={scrollElement:"html,body",articleElement:"#article",selector:"h1,h2,h3,h4,h5,h6",stickyHeight:0,anchorURL:"",hasAnchor:!0,isAtStart:!0,showCode:!1,created:null,mounted:null,afterScroll:null,beforeDestroy:null,afterDestroy:null};const U=(t,e)=>{let s,i;if(M(t,e))return!1;s=t.classList,s?.add?s.add(e):(i=t.className,i+=i.length>0?" "+e:e,t.className=i)},I=(t,e)=>{document.documentElement.style.setProperty(t,e)};let q=2e3;const B=t=>(t?q=t:q+=1,I("--outline-zIndex",`${q}`),q);class R extends l{constructor(t){super(),this.attrs=R.DEFAULTS,this.title="",this.closed=!0,this.$el=null,this.$modal=null,this.$header=null,this.$title=null,this.$close=null,this.$main=null,this.$footer=null,this.$overlay=null,this.zIndex=0,t&&this.initialize(t)}initialize(t){let e;return this.attr(t),this.title=this.attr("title"),e=this.attr("created"),i(e)&&e.call(this),this.render().addListeners(),this}setTitle(t){return this.attr("title",t),this.title=t,this.$title.innerHTML=t,this}isClosed(){return this.closed}render(){const t=this.attr("mounted"),e=this.attr("size"),s=this.attr("placement"),r=this.attr("hasClose"),l=this.attr("hasOverlay"),o=this.attr("hasOffset"),n=this.attr("hasPadding"),h=this.attr("autoHeight"),a=this.attr("customClass");let c,d,u,p,m,f,g,b;return x(),this.zIndex=B(),p=A("h2",{className:"outline-drawer__title"},[this.title]),this.$title=p,r&&(m=A("div",{className:"outline-drawer__close"},[O("close",{size:20})]),this.$close=m),u=A("header",{className:"outline-drawer__header"},[p,m]),this.$header=u,f=A("div",{className:"outline-drawer__main"},[""]),this.$main=f,n||U(f,"outline-drawer_full"),g=A("footer",{className:"outline-drawer__footer"},[""]),this.$footer=g,d=A("div",{className:`outline-drawer__modal outline-drawer_${s} outline-drawer_${e} outline-drawer_closed`},[u,f,g]),this.$modal=d,o&&U(d,"outline-drawer_offset"),h&&U(d,"outline-drawer_auto"),a&&U(d,a),l&&(b=A("div",{className:"outline-drawer__overlay"},[""]),this.$overlay=b),c=A("div",{className:"outline-drawer"},[d,b]),this.$el=c,document.body.appendChild(c),i(t)&&t.call(this),this}open(){const t=this.attr("afterOpened"),e=this.$modal;return U(this.$el,"outline-drawer_opened"),D(e,"outline-drawer_closed"),U(e,"outline-drawer_opened"),n((()=>{this.closed=!1,i(t)&&t.call(this)})),this}close(){const t=this.attr("afterClosed"),e=this.$modal;return D(e,"outline-drawer_opened"),U(e,"outline-drawer_closed"),n((()=>{D(this.$el,"outline-drawer_opened"),this.closed=!0,i(t)&&t.call(this)})),this}toggle(){const t=this.attr("afterToggle"),e=this.isClosed();return e?this.open():this.close(),i(t)&&n((()=>{t.call(this,e)})),this}destroy(){const t=this.attr("afterDestroy"),e=this.attr("beforeDestroy");let s=this.zIndex;return i(e)&&e.call(this),this.removeListeners(),this.attrs=R.DEFAULTS,this.title="",this.closed=!1,this.$el=null,this.$modal=null,this.$header=null,this.$title=null,this.$close=null,this.$main=null,this.$footer=null,this.$overlay=null,s-=1,B(s),this.zIndex=0,i(t)&&t.call(this),this}addListeners(){const t=this.attr("hasClose"),e=this.attr("hasOverlay"),s=this.$el;return t&&y(s,".outline-drawer__close","click",this.onClose,this,!0),e&&y(s,".outline-drawer__overlay","click",this.onClose,this,!0),this}removeListeners(){const t=this.attr("hasClose"),e=this.attr("hasOverlay"),s=this.$el;return t||e?(b(s,"click",this.onClose),this):this}onClose(){return this.close(),this}}R.DEFAULTS={placement:"rtl",title:"标题",size:"regular",hasClose:!0,hasOverlay:!0,hasOffset:!1,hasPadding:!0,autoHeight:!0,created:null,mounted:null,afterClosed:null,afterOpened:null,afterScroll:null,beforeDestroy:null,afterDestroy:null,afterToggle:null};const P=(t,e,s,r,l,o=!1)=>{const n=m.indexOf(e)>-1,h=function(i){let n=l||t;!0===l&&(n=r),!0===o&&b(t,e,h),s.call(n,i,r)};if(!i(s))return!1;t._listeners||(t._listeners=[]),t._listeners.push({el:t,type:e,fn:h,data:r,context:l,capture:n}),s._delegateListener=h,t.addEventListener(e,h,n)},Q=(t,e)=>getComputedStyle(t)[e];class W extends l{constructor(t){super(),this.attrs=W.DEFAULTS,this.$el=null,this.$title=null,this.$main=null,this.$list=null,this.$placeholder=null,this.$parentElement=null,this.$scrollElement=null,this.chapters=[],this.closed=!1,this.active=0,this.offsetTop=0,this.offsetWidth=0,this.$active=null,this.scrollTimer=null,this.resizeTimer=null,this.playing=!1,this.Observer=null,t&&this.initialize(t)}initialize(e){let s,r,l,n;return this.attr(e),s=this.attr("created"),r=this.attr("parentElement"),l=this.attr("scrollElement"),t(r)?n=document.querySelector(r):o(r)&&(n=r),this.$parentElement=n,this.$scrollElement=a(l),this.chapters=this.attr("chapters"),this.closed=this.attr("closed"),this.active=this.attr("active"),i(s)&&s.call(this),this.chapters.length<1||(this.render().addListeners(),this.$active=document.querySelector(`#chapter-${this.active}`)),this}isClosed(){return this.closed}isSticky(){return"sticky"===this.attr("position")}isFixed(){return"fixed"===this.attr("position")}isInside(){return this.isFixed()||this.isSticky()}isOutside(){return!this.isInside()}_paintEdge(){const t=document.createDocumentFragment(),e=this.attr("title"),s=this.attr("customClass"),i=this.$parentElement,r=[];let l,o,n,h,a=null;return i?(this.isInside()&&(a=A("h2",{className:"outline-chapters__title"},[e]),this.$title=a,r.push(a)),n=A("ul",{className:"outline-chapters__list"},[""]),this.$list=n,h=A("div",{className:"outline-chapters__placeholder"},[""]),this.$placeholder=h,o=A("div",{className:"outline-chapters__main"},[n,h]),this.$main=o,r.push(o),l=A("nav",{id:"outline-chapters",className:"outline-chapters outline-chapters_hidden"},r),this.$el=l,this.isSticky()&&(this.calculateStickyHeight(),U(l,"outline-chapters_sticky")),s&&U(l,s),t.appendChild(l),i.appendChild(t),this):this}render(){const t=this.attr("showCode"),e=this.attr("mounted"),s=this.$parentElement,r=this.chapters;let l,o;return!s||r.length<1||(this._paintEdge(),l=this.$el,o=this.$list,((t,e,s=!1)=>{const i=t=>document.querySelector(`#${t}`);e.forEach((e=>{const r=e.pid,l=e.id,o=e.rel,n=A("span",{className:"outline-chapters__text"},[e.text]),h=A("a",{id:`chapter__anchor-${l}`,className:"outline-chapters__anchor",href:"#"+o,rel:o,"data-id":l},[n]);let a,c,d,u;s&&(a=A("span",{className:"outline-chapters__code","data-id":l},[e.code]),h.insertBefore(a,h.firstChild)),c=A("li",{id:`chapter-${l}`,className:"outline-chapters__item","data-id":l},[h]),-1===r?t.appendChild(c):(u=i(`chapter-${r}`),d=i(`subject-${r}`),d?d.appendChild(c):(d=A("ul",{id:"subject-"+r,className:"outline-chapters__subject"},[c]),u.appendChild(d)))}))})(o,r,t),D(l,"outline-chapters_hidden"),this.positionPlaceholder(this.active),this.offsetTop=d(l),this.offsetWidth=l.offsetWidth,this.isFixed()&&(this.sticky(),I("--outline-chapters-width",`${this.offsetWidth}px`)),i(e)&&e.call(this),this.onObserver()),this}positionPlaceholder(t){const e=this.$main,s=this.$list,i=this.$placeholder,r=s.querySelector(".outline-chapters__anchor"),l=parseInt(Q(e,"padding-top"),10),o=parseInt(Q(e,"border-top-width"),10),n=parseInt(Q(s,"padding-top"),10),h=parseInt(Q(s,"margin-top"),10),a=parseInt(Q(s,"border-top-width"),10);let c,d=r.offsetHeight,u=0;return l&&(u+=l),n&&(u+=n),h&&(u+=h),o&&(u+=o),a&&(u+=a),c=d*t,i.style.cssText=`transform: translateY(${u+c}px);height:${d}px;`,this}highlight(t){const e=this.$el.querySelector(`#chapter__anchor-${t}`),s="outline-chapters_active";return e?(this.$active&&D(this.$active,s),this.active=parseInt(e.getAttribute("data-id"),10),this.$active=e,U(this.$active,s),this.positionPlaceholder(this.active),this):this}sticky(){const t=this.attr("afterSticky"),e="outline-chapters_fixed",s=this.$el,r=this.offsetTop,l=this.$scrollElement.scrollTop;let o;return this.isFixed()?(o=l>=r,o?U(s,e):D(s,e),i(t)&&t.call(this,this.isClosed(),o),this):this}calculateStickyHeight(){const t=document.documentElement,e=Math.max(t.clientHeight||0,window.innerHeight||0);return I("--outline-sticky-height",`${e}px`),this}scrollTo(t,e){const s=this.$scrollElement;return c(s,t,e),this}show(){const t="outline-chapters_folded",e="outline-chapters_hidden",s=this.attr("afterOpened"),r=this.$el,l=this.$parentElement;return this.isInside()?(D(l,e),D(r,e),n((()=>{D(l,t),D(r,t)}),30)):D(r,e),this.closed=!1,i(s)&&s.call(this),this}hide(){const t="outline-chapters_folded",e="outline-chapters_hidden",s=this.attr("afterClosed"),r=this.$el,l=this.$parentElement;return this.isInside()?(U(l,t),U(r,t),n((()=>{U(l,e),U(r,e)}))):U(r,e),this.closed=!0,i(s)&&s.call(this),this}toggle(){const t=this.attr("afterToggle"),e=this.offsetTop,s=this.$scrollElement.scrollTop;let r;return this.isClosed()?this.show():this.hide(),i(t)&&n((()=>{r=s>=e,t.call(this,this.isClosed(),r)})),this}destroy(){const t=this.attr("beforeDestroy"),e=this.attr("afterDestroy");return i(t)&&t.call(this),this.removeListeners(),this.$parentElement.removeChild(this.$el),this.attr(W.DEFAULTS),this.$el=null,this.$title=null,this.$main=null,this.$list=null,this.$placeholder=null,this.$parentElement=null,this.$scrollElement=null,this.chapters=[],this.active=0,this.offsetTop=0,this.$active=null,this.closed=!1,this.scrollTimer&&(clearTimeout(this.scrollTimer),this.scrollTimer=null),this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=null),i(e)&&e.call(this),this.Observer&&(this.Observer=null),this}onObserver(){const t=this.attr("selector");let e=null;return this.Observer=((t,e={})=>{const s=e.root||null,r=e.selector||".outline-heading",l=e.context||null,n={rootMargin:e.rootMargin||"0px 0px -90% 0px"},h=new IntersectionObserver((e=>{e.forEach((e=>{e.intersectionRatio>0&&i(t)&&t.call(l||e.target,e.target)}))}),n),a=o(s)?s:document;return s&&(n.root=s),a.querySelectorAll(r).forEach((t=>{h.observe(t)})),h})((t=>{const s=t.getAttribute("data-id");if(this.playing)return!1;e&&clearTimeout(e),e=n((()=>{this.highlight(s)}),100)}),{selector:t,context:this}),this}onSelect(t){const e=this.attr("stickyHeight"),s=t.delegateTarget,r=s.getAttribute("data-id"),l=s.href.split("#")[1],o=document.querySelector(`#${l}`),h=d(o)-(e+10),a=this.$scrollElement.scrollHeight,c=this.attr("afterScroll"),u=()=>{i(c)&&c.call(this,"chapter"),n((()=>{this.playing=!1,w("toolbar:update",{top:h,min:0,max:a})}))};return this.playing=!0,this.isFixed()?(this.sticky(),n((()=>{this.scrollTo(h,u),this.highlight(r)}),10)):(this.scrollTo(h,u),this.highlight(r)),$(t),this}onScroll(){const t=this.$scrollElement;return this.scrollTimer&&clearTimeout(this.scrollTimer),this.scrollTimer=n((()=>{const e=t.scrollTop,s=t.scrollHeight-t.clientHeight;this.isFixed()&&this.sticky(),w("toolbar:update",{top:e,min:0,max:s})}),100),this}onResize(){return this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=n((()=>{this.calculateStickyHeight()})),this}addListeners(){const t=this.$el,e=this.$scrollElement,s=e.tagName.toLowerCase();let i=e;return"html"!==s&&"body"!==s||(i=window),y(t,".outline-chapters__anchor","click",this.onSelect,this,!0),P(i,"scroll",this.onScroll,this,!0),this.isSticky()&&P(i,"resize",this.onResize,this,!0),this}removeListeners(){const t=this.attr("selector"),e=this.$el,s=this.$scrollElement,i=s.tagName.toLowerCase();let r=s;return"html"!==i&&"body"!==i||(r=window),b(e,"click",this.onSelect),b(r,"scroll",this.onScroll),this.isSticky()&&P(r,"resize",this.onResize),this.Observer&&document.querySelectorAll(t).forEach((t=>{this.Observer.unobserve(t)})),this}}W.DEFAULTS={parentElement:"",scrollElement:"",selector:".outline-heading",active:0,closed:!1,showCode:!0,position:"relative",stickyHeight:0,chapters:[],created:null,mounted:null,afterClosed:null,afterOpened:null,afterScroll:null,beforeDestroy:null,afterDestroy:null,afterSticky:null};const V=(t,e=!0)=>{const s=O(t.icon,{iconSet:t.iconSet||"outline",color:t.color||"",size:t.size}),i=A("a",{className:"outline-toolbar__anchor",href:t.link},[s]),r=A("div",{className:`outline-toolbar__button ${t.name}`},[t.link?i:s]);return U(s,"outline-toolbar__icon"),e&&U(r,"outline-toolbar_rounded"),t.disabled&&U(r,"outline-toolbar_disabled"),r},J="outline-toolbar_disabled",Y="outline-toolbar_hidden";class G extends l{constructor(t){super(),this.attrs=G.DEFAULTS,this.$el=null,this.disabled=!1,this.closed=!1,this.buttons=[],t&&this.initialize(t)}initialize(t){let e;return this.attr(t),e=this.attr("created"),this.disabled=this.attr("disabled"),this.closed=this.attr("closed"),i(e)&&e.call(this),this.render().addListeners(),this}isDisabled(t){const e=this.attr("buttons");let s;return t?(s=e.find((e=>e.name===t)),s?.disabled):this.disabled}isClosed(){return this.closed}highlight(t){const e=this.buttons.find((e=>e.name===t)),s="outline-toolbar_active";let i;return i||(i=e.$el,M(i,s)?D(i,s):U(i,s)),this}render(){const t=this.attr("mounted"),e=this.attr("buttons")||[],s=this.attr("rounded"),r=this.attr("placement"),l=document.createDocumentFragment(),o=document.createDocumentFragment();return x(),e.forEach((t=>{const e=V(t,s);l.appendChild(e),this.buttons.push({name:t.name,$el:e})})),this.$el=A("div",{id:"outline-toolbar",className:`outline-toolbar outline-toolbar_${r}`},[l]),o.appendChild(this.$el),document.body.appendChild(o),this.closed&&this.hide(),this.disabled&&this.disable(),i(t)&&t.call(this),this}add(t){const e=this.$el,s=this.attr("buttons"),l=t.action,o=document.createDocumentFragment();let n;return r(t)?(s.push(t),o.appendChild(V(t))):T(t)&&t.forEach((t=>{o.appendChild(V(t))})),e.appendChild(o),l&&i(l.handler)&&(n=l.type||"click",y(e,`.${t.name}`,n,l.handler)),this}remove(t){const e=this.$el,s=this.attr("buttons"),i=s.find((e=>e.name===t));let r,l=-1;return i?(s.forEach(((e,s)=>{e.name===t&&(l=s)})),l>-1&&this.attr().buttons.splice(l,1),r=e.querySelector(`.${t}`),this.switch(t,!1),e.removeChild(r),this):this}switch(t,e){const s=this.$el,i=this.attr("buttons"),r=i.find((e=>e.name===t));let l,o,n,h;return r?(i.forEach((s=>{s.name===t&&(r.disabled=!e)})),l=r.action,h=s.querySelector(`.${t}`),l&&(o=l.type||"click",n=l.handler),e?(D(h,J),o&&n&&y(s,`.${t}`,o,n)):(U(h,J),o&&n&&b(s,o,n)),this):this}disable(t){const e=this.attr("afterDisabled");return t?this.switch(t,!1):(U(this.$el,J),this.removeListeners(),this.disabled=!0,i(e)&&e.call(this)),this}enable(t){const e=this.attr("afterEnabled");return t?this.switch(t,!0):(this.disabled=!1,D(this.$el,J),this.addListeners(),i(e)&&e.call(this)),this}show(t){const e=this.attr("afterOpened"),s=this.attr("buttons").find((e=>e.name===t)),r=this.$el;let l;if(t){if(!s)return this;l=r.querySelector(`.${t}`),D(l,Y)}else D(r,Y),this.closed=!1,i(e)&&n((()=>{e.call(this)}),310);return this}hide(t){const e=this.attr("afterClosed"),s=this.attr("buttons").find((e=>e.name===t)),r=this.$el;let l;if(t){if(!s)return this;l=r.querySelector(`.${t}`),U(l,Y)}else U(r,Y),this.closed=!0,i(e)&&n((()=>{e.call(this)}),310);return this}toggle(){return this.isClosed()?this.show():this.hide(),this}destroy(){const t=this.attr("beforeDestroy"),e=this.attr("afterDestroy");let s=this.$el;return i(t)&&t.call(this),this.removeListeners(),document.body.removeChild(s),s=null,this.attr(G.DEFAULTS),this.disabled=!1,this.closed=!1,this.buttons=[],i(e)&&e.call(this),this}refresh(){const t=this.$el,e=this.attr("buttons")||[];return this.removeListeners(),t.innerHTML="",e.forEach((t=>{this.$el.appendChild(V(t))})),this.addListeners(),this}addListeners(){const e=this.attr("buttons"),s=this.$el;return!e||e.length<1||e.forEach((e=>{const r=e.action;let l,o,n,h;if(this.disabled)return!1;r&&(o=r.handler,t(o)&&(h=o,r.handler=function(){w(h,e.name)},o=r.handler),l=r.type||"click",n=r.context),i(o)&&y(s,`.${e.name}`,l,o,n||this,!0)})),this}removeListeners(){const t=this.attr("buttons"),e=this.$el;return!t||t.length<1||t.forEach((t=>{const s=t.action;let r,l;if(this.disabled)return!1;s&&(l=s.handler,r=s.type||"click"),i(l)&&b(e,r,l)})),this}}G.DEFAULTS={placement:"ltr",closed:!1,disabled:!1,rounded:!0,buttons:[],created:null,mounted:null,afterClosed:null,afterOpened:null,afterDisabled:null,afterEnabled:null,beforeDestroy:null,afterDestroy:null};const K=(()=>{let t=0;return e=>(t+=1,e?e+"-"+t:"guid-"+t)})(),X=(t,e,s=null)=>{const r=K();let l="symbol"==typeof t?t.toString():t;return i(e)?(v[l]||(v[l]=[]),v[l].push({topic:l,callback:e,context:s,token:r}),r):""},Z=t=>{if(!e(v,t))return!1;delete v[t]},tt=(t,e)=>{if(!_(t))return!1;e?(t=>{const e=Object.keys(v);if(!t||e.length<1)return!1;e.forEach((e=>{const s=v[e];let i;s.forEach(((e,r)=>{e.callback!==t&&e.token!==t||(i=e.topic,s.splice(-1,r))})),s.length<1&&Z(i)}))})(e):Z(t)};class et extends l{constructor(t){super(),this.attrs=et.DEFAULTS,this.anchors=null,this.drawer=null,this.chapters=null,this.toolbar=null,this.buttons=[],t&&this.initialize(t)}initialize(t){return this.attr(t).render().addListeners(),this}getChapters(t=!1){return this.anchors.getChapters(t)}count(){return this.anchors.count()}render(){return this._renderAnchors()._renderChapters()._renderToolbar(),this}_renderAnchors(){const t=this.attr("articleElement"),e=this.attr("selector"),s=this.attr("stickyHeight"),i=this.attr("scrollElement"),r=this.attr("showCode"),l=this.attr("anchorURL"),o=this.attr("afterScroll");return this.anchors=new F({articleElement:t,stickyHeight:s,scrollElement:i,selector:e,showCode:r,anchorURL:l,afterScroll:o}),this}_renderChapters(){const t=this.attr("title"),e=this.attr("stickyHeight"),s=this.attr("scrollElement"),i=this.attr("customClass"),r=this.attr("showCode"),l=this.attr("position"),o=this.attr("placement"),n=this.attr("afterSticky"),h=this.attr("afterToggle"),a=this.attr("afterScroll"),c=this.count();let d,u=this.attr("parentElement");return c<1||(d={scrollElement:s,showCode:r,position:l,title:t,stickyHeight:e,chapters:this.getChapters(),afterSticky:n,afterToggle:h,afterScroll:a},"relative"===l?(this.drawer=new R({placement:o,title:t,size:"tiny",hasOffset:!0,hasPadding:!1,customClass:i,afterClosed:()=>{this.toolbar.toggle()}}),u=this.drawer.$main):d.customClass=i,d.parentElement=u,this.chapters=new W(d)),this}_renderToolbar(){const t=this.attr("placement"),e=this.attr("homepage"),s=this.attr("git"),i=this.attr("tags"),r=this.attr("issues"),l=this.attr("tools"),o=this.count(),n={name:"homepage",icon:"homepage",size:20,link:e},h={name:"github",icon:"github",size:20,link:s},a={name:"tags",icon:"tags",size:20,link:i},c={name:"issues",icon:"issues",size:20,link:r},d={name:"menu",icon:"menu",size:18,action:{type:"click",handler:"toolbar:action:toggle"}},u=[];return u.push({name:"up",icon:"up",size:20,action:{type:"click",handler:"toolbar:action:up"}}),o>0&&u.push(d),e&&u.push(n),s&&u.push(h),i&&u.push(a),r&&u.push(c),l?.length>0&&u.push(...l),u.push({name:"down",icon:"down",size:20,action:{type:"click",handler:"toolbar:action:down"}}),this.buttons=[...u],this.toolbar=new G({placement:t,buttons:u}),this}addButton(t){const e=this.toolbar,s=this.buttons;return s.splice(-1,0,t),e.attr({buttons:s}),e.refresh(),this}removeButton(t){return this.toolbar.remove(t),this}toTop(){const t=this.attr("afterScroll"),e=this.toolbar,s=this.chapters,r=this.count();return r>0&&(s.playing=!0),this.scrollTo(0,(()=>{e.hide("up"),e.show("down"),r>0&&(s.highlight(0),s.playing=!1),i(t)&&t.call(e,"up")})),this}toBottom(){const t=this.attr("afterScroll"),e=a(this.attr("scrollElement")),s=this.toolbar,r=this.chapters,l=this.count(),o=Math.floor(e.scrollHeight-e.clientHeight);return l>0&&(r.playing=!0),this.scrollTo(o,(()=>{s.hide("down"),s.show("up"),l>0&&(r.highlight(l-1),r.playing=!1),i(t)&&t.call(s,"bottom")})),this}scrollTo(t,e){const s=this.attr("scrollElement");return c(s,t,e),this}toggle(){const t=this.attr("position"),e=this.toolbar,s=this.drawer,i=this.chapters;return this.count()<1||("relative"!==t?(i.toggle(),e.highlight("menu")):(e.toggle(),n((()=>{i.isInside()?i.toggle():s.toggle()})))),this}destroy(){let t=this.anchors,e=this.chapters,s=this.drawer,i=this.toolbar,r=!1;const l=this.count();return this.removeListeners(),l>0&&(r=e.isOutside(),e.destroy(),e=null,r&&(s.destroy(),s=null)),i.destroy(),i=null,t.destroy(),t=null,this.attr(et.DEFAULTS),this}onToggle(){return this.toggle(),this}onScrollTop(){return this.toTop(),this}onScrollBottom(){return this.toBottom(),this}onToolbarUpdate({top:t,min:e,max:s}){const i=this.toolbar,r=Math.ceil(t);return r<=e?(i.hide("up"),i.show("down")):r>=s?(i.hide("down"),i.show("up")):r>e&&r"string"==typeof t,e=(t,e)=>{const s=Object.prototype.hasOwnProperty;return t&&s.call(t,e)},s=t=>Object.prototype.toString.apply(t),i=t=>"function"==typeof t||"[object Function]"===s(t),r=t=>("[object Object]"===s(t)||"object"==typeof t||i(t))&&null!==t;class l{constructor(t){this.attrs={},t&&this.initialize(t)}initialize(t){return this.attr(t).render().addListeners(),this}attr(s,i){const l=this.attrs;return t(s)?i&&e(l,s)?(l[s]=i,this):l[s]:r(s)?(o=l,n=s,Object.keys(n).forEach((t=>{e(n,t)&&(o[t]=n[t])})),this):0===arguments.length?l:this;var o,n}render(){return this}destroy(){return this.removeListeners(),this}reload(t){return this.destroy().initialize(this.attr(t)),this}addListeners(){return this}removeListeners(){return this}}const o=t=>!!(r(t)&&t.nodeName&&t.tagName&&1===t.nodeType),n=(t,e=300)=>!!i(t)&&setTimeout((()=>{t()}),e),h=t=>t*t,a=(e=null)=>{let s,i;return e?t(e)?i=document.querySelector(e):o(e)&&(i=e):(s=document.querySelectorAll("html,body"),i=s[0].scrollTop-s[1].scrollTop>=0?s[0]:s[1]),i},c=(t,e,s)=>{const r=a(t);let l=r.scrollTop,o=0;const n=e-l,c=r.scrollHeight,d=e-c<=0?e:c,u=t=>(i(s)&&s(t),!1),p=()=>{if(o+=1,n<0){if(l-=h(o),r.scrollTop=l,l<=e)return r.scrollTop=e,u(e)}else if(l+=h(o),r.scrollTop=l,l>=d)return r.scrollTop=d,u(d);requestAnimationFrame(p)};requestAnimationFrame(p)},d=t=>{let e=t.offsetTop;return null!==t.offsetParent&&(e+=d(t.offsetParent)),e},u=(t,e="")=>{const s=e.replace(/^>/i,"");return!!(e&&s&&t)&&(t.matches?t.matches(s):!!t.msMatchesSelector&&t.msMatchesSelector(s))},p=t=>t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode,m=["focusout","blur","focusin","focus","load","unload","mouseenter","mouseleave"],f=(t,e,s)=>{const i=m.indexOf(e)>-1;s._delegateListener&&delete(s=s._delegateListener)._delegateListener,function(t,e,s){const i=t._listeners;let r=-1;if(i.length<1)return!1;i.forEach(((t,i)=>{const l=t.fn;e===t.type&&(r=i,l===s&&(r=i))})),r>-1&&i.splice(r,1)}(t,e,s),t.removeEventListener(e,s,i)},g=function(e,s,i=!1){const r=t(e)?document.querySelector(e):e,l=r.childNodes,n=((e,s)=>{let i=e._listeners||[];return t(s)&&s&&(i=i.filter((t=>t.type===s))),i})(r,s);n.forEach((t=>{f(r,t.type,t.fn)})),(i||!0===s||1===arguments.length)&&r&&l&&l.forEach((t=>{o(t)&&g(t,s,i)}))},b=(t,e,s)=>{if(!i(s))return g(t,e);f(t,e,s)},y=(t,e,s,i,r,l,o=!1)=>{const n=m.indexOf(s)>-1,h=function(n){const a=function(t){const e=t.target;return(s=e)&&3===s.nodeType?s.parentNode:s;var s}(n),c=((t,e,s,i)=>{const r=s||document;if(!t)return null;do{if(null!=e&&(e.startsWith(">")?t.parentNode===r&&u(t,e):u(t,e))||i&&t===r)return t;if(t===r)break}while(t=p(t))})(a,e,t);let d=l||t;n.delegateTarget=c,!0===l&&(d=r),c&&(!0===o&&b(t,s,h),i.call(d,n,r))};t._listeners||(t._listeners=[]),t._listeners.push({el:t,selector:e,type:s,fn:h,data:r,context:l,capture:n}),i._delegateListener=h,t.addEventListener(s,h,n)},$=function(t){t.stopPropagation(),t.preventDefault()},v={},E=t=>e(v,t)&&v[t].length>0,_=(t,e=!0)=>e?E(t):(t=>{let e=E(t),s=t.lastIndexOf(".");for(;!e&&-1!==s;)s=(t=t.substring(0,s)).lastIndexOf("."),e=E(t);return e})(t),w=(t,e,i=!0)=>{const r=t=>{if(!E(t))return!1;v[t].forEach((t=>{const i=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]","[object BigInt64Array]","[object BigUint64Array]"].indexOf(s(e))>-1?e.toString():e;t.callback.call(t.context||t,i)}))},l=()=>{let e=t,s=t.lastIndexOf(".");for(;-1!==s;)e=e.substring(0,s),s=e.lastIndexOf("."),r(e);r(t),r("*")};if(!_(t))return!1;i?setTimeout(l,10):l()},T=t=>Array.isArray?Array.isArray(t):"[object Array]"===s(t),S=['','','','','','','','',''],L=(e,s="icon")=>t(e)?((t,e="icon")=>{const s=/id="(.*?)"/,i=/^(\w+)-/;return S.find((r=>{const l=s.exec(r)[1];return i.exec(l)[1]===e&&l===("icon"===e?`${e}-${t}`:`${e}-icon-${t}`)}))})(e,s):[...S],x=(e="")=>{const s=document.body;let i=document.querySelector("#outline-icons"),r=[];(e=>{if(!e)return!1;T(e)&&e.length>0?e.forEach((e=>{-1===S.indexOf(e)&&t(e)&&S.push(e)})):t(e)&&S.push(e)})(e),r=L(),i?i.innerHTML=r.join(""):(i=document.createElement("div"),i.innerHTML=``,s.insertBefore(i.firstChild,s.firstChild))},C=e=>!!t(e)&&e.replace(/(^\s+)|(\s+$)/g,""),z=t=>{return!(!r(t)||!(o(t)||(t=>!(!r(t)||"[object NodeList]"!==s(t)))(t)||(e=t,r(e)&&"[object DocumentFragment]"===s(e))||(t=>!(!r(t)||!("[object Text]"===s(t)||t.tagName&&3===t.nodeType)))(t)));var e},k=(t,e,s)=>{let i=t.tagName.toLowerCase();switch(e){case"style":t.style.cssText=s;break;case"value":"input"===i||"textarea"===i?t.value=s:t.setAttribute(e,s);break;case"className":t.className=s;break;default:t.setAttribute(e,s)}},A=(s,i,l)=>{const o=document.createDocumentFragment(),n=document.createElement(s),h=e=>z(e)||t(e),a=e=>{let s;if(!h(e))return!1;z(e)?s=e:t(e)&&(s=document.createTextNode(e)),o.appendChild(s)};return r(i)?Object.keys(i).forEach((t=>{e(i,t)&&k(n,t,i[t])})):T(i)&&i.every((t=>h(t)))&&i.forEach((t=>{a(t)})),T(l)?l.forEach((t=>{a(t)})):a(l),n.appendChild(o),n},N=e=>{const s=new RegExp("^\\s*(?:<\\?xml[^>]*>\\s*)?(?:<\\!doctype svg[^>]*\\s*(?:\\[?(?:\\s*]*>\\s*)*\\]?)*[^>]*>\\s*)?]*>[^]*<\\/svg>\\s*$\\s*$","i");return t(e)&&s.test(e)},O=(e,s={})=>((e,s={})=>{const i=s.size||0,r=s.color||"",l=s.iconSet||"",o=T(i)?i[0]:i,n=T(i)?i[1]:i,h=i?`width:${o}px;height:${n}px;`:"",a=r?h+`color:${r}`:h,c=document.createElement("i");let d,u="",p="";return t(e)?(N(e)?p=e:(u=l&&"icon"!==l?`xlink:href="#${l}-icon-${e}"`:`xlink:href="#icon-${e}"`,p=``),c.className="outline-icon",c.innerHTML=p,N(e)&&(d=c.querySelector("svg"),d.setAttribute("aria-hidden","true"),d.setAttribute("xmlns","http://www.w3.org/2000/svg"),d.setAttribute("class","outline-icon__svg"),d.setAttribute("width","200"),d.setAttribute("height","200"),d.style=a),c):null})(e,s),M=(t,e)=>{const s=new RegExp("(\\s|^)"+e+"(\\s|$)");let i,r;return!!o(t)&&(i=t.className,!!i&&(r=t.classList,r?.contains?t.classList.contains(e):!!s.exec(i)))},D=(t,e)=>{let s,i=t.className;if(!i||!M(t,e))return!1;s=t.classList,s?.remove?s.remove(e):(i=C(i.replace(e,"")),t.className=i)},H=(e,s=!0,i=!0)=>{const r="outline-heading",l=e.innerHTML;let o;if(e.innerHTML=l.replace(/^\d+(\.?\d+)*\s?/gi,""),e.removeAttribute("id"),e.removeAttribute("data-id"),D(e,r),!s)return!1;var n;o=e.querySelector(`.${r}__anchor`),i&&D(e,`${r}_start`),n=C(e.className),t(n)&&""===n&&e.removeAttribute("class"),e.removeChild(o)},j=(e,s=!0)=>{let i=1,r=0;const l=[];return e.forEach(((e,s)=>{const o=e.tagName.replace(/h/i,"");let n=parseInt(o,10),h=-1;var a;n>i?(r+=1,h=1===r?-1:s-1):n===i||nr?1===n?(r=1,h=-1):h=l[s-1].pid:n<=r&&(1===n?r=1:(r-=i-n,r<=1&&(r=1)),h=1===r?-1:((t,e,s)=>{let i,r,l=t[s-1];for(r=0;r]+(>|$)/g,""):"")})})),s?(t=>{const e={};return t.forEach((t=>{const s=JSON.stringify((t=>[t.pid])(t));e[s]=e[s]||[],e[s].push(t),t.index=e[s].length,-1===t.pid&&(t.code=String(t.index))})),Object.keys(e).forEach((s=>{e[s].forEach((e=>{t.filter((t=>t.pid===e.id)).forEach((t=>{t.code=e.code+"."+t.index}))}))})),t})(l):l};class F extends l{constructor(t){super(),this.attrs=F.DEFAULTS,this.$articleElement=null,this.$scrollElement=null,this.$headings=[],this.chapters=[],t&&this.initialize(t)}initialize(e){let s,r,l,n,h;return this.attr(e),h=this.attr("articleElement"),r=this.attr("scrollElement"),l=this.attr("selector"),s=this.attr("created"),t(h)?n=document.querySelector(h):o(h)&&(n=h),n?(this.$articleElement=n,this.$scrollElement=a(r),this.$headings=[...n.querySelectorAll(l)],this.$headings.length<1||(this.chapters=j(this.$headings),i(s)&&s.call(this),this.render().addListeners()),this):this}getChapters(t=!1){const e=this.chapters;return t?((t,e,s)=>{const i={},r=[];return t.forEach(((t,s)=>{i[t[e]]=s,t.children=[]})),t.forEach((e=>{const l=t[i[e[s]]];-1!==e[s]?l.children.push(e):r.push(e)})),r})(e,"id","pid"):e}count(){return this.chapters.length}render(){const t=this.attr("mounted"),e=this.attr("hasAnchor"),s=this.attr("isAtStart"),r=this.attr("showCode"),l=this.attr("anchorURL"),o=this.$headings,n=this.getChapters();return x(),o.forEach(((t,i)=>{const o=n[i].code;((t,e,s)=>{const i=document.createDocumentFragment(),r="outline-heading",l=s.hasAnchor||!0,o=s.isAtStart||!0,n=s.showCode||!1,h=s.chapterCode||"",a=s.anchorURL||"",c=`heading-${e}`,d={id:c,className:o?`${r} ${r}_start`:r,"data-id":e},u=Object.keys(d),p=C(t.innerHTML);let m,f;if(u.forEach((e=>{k(t,e,d[e])})),n&&(t.innerHTML=h+" "+p),!l)return!1;f=O("hash",{iconSet:"outline"}),m=A("a",{id:`anchor-${e}`,className:`${r}__anchor anchor-${e}`,href:a||`#${c}`,target:a?"_blank":"self","data-id":e},[f]),i.appendChild(m),t.appendChild(i)})(t,i,{hasAnchor:e,isAtStart:s,showCode:r,chapterCode:o,anchorURL:l})})),i(t)&&t.call(this),this}scrollTo(t,e){const s=this.$scrollElement;return c(s,t,e),this}destroy(){const t=this.attr("hasAnchor"),e=this.attr("isAtStart"),s=this.attr("beforeDestroy"),r=this.attr("afterDestroy"),l=this.$headings;return i(s)&&s.call(this),this.removeListeners(),l.forEach((s=>{H(s,t,e)})),this.attr(F.DEFAULTS),this.$articleElement=null,this.$scrollElement=null,this.$headings=[],this.chapters=[],i(r)&&r.call(this),this}onAnchorTrigger(t){const e=this.attr("anchorURL"),s=this.attr("afterScroll"),r=this.attr("stickyHeight"),l=t.delegateTarget.parentNode,o=d(l)-(r+10),h=this.$scrollElement,a=h.scrollHeight-h.clientHeight;return this.scrollTo(o,(()=>{i(s)&&s.call(this,"anchor"),n((()=>{w("toolbar:update",{top:o,min:0,max:a})}))})),e||$(t),this}addListeners(){const t=this.$articleElement;return y(t,".outline-heading__anchor","click",this.onAnchorTrigger,this,!0),this}removeListeners(){const t=this.$articleElement;return b(t,"click",this.onAnchorTrigger),this}}F.DEFAULTS={scrollElement:"html,body",articleElement:"#article",selector:"h1,h2,h3,h4,h5,h6",stickyHeight:0,anchorURL:"",hasAnchor:!0,isAtStart:!0,showCode:!1,created:null,mounted:null,afterScroll:null,beforeDestroy:null,afterDestroy:null};const U=(t,e)=>{let s,i;if(M(t,e))return!1;s=t.classList,s?.add?s.add(e):(i=t.className,i+=i.length>0?" "+e:e,t.className=i)},I=(t,e)=>{document.documentElement.style.setProperty(t,e)};let q=2e3;const B=t=>(t?q=t:q+=1,I("--outline-zIndex",`${q}`),q);class R extends l{constructor(t){super(),this.attrs=R.DEFAULTS,this.title="",this.closed=!0,this.$el=null,this.$modal=null,this.$header=null,this.$title=null,this.$close=null,this.$main=null,this.$footer=null,this.$overlay=null,this.zIndex=0,t&&this.initialize(t)}initialize(t){let e;return this.attr(t),this.title=this.attr("title"),e=this.attr("created"),i(e)&&e.call(this),this.render().addListeners(),this}setTitle(t){return this.attr("title",t),this.title=t,this.$title.innerHTML=t,this}isClosed(){return this.closed}render(){const t=this.attr("mounted"),e=this.attr("size"),s=this.attr("placement"),r=this.attr("hasClose"),l=this.attr("hasOverlay"),o=this.attr("hasOffset"),n=this.attr("hasPadding"),h=this.attr("autoHeight"),a=this.attr("customClass");let c,d,u,p,m,f,g,b;return x(),this.zIndex=B(),p=A("h2",{className:"outline-drawer__title"},[this.title]),this.$title=p,r&&(m=A("div",{className:"outline-drawer__close"},[O("close",{size:20})]),this.$close=m),u=A("header",{className:"outline-drawer__header"},[p,m]),this.$header=u,f=A("div",{className:"outline-drawer__main"},[""]),this.$main=f,n||U(f,"outline-drawer_full"),g=A("footer",{className:"outline-drawer__footer"},[""]),this.$footer=g,d=A("div",{className:`outline-drawer__modal outline-drawer_${s} outline-drawer_${e} outline-drawer_closed`},[u,f,g]),this.$modal=d,o&&U(d,"outline-drawer_offset"),h&&U(d,"outline-drawer_auto"),a&&U(d,a),l&&(b=A("div",{className:"outline-drawer__overlay"},[""]),this.$overlay=b),c=A("div",{className:"outline-drawer"},[d,b]),this.$el=c,document.body.appendChild(c),i(t)&&t.call(this),this}open(){const t=this.attr("afterOpened"),e=this.$modal;return U(this.$el,"outline-drawer_opened"),D(e,"outline-drawer_closed"),U(e,"outline-drawer_opened"),n((()=>{this.closed=!1,i(t)&&t.call(this)})),this}close(){const t=this.attr("afterClosed"),e=this.$modal;return D(e,"outline-drawer_opened"),U(e,"outline-drawer_closed"),n((()=>{D(this.$el,"outline-drawer_opened"),this.closed=!0,i(t)&&t.call(this)})),this}toggle(){const t=this.attr("afterToggle"),e=this.isClosed();return e?this.open():this.close(),i(t)&&n((()=>{t.call(this,e)})),this}destroy(){const t=this.attr("afterDestroy"),e=this.attr("beforeDestroy");let s=this.zIndex;return i(e)&&e.call(this),this.removeListeners(),this.attrs=R.DEFAULTS,this.title="",this.closed=!1,this.$el=null,this.$modal=null,this.$header=null,this.$title=null,this.$close=null,this.$main=null,this.$footer=null,this.$overlay=null,s-=1,B(s),this.zIndex=0,i(t)&&t.call(this),this}addListeners(){const t=this.attr("hasClose"),e=this.attr("hasOverlay"),s=this.$el;return t&&y(s,".outline-drawer__close","click",this.onClose,this,!0),e&&y(s,".outline-drawer__overlay","click",this.onClose,this,!0),this}removeListeners(){const t=this.attr("hasClose"),e=this.attr("hasOverlay"),s=this.$el;return t||e?(b(s,"click",this.onClose),this):this}onClose(){return this.close(),this}}R.DEFAULTS={placement:"rtl",title:"标题",size:"regular",hasClose:!0,hasOverlay:!0,hasOffset:!1,hasPadding:!0,autoHeight:!0,created:null,mounted:null,afterClosed:null,afterOpened:null,afterScroll:null,beforeDestroy:null,afterDestroy:null,afterToggle:null};const P=(t,e,s,r,l,o=!1)=>{const n=m.indexOf(e)>-1,h=function(i){let n=l||t;!0===l&&(n=r),!0===o&&b(t,e,h),s.call(n,i,r)};if(!i(s))return!1;t._listeners||(t._listeners=[]),t._listeners.push({el:t,type:e,fn:h,data:r,context:l,capture:n}),s._delegateListener=h,t.addEventListener(e,h,n)},Q=(t,e)=>getComputedStyle(t)[e];class W extends l{constructor(t){super(),this.attrs=W.DEFAULTS,this.$el=null,this.$title=null,this.$main=null,this.$list=null,this.$placeholder=null,this.$parentElement=null,this.$scrollElement=null,this.chapters=[],this.closed=!1,this.active=0,this.offsetTop=0,this.offsetWidth=0,this.$active=null,this.scrollTimer=null,this.resizeTimer=null,this.playing=!1,this.Observer=null,t&&this.initialize(t)}initialize(e){let s,r,l,n;return this.attr(e),s=this.attr("created"),r=this.attr("parentElement"),l=this.attr("scrollElement"),t(r)?n=document.querySelector(r):o(r)&&(n=r),this.$parentElement=n,this.$scrollElement=a(l),this.chapters=this.attr("chapters"),this.closed=this.attr("closed"),this.active=this.attr("active"),i(s)&&s.call(this),this.chapters.length<1||(this.render().addListeners(),this.$active=document.querySelector(`#chapter-${this.active}`)),this}isClosed(){return this.closed}isSticky(){return"sticky"===this.attr("position")}isFixed(){return"fixed"===this.attr("position")}isInside(){return this.isFixed()||this.isSticky()}isOutside(){return!this.isInside()}_paintEdge(){const t=document.createDocumentFragment(),e=this.attr("title"),s=this.attr("customClass"),i=this.$parentElement,r=[];let l,o,n,h,a=null;return i?(this.isInside()&&(a=A("h2",{className:"outline-chapters__title"},[e]),this.$title=a,r.push(a)),n=A("ul",{className:"outline-chapters__list"},[""]),this.$list=n,h=A("div",{className:"outline-chapters__placeholder"},[""]),this.$placeholder=h,o=A("div",{className:"outline-chapters__main"},[n,h]),this.$main=o,r.push(o),l=A("nav",{id:"outline-chapters",className:"outline-chapters outline-chapters_hidden"},r),this.$el=l,this.isSticky()&&(this.calculateStickyHeight(),U(l,"outline-chapters_sticky")),s&&U(l,s),t.appendChild(l),i.appendChild(t),this):this}render(){const t=this.attr("showCode"),e=this.attr("mounted"),s=this.$parentElement,r=this.chapters;let l,o;return!s||r.length<1||(this._paintEdge(),l=this.$el,o=this.$list,((t,e,s=!1)=>{const i=t=>document.querySelector(`#${t}`);e.forEach((e=>{const r=e.pid,l=e.id,o=e.rel,n=A("span",{className:"outline-chapters__text"},[e.text]),h=A("a",{id:`chapter__anchor-${l}`,className:"outline-chapters__anchor",href:"#"+o,rel:o,"data-id":l},[n]);let a,c,d,u;s&&(a=A("span",{className:"outline-chapters__code","data-id":l},[e.code]),h.insertBefore(a,h.firstChild)),c=A("li",{id:`chapter-${l}`,className:"outline-chapters__item","data-id":l},[h]),-1===r?t.appendChild(c):(u=i(`chapter-${r}`),d=i(`subject-${r}`),d?d.appendChild(c):(d=A("ul",{id:"subject-"+r,className:"outline-chapters__subject"},[c]),u.appendChild(d)))}))})(o,r,t),D(l,"outline-chapters_hidden"),this.positionPlaceholder(this.active),this.offsetTop=d(l),this.offsetWidth=l.offsetWidth,this.isFixed()&&(this.sticky(),I("--outline-chapters-width",`${this.offsetWidth}px`)),i(e)&&e.call(this),this.onObserver()),this}positionPlaceholder(t){const e=this.$main,s=this.$list,i=this.$placeholder,r=s.querySelector(".outline-chapters__anchor"),l=parseInt(Q(e,"padding-top"),10),o=parseInt(Q(e,"border-top-width"),10),n=parseInt(Q(s,"padding-top"),10),h=parseInt(Q(s,"margin-top"),10),a=parseInt(Q(s,"border-top-width"),10);let c,d=r.offsetHeight,u=0;return l&&(u+=l),n&&(u+=n),h&&(u+=h),o&&(u+=o),a&&(u+=a),c=d*t,i.style.cssText=`transform: translateY(${u+c}px);height:${d}px;`,this}highlight(t){const e=this.$el.querySelector(`#chapter__anchor-${t}`),s="outline-chapters_active";return e?(this.$active&&D(this.$active,s),this.active=parseInt(e.getAttribute("data-id"),10),this.$active=e,U(this.$active,s),this.positionPlaceholder(this.active),this):this}sticky(){const t=this.attr("afterSticky"),e="outline-chapters_fixed",s=this.$el,r=this.offsetTop,l=this.$scrollElement.scrollTop;let o;return this.isFixed()?(o=l>=r,o?U(s,e):D(s,e),i(t)&&t.call(this,this.isClosed(),o),this):this}calculateStickyHeight(){const t=document.documentElement,e=Math.max(t.clientHeight||0,window.innerHeight||0);return I("--outline-sticky-height",`${e}px`),this}scrollTo(t,e){const s=this.$scrollElement;return c(s,t,e),this}show(){const t="outline-chapters_folded",e="outline-chapters_hidden",s=this.attr("afterOpened"),r=this.$el,l=this.$parentElement;return this.isInside()?(D(l,e),D(r,e),n((()=>{D(l,t),D(r,t)}),30)):D(r,e),this.closed=!1,i(s)&&s.call(this),this}hide(){const t="outline-chapters_folded",e="outline-chapters_hidden",s=this.attr("afterClosed"),r=this.$el,l=this.$parentElement;return this.isInside()?(U(l,t),U(r,t),n((()=>{U(l,e),U(r,e)}))):U(r,e),this.closed=!0,i(s)&&s.call(this),this}toggle(){const t=this.attr("afterToggle"),e=this.offsetTop,s=this.$scrollElement.scrollTop;let r;return this.isClosed()?this.show():this.hide(),i(t)&&n((()=>{r=s>=e,t.call(this,this.isClosed(),r)})),this}destroy(){const t=this.attr("beforeDestroy"),e=this.attr("afterDestroy");return i(t)&&t.call(this),this.removeListeners(),this.$parentElement.removeChild(this.$el),this.attr(W.DEFAULTS),this.$el=null,this.$title=null,this.$main=null,this.$list=null,this.$placeholder=null,this.$parentElement=null,this.$scrollElement=null,this.chapters=[],this.active=0,this.offsetTop=0,this.$active=null,this.closed=!1,this.scrollTimer&&(clearTimeout(this.scrollTimer),this.scrollTimer=null),this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=null),i(e)&&e.call(this),this.Observer&&(this.Observer=null),this}onObserver(){const t=this.attr("selector");let e=null;return this.Observer=((t,e={})=>{const s=e.root||null,r=e.selector||".outline-heading",l=e.context||null,n={rootMargin:e.rootMargin||"0px 0px -90% 0px"},h=new IntersectionObserver((e=>{e.forEach((e=>{e.intersectionRatio>0&&i(t)&&t.call(l||e.target,e.target)}))}),n),a=o(s)?s:document;return s&&(n.root=s),a.querySelectorAll(r).forEach((t=>{h.observe(t)})),h})((t=>{const s=t.getAttribute("data-id");if(this.playing)return!1;e&&clearTimeout(e),e=n((()=>{this.highlight(s)}),100)}),{selector:t,context:this}),this}onSelect(t){const e=this.attr("stickyHeight"),s=t.delegateTarget,r=s.getAttribute("data-id"),l=s.href.split("#")[1],o=document.querySelector(`#${l}`),h=d(o)-(e+10),a=this.$scrollElement.scrollHeight,c=this.attr("afterScroll"),u=()=>{i(c)&&c.call(this,"chapter"),n((()=>{this.playing=!1,w("toolbar:update",{top:h,min:0,max:a})}))};return this.playing=!0,this.isFixed()?(this.sticky(),n((()=>{this.scrollTo(h,u),this.highlight(r)}),10)):(this.scrollTo(h,u),this.highlight(r)),$(t),this}onScroll(){const t=this.$scrollElement;return this.scrollTimer&&clearTimeout(this.scrollTimer),this.scrollTimer=n((()=>{const e=t.scrollTop,s=t.scrollHeight-t.clientHeight;this.isFixed()&&this.sticky(),w("toolbar:update",{top:e,min:0,max:s})}),100),this}onResize(){return this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=n((()=>{this.calculateStickyHeight()})),this}addListeners(){const t=this.$el,e=this.$scrollElement,s=e.tagName.toLowerCase();let i=e;return"html"!==s&&"body"!==s||(i=window),y(t,".outline-chapters__anchor","click",this.onSelect,this,!0),P(i,"scroll",this.onScroll,this,!0),this.isSticky()&&P(i,"resize",this.onResize,this,!0),this}removeListeners(){const t=this.attr("selector"),e=this.$el,s=this.$scrollElement,i=s.tagName.toLowerCase();let r=s;return"html"!==i&&"body"!==i||(r=window),b(e,"click",this.onSelect),b(r,"scroll",this.onScroll),this.isSticky()&&P(r,"resize",this.onResize),this.Observer&&document.querySelectorAll(t).forEach((t=>{this.Observer.unobserve(t)})),this}}W.DEFAULTS={parentElement:"",scrollElement:"",selector:".outline-heading",active:0,closed:!1,showCode:!0,position:"relative",stickyHeight:0,chapters:[],created:null,mounted:null,afterClosed:null,afterOpened:null,afterScroll:null,beforeDestroy:null,afterDestroy:null,afterSticky:null};const V=(t,e=!0)=>{const s=O(t.icon,{iconSet:t.iconSet||"outline",color:t.color||"",size:t.size}),i=A("a",{className:"outline-toolbar__anchor",href:t.link},[s]),r=A("div",{className:`outline-toolbar__button ${t.name}`},[t.link?i:s]);return U(s,"outline-toolbar__icon"),e&&U(r,"outline-toolbar_rounded"),t.disabled&&U(r,"outline-toolbar_disabled"),r},J="outline-toolbar_disabled",Y="outline-toolbar_hidden";class G extends l{constructor(t){super(),this.attrs=G.DEFAULTS,this.$el=null,this.disabled=!1,this.closed=!1,this.buttons=[],t&&this.initialize(t)}initialize(t){let e;return this.attr(t),e=this.attr("created"),this.disabled=this.attr("disabled"),this.closed=this.attr("closed"),i(e)&&e.call(this),this.render().addListeners(),this}isDisabled(t){const e=this.attr("buttons");let s;return t?(s=e.find((e=>e.name===t)),s?.disabled):this.disabled}isClosed(){return this.closed}highlight(t){const e=this.buttons.find((e=>e.name===t)),s="outline-toolbar_active";let i;return i||(i=e.$el,M(i,s)?D(i,s):U(i,s)),this}render(){const t=this.attr("mounted"),e=this.attr("buttons")||[],s=this.attr("rounded"),r=this.attr("placement"),l=document.createDocumentFragment(),o=document.createDocumentFragment();return x(),e.forEach((t=>{const e=V(t,s);l.appendChild(e),this.buttons.push({name:t.name,$el:e})})),this.$el=A("div",{id:"outline-toolbar",className:`outline-toolbar outline-toolbar_${r}`},[l]),o.appendChild(this.$el),document.body.appendChild(o),this.closed&&this.hide(),this.disabled&&this.disable(),i(t)&&t.call(this),this}add(t){const e=this.$el,s=this.attr("buttons"),l=t.action,o=document.createDocumentFragment();let n;return r(t)?(s.push(t),o.appendChild(V(t))):T(t)&&t.forEach((t=>{o.appendChild(V(t))})),e.appendChild(o),l&&i(l.handler)&&(n=l.type||"click",y(e,`.${t.name}`,n,l.handler)),this}remove(t){const e=this.$el,s=this.attr("buttons"),i=s.find((e=>e.name===t));let r,l=-1;return i?(s.forEach(((e,s)=>{e.name===t&&(l=s)})),l>-1&&this.attr().buttons.splice(l,1),r=e.querySelector(`.${t}`),this.switch(t,!1),e.removeChild(r),this):this}switch(t,e){const s=this.$el,i=this.attr("buttons"),r=i.find((e=>e.name===t));let l,o,n,h;return r?(i.forEach((s=>{s.name===t&&(r.disabled=!e)})),l=r.action,h=s.querySelector(`.${t}`),l&&(o=l.type||"click",n=l.handler),e?(D(h,J),o&&n&&y(s,`.${t}`,o,n)):(U(h,J),o&&n&&b(s,o,n)),this):this}disable(t){const e=this.attr("afterDisabled");return t?this.switch(t,!1):(U(this.$el,J),this.removeListeners(),this.disabled=!0,i(e)&&e.call(this)),this}enable(t){const e=this.attr("afterEnabled");return t?this.switch(t,!0):(this.disabled=!1,D(this.$el,J),this.addListeners(),i(e)&&e.call(this)),this}show(t){const e=this.attr("afterOpened"),s=this.attr("buttons").find((e=>e.name===t)),r=this.$el;let l;if(t){if(!s)return this;l=r.querySelector(`.${t}`),D(l,Y)}else D(r,Y),this.closed=!1,i(e)&&n((()=>{e.call(this)}),310);return this}hide(t){const e=this.attr("afterClosed"),s=this.attr("buttons").find((e=>e.name===t)),r=this.$el;let l;if(t){if(!s)return this;l=r.querySelector(`.${t}`),U(l,Y)}else U(r,Y),this.closed=!0,i(e)&&n((()=>{e.call(this)}),310);return this}toggle(){return this.isClosed()?this.show():this.hide(),this}destroy(){const t=this.attr("beforeDestroy"),e=this.attr("afterDestroy");let s=this.$el;return i(t)&&t.call(this),this.removeListeners(),document.body.removeChild(s),s=null,this.attr(G.DEFAULTS),this.disabled=!1,this.closed=!1,this.buttons=[],i(e)&&e.call(this),this}refresh(){const t=this.$el,e=this.attr("buttons")||[];return this.removeListeners(),t.innerHTML="",e.forEach((t=>{this.$el.appendChild(V(t))})),this.addListeners(),this}addListeners(){const e=this.attr("buttons"),s=this.$el;return!e||e.length<1||e.forEach((e=>{const r=e.action;let l,o,n,h;if(this.disabled)return!1;r&&(o=r.handler,t(o)&&(h=o,r.handler=function(){w(h,e.name)},o=r.handler),l=r.type||"click",n=r.context),i(o)&&y(s,`.${e.name}`,l,o,n||this,!0)})),this}removeListeners(){const t=this.attr("buttons"),e=this.$el;return!t||t.length<1||t.forEach((t=>{const s=t.action;let r,l;if(this.disabled)return!1;s&&(l=s.handler,r=s.type||"click"),i(l)&&b(e,r,l)})),this}}G.DEFAULTS={placement:"ltr",closed:!1,disabled:!1,rounded:!0,buttons:[],created:null,mounted:null,afterClosed:null,afterOpened:null,afterDisabled:null,afterEnabled:null,beforeDestroy:null,afterDestroy:null};const K=(()=>{let t=0;return e=>(t+=1,e?e+"-"+t:"guid-"+t)})(),X=(t,e,s=null)=>{const r=K();let l="symbol"==typeof t?t.toString():t;return i(e)?(v[l]||(v[l]=[]),v[l].push({topic:l,callback:e,context:s,token:r}),r):""},Z=t=>{if(!e(v,t))return!1;delete v[t]},tt=(t,e)=>{if(!_(t))return!1;e?(t=>{const e=Object.keys(v);if(!t||e.length<1)return!1;e.forEach((e=>{const s=v[e];let i;s.forEach(((e,r)=>{e.callback!==t&&e.token!==t||(i=e.topic,s.splice(-1,r))})),s.length<1&&Z(i)}))})(e):Z(t)};class et extends l{constructor(t){super(),this.attrs=et.DEFAULTS,this.anchors=null,this.drawer=null,this.chapters=null,this.toolbar=null,this.buttons=[],t&&this.initialize(t)}initialize(t){return this.attr(t).render().addListeners(),this}getChapters(t=!1){return this.anchors.getChapters(t)}count(){return this.anchors.count()}render(){const t=this.attr("scrollElement"),e=document.querySelector(t)||document.getElementById(t);return this._renderAnchors()._renderChapters()._renderToolbar(),e&&this.onToolbarUpdate({top:e.scrollTop,min:0,max:e.scrollHeight}),this}_renderAnchors(){const t=this.attr("articleElement"),e=this.attr("selector"),s=this.attr("stickyHeight"),i=this.attr("scrollElement"),r=this.attr("showCode"),l=this.attr("anchorURL"),o=this.attr("afterScroll");return this.anchors=new F({articleElement:t,stickyHeight:s,scrollElement:i,selector:e,showCode:r,anchorURL:l,afterScroll:o}),this}_renderChapters(){const t=this.attr("title"),e=this.attr("stickyHeight"),s=this.attr("scrollElement"),i=this.attr("customClass"),r=this.attr("showCode"),l=this.attr("position"),o=this.attr("placement"),n=this.attr("afterSticky"),h=this.attr("afterToggle"),a=this.attr("afterScroll"),c=this.count();let d,u=this.attr("parentElement");return c<1||(d={scrollElement:s,showCode:r,position:l,title:t,stickyHeight:e,chapters:this.getChapters(),afterSticky:n,afterToggle:h,afterScroll:a},"relative"===l?(this.drawer=new R({placement:o,title:t,size:"tiny",hasOffset:!0,hasPadding:!1,customClass:i,afterClosed:()=>{this.toolbar.toggle()}}),u=this.drawer.$main):d.customClass=i,d.parentElement=u,this.chapters=new W(d)),this}_renderToolbar(){const t=this.attr("placement"),e=this.attr("homepage"),s=this.attr("git"),i=this.attr("tags"),r=this.attr("issues"),l=this.attr("tools"),o=this.count(),n={name:"homepage",icon:"homepage",size:20,link:e},h={name:"github",icon:"github",size:20,link:s},a={name:"tags",icon:"tags",size:20,link:i},c={name:"issues",icon:"issues",size:20,link:r},d={name:"menu",icon:"menu",size:18,action:{type:"click",handler:"toolbar:action:toggle"}},u=[];return u.push({name:"up",icon:"up",size:20,action:{type:"click",handler:"toolbar:action:up"}}),e&&u.push(n),o>0&&u.push(d),s&&u.push(h),i&&u.push(a),r&&u.push(c),l?.length>0&&u.push(...l),u.push({name:"down",icon:"down",size:20,action:{type:"click",handler:"toolbar:action:down"}}),this.buttons=[...u],this.toolbar=new G({placement:t,buttons:u}),this}addButton(t){const e=this.toolbar,s=this.buttons;return s.splice(-1,0,t),e.attr({buttons:s}),e.refresh(),this}removeButton(t){return this.toolbar.remove(t),this}toTop(){const t=this.attr("afterScroll"),e=this.toolbar,s=this.chapters,r=this.count();return r>0&&(s.playing=!0),this.scrollTo(0,(()=>{e.hide("up"),e.show("down"),r>0&&(s.highlight(0),s.playing=!1),i(t)&&t.call(e,"up")})),this}toBottom(){const t=this.attr("afterScroll"),e=a(this.attr("scrollElement")),s=this.toolbar,r=this.chapters,l=this.count(),o=Math.floor(e.scrollHeight-e.clientHeight);return l>0&&(r.playing=!0),this.scrollTo(o,(()=>{s.hide("down"),s.show("up"),l>0&&(r.highlight(l-1),r.playing=!1),i(t)&&t.call(s,"bottom")})),this}scrollTo(t,e){const s=this.attr("scrollElement");return c(s,t,e),this}toggle(){const t=this.attr("position"),e=this.toolbar,s=this.drawer,i=this.chapters;return this.count()<1||("relative"!==t?(i.toggle(),e.highlight("menu")):(e.toggle(),n((()=>{i.isInside()?i.toggle():s.toggle()})))),this}destroy(){let t=this.anchors,e=this.chapters,s=this.drawer,i=this.toolbar,r=!1;const l=this.count();return this.removeListeners(),l>0&&(r=e.isOutside(),e.destroy(),e=null,r&&(s.destroy(),s=null)),i.destroy(),i=null,t.destroy(),t=null,this.attr(et.DEFAULTS),this}onToggle(){return this.toggle(),this}onScrollTop(){return this.toTop(),this}onScrollBottom(){return this.toBottom(),this}onToolbarUpdate({top:t,min:e,max:s}){const i=this.toolbar,r=Math.ceil(t);return r<=e?(i.hide("up"),i.show("down")):r>=s?(i.hide("down"),i.show("up")):r>e&&r {\r\n return typeof str === 'string'\r\n}\r\n\r\nexport default isString\r\n","/**\r\n * 检测对象自身属性中是否具有指定的属性。\r\n * ========================================================================\r\n * @method hasOwn\r\n * @param {Object} obj - (必须)检测的目标对象\r\n * @param {String} prop - (必须)属性名\r\n * @returns {Boolean}\r\n */\r\nconst hasOwn = (obj, prop) => {\r\n const hasOwnProperty = Object.prototype.hasOwnProperty\r\n return obj && hasOwnProperty.call(obj, prop)\r\n}\r\n\r\nexport default hasOwn\r\n","/**\r\n * Object 对象原型上的 toString 方法\r\n * ========================================================================\r\n * @method toString\r\n * @param {*} val\r\n * @returns {string}\r\n */\r\nconst toString = (val) => {\r\n return Object.prototype.toString.apply(val)\r\n}\r\n\r\nexport default toString\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测测试数据是否为 Function 类型\r\n * ========================================================================\r\n * @method isFunction\r\n * @param {*} val - (必须)待检测的数据\r\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\r\n */\r\nconst isFunction = (val) => {\r\n return typeof val === 'function' || toString(val) === '[object Function]'\r\n}\r\n\r\nexport default isFunction\r\n","import toString from '../lang/toString'\r\nimport isFunction from '../types/isFunction'\r\n\r\n/**\r\n * 检测数据是否为 Object 类型\r\n * ========================================================================\r\n * @method isObject\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isObject = (o) => {\r\n return (\r\n (toString(o) === '[object Object]' ||\r\n typeof o === 'object' ||\r\n isFunction(o)) &&\r\n o !== null\r\n )\r\n}\r\n\r\nexport default isObject\r\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\r\n\r\n/**\r\n * 扩展对象\r\n * ========================================================================\r\n * @method extend\r\n * @param {Object} origin\r\n * @param {Object} source\r\n */\r\nconst extend = (origin, source) => {\r\n const keys = Object.keys(source)\r\n\r\n keys.forEach((prop) => {\r\n if (hasOwn(source, prop)) {\r\n origin[prop] = source[prop]\r\n }\r\n })\r\n}\r\n\r\nexport default extend\r\n","import isObject from './isObject'\r\n\r\n/**\r\n * 检测数据是否为 HTMLElement DOM 节点\r\n * ========================================================================\r\n * @method isElement\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isElement = (o) => {\r\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\r\n}\r\n\r\nexport default isElement\r\n","import isFunction from '../types/isFunction'\r\n\r\n/**\r\n * later - 延迟执行方法\r\n * ========================================================================\r\n * @method later\r\n * @param {Function} fn\r\n * @param {Number} [delay]\r\n * @returns {number|boolean}\r\n */\r\nconst later = (fn, delay = 300) => {\r\n if (!isFunction(fn)) {\r\n return false\r\n }\r\n\r\n return setTimeout(() => {\r\n fn()\r\n }, delay)\r\n}\r\n\r\nexport default later\r\n","/**\r\n * 返回给定值的平方值\r\n * ========================================================================\r\n * @method easeInQuad\r\n * @param {Number} x\r\n * @returns {number}\r\n */\r\nconst easeInQuad = (x) => {\r\n return x * x\r\n}\r\n\r\nexport default easeInQuad\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\n\r\n/**\r\n * 通过给的 scrollElement 参数,获取滚动 DOM 元素\r\n * ========================================================================\r\n * @method _getScrollElement\r\n * @param {String|HTMLElement} scrollElement\r\n * @returns {Element}\r\n * @private\r\n */\r\nconst _getScrollElement = (scrollElement = null) => {\r\n let $rootElements\r\n let $scrollElement\r\n\r\n if (!scrollElement) {\r\n $rootElements = document.querySelectorAll('html,body')\r\n $scrollElement =\r\n $rootElements[0].scrollTop - $rootElements[1].scrollTop >= 0\r\n ? $rootElements[0]\r\n : $rootElements[1]\r\n } else {\r\n if (isString(scrollElement)) {\r\n $scrollElement = document.querySelector(scrollElement)\r\n } else if (isElement(scrollElement)) {\r\n $scrollElement = scrollElement\r\n }\r\n }\r\n\r\n return $scrollElement\r\n}\r\n\r\nexport default _getScrollElement\r\n","import easeInQuad from '../lang/easeInQuad'\r\nimport isFunction from '../types/isFunction'\r\nimport _getScrollElement from './_getScrollElement'\r\n\r\n/**\r\n * 指定 rootElement DOM 节点滚动到指定 top 位置\r\n * ========================================================================\r\n * @method scrollTo\r\n * @param {HTMLElement|Object} [scrollElement] - (必须)要滚动的 DOM 节点\r\n * @param {Number} top - (必须)滚动的 scrollTop 数值\r\n * @param {Function} [afterStop] - (可选)滚动完成的回调函数\r\n */\r\nconst scrollTo = (scrollElement, top, afterStop) => {\r\n const $scrollElement = _getScrollElement(scrollElement)\r\n let scrollTop = $scrollElement.scrollTop\r\n let step = 0\r\n const distance = top - scrollTop\r\n const MAX_HEIGHT = $scrollElement.scrollHeight\r\n const MAX_TOP = top - MAX_HEIGHT <= 0 ? top : MAX_HEIGHT\r\n const stop = (top) => {\r\n if (isFunction(afterStop)) {\r\n afterStop(top)\r\n }\r\n\r\n return false\r\n }\r\n const play = () => {\r\n step += 1\r\n\r\n // 向上滚动\r\n if (distance < 0) {\r\n scrollTop -= easeInQuad(step)\r\n $scrollElement.scrollTop = scrollTop\r\n\r\n if (scrollTop <= top) {\r\n $scrollElement.scrollTop = top\r\n return stop(top)\r\n }\r\n } else {\r\n scrollTop += easeInQuad(step)\r\n $scrollElement.scrollTop = scrollTop\r\n\r\n if (scrollTop >= MAX_TOP) {\r\n $scrollElement.scrollTop = MAX_TOP\r\n return stop(MAX_TOP)\r\n }\r\n }\r\n\r\n requestAnimationFrame(play)\r\n }\r\n\r\n requestAnimationFrame(play)\r\n}\r\n\r\nexport default scrollTo\r\n","/**\r\n * 获取 DOM 节点相对于窗口的 left (纵坐标)值\r\n * ========================================================================\r\n * @method offsetTop\r\n * @param {HTMLElement} el - DOM 节点\r\n * @returns {Number}\r\n */\r\nconst offsetTop = (el) => {\r\n let top = el.offsetTop\r\n\r\n if (el.offsetParent !== null) {\r\n top += offsetTop(el.offsetParent)\r\n }\r\n\r\n return top\r\n}\r\n\r\nexport default offsetTop\r\n","/**\r\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\r\n * ========================================================================\r\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\r\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\r\n * 标 DOM 元素是否为事件代理所期望触发的目标。\r\n * ========================================================================\r\n * @method matches\r\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\r\n * @returns {Boolean}\r\n */\r\nconst matches = (el, selector = '') => {\r\n const sel = selector.replace(/^>/i, '')\r\n\r\n if (!selector || !sel || !el) {\r\n return false\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el.matches) {\r\n return el.matches(sel)\r\n } else if (el.msMatchesSelector) {\r\n return el.msMatchesSelector(sel)\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nexport default matches\r\n","/**\r\n * 获取 DOM 元素的父节点\r\n * ========================================================================\r\n * @method getParentOrHost\r\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\r\n * @returns {*|HTMLElement}\r\n */\r\nconst getParentOrHost = (el) => {\r\n return el.host && el !== document && el.host.nodeType\r\n ? el.host\r\n : el.parentNode\r\n}\r\n\r\nexport default getParentOrHost\r\n","export const CAPTURE_EVENTS = [\r\n 'focusout',\r\n 'blur',\r\n 'focusin',\r\n 'focus',\r\n 'load',\r\n 'unload',\r\n 'mouseenter',\r\n 'mouseleave'\r\n]\r\n","import { CAPTURE_EVENTS } from './enum'\r\nimport _delete from './_delete'\r\n\r\n/**\r\n * (私有方法)取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method _off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} fn - (必须)事件处理器回调函数\r\n * @private\r\n */\r\nconst _off = (el, type, fn) => {\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n /* istanbul ignore else */\r\n if (fn._delegateListener) {\r\n fn = fn._delegateListener\r\n delete fn._delegateListener\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n _delete(el, type, fn)\r\n\r\n el.removeEventListener(type, fn, capture)\r\n}\r\n\r\nexport default _off\r\n","/**\r\n * 删除 DOM 元素缓存的 _listeners 数据\r\n * ========================================================================\r\n * @method _delete\r\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\r\n * @param {String} type - 事件类型(名称)\r\n * @param {Function} [fn] - 事件处理器回调函数\r\n */\r\nconst _delete = function (el, type, fn) {\r\n const listeners = el._listeners\r\n let index = -1\r\n\r\n if (listeners.length < 1) {\r\n return false\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n listeners.forEach((listener, i) => {\r\n const handler = listener.fn\r\n\r\n if (type === listener.type) {\r\n index = i\r\n\r\n if (handler === fn) {\r\n index = i\r\n }\r\n }\r\n })\r\n\r\n /* istanbul ignore else */\r\n if (index > -1) {\r\n listeners.splice(index, 1)\r\n }\r\n}\r\n\r\nexport default _delete\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\nimport getListeners from './getListeners'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 销毁(type 类型的)代理事件绑定\r\n * ========================================================================\r\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\r\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\r\n * ========================================================================\r\n * @method purgeElement\r\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\r\n * @param {String|Boolean} type - (必须)事件类型\r\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\r\n */\r\nconst purgeElement = function (el, type, recurse = false) {\r\n const $element = isString(el) ? document.querySelector(el) : el\r\n const $children = $element.childNodes\r\n const listeners = getListeners($element, type)\r\n\r\n listeners.forEach((listener) => {\r\n _off($element, listener.type, listener.fn)\r\n })\r\n\r\n if (\r\n (recurse || type === true || arguments.length === 1) &&\r\n $element &&\r\n $children\r\n ) {\r\n $children.forEach(($child) => {\r\n if (isElement($child)) {\r\n purgeElement($child, type, recurse)\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default purgeElement\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 获取 DOM 元素(type 事件类型)事件绑定信息\r\n * ========================================================================\r\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\r\n * ========================================================================\r\n * @methods getListeners\r\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\r\n * @param {String} [type] - (可选)事件类型\r\n * @returns {Array} - 已绑定的事件信息\r\n */\r\nconst getListeners = (el, type) => {\r\n let listeners = el._listeners || []\r\n\r\n if (isString(type) && type) {\r\n listeners = listeners.filter((listener) => {\r\n return listener.type === type\r\n })\r\n }\r\n\r\n return listeners\r\n}\r\n\r\nexport default getListeners\r\n","import purgeElement from './purgeElement'\r\nimport isFunction from '../types/isFunction'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} [fn] - (可选)事件处理器回调函数\r\n */\r\nconst off = (el, type, fn) => {\r\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\r\n if (!isFunction(fn)) {\r\n return purgeElement(el, type)\r\n }\r\n\r\n _off(el, type, fn)\r\n}\r\n\r\nexport default off\r\n","import closest from '../dom/closest'\r\nimport off from './off'\r\nimport getTarget from './getTarget'\r\n\r\nimport { CAPTURE_EVENTS } from './enum'\r\n\r\n/**\r\n * 绑定代理事件\r\n * ========================================================================\r\n * @method on\r\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\r\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\r\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\r\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\r\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\r\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\r\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\r\n * @param {Boolean} once - (可选)是否仅触发一次\r\n */\r\nconst on = (el, selector, type, fn, data, context, once = false) => {\r\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n const listener = function (evt) {\r\n const target = getTarget(evt)\r\n // 通过 Element.matches 方法获得点击的目标元素\r\n const delegateTarget = closest(target, selector, el)\r\n let overrideContext = context || el\r\n\r\n evt.delegateTarget = delegateTarget\r\n\r\n // 当设置为 true 时,则事件处理器回调函数的\r\n // this 上下文指向为 data 对象\r\n if (context === true) {\r\n overrideContext = data\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (delegateTarget) {\r\n // 仅触发一次\r\n /* istanbul ignore else */\r\n if (once === true) {\r\n off(el, type, listener)\r\n }\r\n\r\n fn.call(overrideContext, evt, data)\r\n }\r\n }\r\n\r\n if (!el._listeners) {\r\n el._listeners = []\r\n }\r\n\r\n // 缓存 options 元素绑定的事件处理器\r\n el._listeners.push({\r\n el,\r\n selector,\r\n type,\r\n fn: listener,\r\n data,\r\n context,\r\n capture\r\n })\r\n\r\n // 缓存包装后的事件处理器\r\n fn._delegateListener = listener\r\n\r\n el.addEventListener(type, listener, capture)\r\n}\r\n\r\nexport default on\r\n","import resolveTextNode from '../dom/resolveTextNode'\r\n\r\n/**\r\n * 返回触发事件的 target DOM 元素\r\n * ========================================================================\r\n * @method getTarget\r\n * @param {Event} evt - Event 对象\r\n * @return {HTMLElement} - Event 对象的 target DOM 元素\r\n */\r\nconst getTarget = function (evt) {\r\n const target = evt.target\r\n\r\n return resolveTextNode(target)\r\n}\r\n\r\nexport default getTarget\r\n","/**\r\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\r\n * resolveTextNode() 方法则会返回实际的目标节点。\r\n * ========================================================================\r\n * @method resolveTextNode\r\n * @param {HTMLElement|Text} el - 要解析的节点\r\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\r\n */\r\nconst resolveTextNode = function (el) {\r\n if (el && el.nodeType === 3) {\r\n return el.parentNode\r\n }\r\n\r\n return el\r\n}\r\n\r\nexport default resolveTextNode\r\n","import matches from './matches'\r\nimport getParentOrHost from './getParentOrHost'\r\n\r\n/**\r\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\r\n * ========================================================================\r\n * @method closest\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)DOM 元素的选择其\r\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\r\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\r\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\r\n */\r\nconst closest = (el, selector, ctx, includeCTX) => {\r\n const context = ctx || document\r\n\r\n if (!el) {\r\n return null\r\n }\r\n\r\n do {\r\n /* istanbul ignore else */\r\n if (\r\n (selector != null &&\r\n (selector.startsWith('>')\r\n ? el.parentNode === context && matches(el, selector)\r\n : matches(el, selector))) ||\r\n (includeCTX && el === context)\r\n ) {\r\n return el\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el === context) {\r\n break\r\n }\r\n\r\n /* jshint boss:true */\r\n } while ((el = getParentOrHost(el)))\r\n}\r\n\r\nexport default closest\r\n","/**\r\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\r\n * ========================================================================\r\n * @method stop\r\n * @param {Event} evt - 事件对象\r\n *\r\n * @example\r\n *
\r\n * Service\r\n * Help\r\n *
\r\n *\r\n * const $nav = document.querySelector('#nav')\r\n * const $service = document.querySelector('.anchor')\r\n *\r\n * on($nav, 'click', function(evt) {\r\n * console.log('你点击了导航栏')\r\n * })\r\n *\r\n * on($anchor, 'click', function(evt) {\r\n * console.log('tagName', this.tagName)\r\n *\r\n * // 工作台输出:'a'\r\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\r\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\r\n * stopEvent(evt)\r\n * })\r\n */\r\nconst stop = function (evt) {\r\n evt.stopPropagation()\r\n evt.preventDefault()\r\n}\r\n\r\nexport default stop\r\n","/**\r\n * 存储订阅者(主题和处理器的)私有对象\r\n * ========================================================================\r\n * @type {{}}\r\n * @private\r\n */\r\nconst _subscribers = {}\r\n\r\nexport default _subscribers\r\n","import _subscribers from './_subscribers'\r\nimport hasOwn from '../lang/hasOwn'\r\n\r\n/**\r\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\r\n * ========================================================================\r\n * @method _hasDirectSubscribersFor\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasDirectSubscribersFor = (topic) => {\r\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\r\n}\r\n\r\nexport default _hasDirectSubscribersFor\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\nimport _hasSubscribers from './_hasSubscribers'\r\n\r\n/**\r\n * 判断是否存在包含 topic 指定的订阅者信息\r\n * ========================================================================\r\n * @method has\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\r\n * @returns {Boolean}\r\n */\r\nconst has = (topic, isDirect = true) => {\r\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\r\n}\r\n\r\nexport default has\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * 判断是否存在包含给定 topic 相关的订阅者信息\r\n * ========================================================================\r\n * @method _hasSubscribers\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasSubscribers = (topic) => {\r\n let found = _hasDirectSubscribersFor(topic)\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (!found && position !== -1) {\r\n topic = topic.substring(0, position)\r\n position = topic.lastIndexOf('.')\r\n found = _hasDirectSubscribersFor(topic)\r\n }\r\n\r\n return found\r\n}\r\n\r\nexport default _hasSubscribers\r\n","import isTypedArray from '../types/isTypedArray'\r\nimport _subscribers from './_subscribers'\r\nimport has from './has'\r\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * (异步)发布订阅主题信息\r\n * ========================================================================\r\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\r\n * ========================================================================\r\n * @method emit\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Object} data - (必须)数据对象\r\n * @param {Boolean} async - (可选) 是否异步发布\r\n */\r\nconst emit = (topic, data, async = true) => {\r\n const execute = (topic) => {\r\n if (!_hasDirectSubscribersFor(topic)) {\r\n return false\r\n }\r\n\r\n _subscribers[topic].forEach((subscriber) => {\r\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\r\n // 采用 toString() 方法转化为普通(JSON)字符串\r\n const message = isTypedArray(data) ? data.toString() : data\r\n\r\n subscriber.callback.call(subscriber.context || subscriber, message)\r\n })\r\n }\r\n const deliver = () => {\r\n let subscriber = topic\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (position !== -1) {\r\n subscriber = subscriber.substring(0, position)\r\n position = subscriber.lastIndexOf('.')\r\n\r\n execute(subscriber)\r\n }\r\n\r\n // 执行 topic 对应的处理器\r\n execute(topic)\r\n // 执行特殊 topic:'*'(监听全部消息的发布)\r\n execute('*')\r\n }\r\n\r\n if (!has(topic)) {\r\n return false\r\n }\r\n\r\n if (async) {\r\n setTimeout(deliver, 10)\r\n } else {\r\n deliver()\r\n }\r\n}\r\n\r\nexport default emit\r\n","import toString from '../lang/toString'\r\n/**\r\n * 判断检测数据是否为 Typed Arrays 类型的数据\r\n * ========================================================================\r\n * @param {*} val\r\n * @returns {boolean}\r\n */\r\nconst isTypedArray = (val) => {\r\n const TYPES = [\r\n '[object Int8Array]',\r\n '[object Uint8Array]',\r\n '[object Uint8ClampedArray]',\r\n '[object Int16Array]',\r\n '[object Uint16Array]',\r\n '[object Int32Array]',\r\n '[object Uint32Array]',\r\n '[object Float32Array]',\r\n '[object Float64Array]',\r\n '[object BigInt64Array]',\r\n '[object BigUint64Array]'\r\n ]\r\n\r\n return TYPES.indexOf(toString(val)) > -1\r\n}\r\n\r\nexport default isTypedArray\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测数据是否为 Array 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isArray = (o) => {\r\n if (Array.isArray) {\r\n return Array.isArray(o)\r\n } else {\r\n return toString(o) === '[object Array]'\r\n }\r\n}\r\n\r\nexport default isArray\r\n","import DEFAULTS from './defaults'\r\n\r\nconst SYMBOLS = [...DEFAULTS]\r\n\r\nexport default SYMBOLS\r\n","const DEFAULTS = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n]\r\n\r\nexport default DEFAULTS\r\n","import isString from '../types/isString'\r\nimport getSymbol from './getSymbol'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n *\r\n * @method getSymbols\r\n * @param {String} [name]\r\n * @param {String} [iconSet]\r\n * @returns {string[]|*}\r\n */\r\nconst getSymbols = (name, iconSet = 'icon') => {\r\n if (isString(name)) {\r\n return getSymbol(name, iconSet)\r\n }\r\n\r\n return [...SYMBOLS]\r\n}\r\n\r\nexport default getSymbols\r\n","import SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method getSymbol\r\n * @param {String} name\r\n * @param {String} [iconSet]\r\n * @returns {String}\r\n */\r\nconst getSymbol = (name, iconSet = 'icon') => {\r\n const patternName = /id=\"(.*?)\"/\r\n const patternSet = /^(\\w+)-/\r\n const symbols = SYMBOLS\r\n\r\n return symbols.find((symbol) => {\r\n const names = patternName.exec(symbol)\r\n const fullName = names[1]\r\n const sets = patternSet.exec(fullName)\r\n const setName = sets[1]\r\n const iconName =\r\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\r\n\r\n return setName === iconSet && fullName === iconName\r\n })\r\n}\r\n\r\nexport default getSymbol\r\n","import add from './add'\r\nimport getSymbols from './getSymbols'\r\n\r\n/**\r\n * 绘制 SVG 图标集\r\n * ========================================================================\r\n * @method paint\r\n * @param {String|Array} symbol\r\n */\r\nconst paint = (symbol = '') => {\r\n const $body = document.body\r\n let $icons = document.querySelector('#outline-icons')\r\n let symbols = []\r\n\r\n add(symbol)\r\n symbols = getSymbols()\r\n\r\n if ($icons) {\r\n $icons.innerHTML = symbols.join('')\r\n } else {\r\n $icons = document.createElement('div')\r\n $icons.innerHTML =\r\n ``\r\n $body.insertBefore($icons.firstChild, $body.firstChild)\r\n }\r\n}\r\n\r\nexport default paint\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method add\r\n * @param {Array|String} symbols\r\n * @return {Boolean}\r\n */\r\nconst add = (symbols) => {\r\n if (!symbols) {\r\n return false\r\n }\r\n\r\n if (isArray(symbols) && symbols.length > 0) {\r\n symbols.forEach((symbol) => {\r\n /* istanbul ignore else */\r\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\r\n SYMBOLS.push(symbol)\r\n }\r\n })\r\n } else {\r\n /* istanbul ignore else */\r\n if (isString(symbols)) {\r\n SYMBOLS.push(symbols)\r\n }\r\n }\r\n}\r\n\r\nexport default add\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 清楚字符串起始位置所有的空格\r\n * ========================================================================\r\n * @method trim\r\n * @param {string} str\r\n * @returns {string|Boolean}\r\n */\r\nconst trim = (str) => {\r\n if (!isString(str)) {\r\n return false\r\n }\r\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\r\n}\r\n\r\nexport default trim\r\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isFragment = (fragment) => {\r\n return !!(\r\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\r\n )\r\n}\r\n\r\nexport default isFragment\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","/**\r\n * 给 DOM 节点设置属性/值\r\n * ========================================================================\r\n * @method setAttribute\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} attr - 属性名称\r\n * @param {String|Number|Boolean} value - 属性值\r\n */\r\nconst setAttribute = (el, attr, value) => {\r\n let tagName = el.tagName.toLowerCase()\r\n\r\n switch (attr) {\r\n case 'style':\r\n el.style.cssText = value\r\n break\r\n case 'value':\r\n if (tagName === 'input' || tagName === 'textarea') {\r\n el.value = value\r\n } else {\r\n el.setAttribute(attr, value)\r\n }\r\n break\r\n case 'className':\r\n el.className = value\r\n break\r\n default:\r\n el.setAttribute(attr, value)\r\n break\r\n }\r\n}\r\n\r\nexport default setAttribute\r\n","import hasOwn from '../lang/hasOwn'\r\nimport isObject from '../types/isObject'\r\nimport isString from '../types/isString'\r\nimport isArray from '../types/isArray'\r\nimport isDOM from '../types/isDOM'\r\nimport setAttribute from './setAttribute'\r\n\r\n/**\r\n * 创建 DOM 节点,并添加属性和子节点\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} tagName - 标签名称\r\n * @param {Object|Array} attrs - 属性对象或者子节点\r\n * @param {Array} [children] - 子节点数组\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (tagName, attrs, children) => {\r\n const $fragment = document.createDocumentFragment()\r\n const $el = document.createElement(tagName)\r\n const isValidChild = (child) => {\r\n return isDOM(child) || isString(child)\r\n }\r\n const append = (child) => {\r\n let $child\r\n\r\n if (!isValidChild(child)) {\r\n return false\r\n }\r\n\r\n if (isDOM(child)) {\r\n $child = child\r\n } else if (isString(child)) {\r\n $child = document.createTextNode(child)\r\n }\r\n\r\n $fragment.appendChild($child)\r\n }\r\n\r\n if (isObject(attrs)) {\r\n Object.keys(attrs).forEach((attr) => {\r\n if (hasOwn(attrs, attr)) {\r\n setAttribute($el, attr, attrs[attr])\r\n }\r\n })\r\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\r\n attrs.forEach((child) => {\r\n append(child)\r\n })\r\n }\r\n\r\n if (isArray(children)) {\r\n children.forEach((child) => {\r\n append(child)\r\n })\r\n } else {\r\n append(children)\r\n }\r\n\r\n $el.appendChild($fragment)\r\n\r\n return $el\r\n}\r\n\r\nexport default createElement\r\n","import isString from './isString'\r\n\r\nconst isSVG = (str) => {\r\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\r\n const doctype =\r\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\r\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\r\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\r\n const pattern = new RegExp(svg, 'i')\r\n\r\n return isString(str) && pattern.test(str)\r\n}\r\n\r\nexport default isSVG\r\n","import createElement from './createElement'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method icon\r\n * @alias createElement\r\n * @see createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst icon = (name, options = {}) => {\r\n return createElement(name, options)\r\n}\r\n\r\nexport default icon\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport isSVG from '../types/isSVG'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (name, options = {}) => {\r\n const size = options.size || 0\r\n const color = options.color || ''\r\n const iconSet = options.iconSet || ''\r\n const width = isArray(size) ? size[0] : size\r\n const height = isArray(size) ? size[1] : size\r\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\r\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\r\n const $icon = document.createElement('i')\r\n let binds = ''\r\n let svg = ''\r\n let $svg\r\n\r\n if (!isString(name)) {\r\n return null\r\n }\r\n\r\n if (isSVG(name)) {\r\n svg = name\r\n } else {\r\n binds =\r\n iconSet && iconSet !== 'icon'\r\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\r\n : `xlink:href=\"#icon-${name}\"`\r\n svg =\r\n `` +\r\n `` +\r\n ``\r\n }\r\n\r\n $icon.className = 'outline-icon'\r\n $icon.innerHTML = svg\r\n\r\n if (isSVG(name)) {\r\n $svg = $icon.querySelector('svg')\r\n $svg.setAttribute('aria-hidden', 'true')\r\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\r\n $svg.setAttribute('class', 'outline-icon__svg')\r\n $svg.setAttribute('width', '200')\r\n $svg.setAttribute('height', '200')\r\n $svg.style = cssRules\r\n }\r\n\r\n return $icon\r\n}\r\n\r\nexport default createElement\r\n","import isElement from '../types/isElement'\r\n/**\r\n * 检测 DOM 节点是否包含名为 className 的样式\r\n * ========================================================================\r\n * @method hasClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst hasClass = (el, className) => {\r\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\r\n let allClass\r\n let classList\r\n\r\n if (!isElement(el)) {\r\n return false\r\n }\r\n\r\n allClass = el.className\r\n\r\n if (!allClass) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.contains) {\r\n return el.classList.contains(className)\r\n }\r\n\r\n return !!pattern.exec(allClass)\r\n}\r\n\r\nexport default hasClass\r\n","import trim from '../lang/trim'\r\nimport hasClass from './hasClass'\r\n\r\n/**\r\n * 移除 DOM 节点的 className 样式\r\n * ========================================================================\r\n * @method removeClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst removeClass = (el, className) => {\r\n let allClass = el.className\r\n let classList\r\n\r\n if (!allClass || !hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.remove) {\r\n classList.remove(className)\r\n } else {\r\n allClass = trim(allClass.replace(className, ''))\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default removeClass\r\n","import removeClass from './utils/dom/removeClass'\r\nimport isEmpty from './utils/types/isEmpty'\r\nimport trim from './utils/lang/trim'\r\n\r\nconst _resetHeading = ($heading, hasAnchor = true, isAtStart = true) => {\r\n const CLS_HEADING = 'outline-heading'\r\n const text = $heading.innerHTML\r\n const pattern = /^\\d+(\\.?\\d+)*\\s?/gi\r\n let $anchor\r\n\r\n $heading.innerHTML = text.replace(pattern, '')\r\n $heading.removeAttribute('id')\r\n $heading.removeAttribute('data-id')\r\n\r\n removeClass($heading, CLS_HEADING)\r\n\r\n if (!hasAnchor) {\r\n return false\r\n }\r\n\r\n $anchor = $heading.querySelector(`.${CLS_HEADING}__anchor`)\r\n\r\n if (isAtStart) {\r\n removeClass($heading, `${CLS_HEADING}_start`)\r\n }\r\n\r\n if (isEmpty(trim($heading.className))) {\r\n $heading.removeAttribute('class')\r\n }\r\n\r\n $heading.removeChild($anchor)\r\n}\r\n\r\nexport default _resetHeading\r\n","import isString from './isString'\r\n/**\r\n * 检测数据是否为空字符串\r\n * ========================================================================\r\n * @method isEmpty\r\n * @param {String} str\r\n * @returns {boolean}\r\n */\r\nconst isEmpty = (str) => {\r\n return isString(str) && str === ''\r\n}\r\n\r\nexport default isEmpty\r\n","import trim from './utils/lang/trim'\r\nimport stripTags from './utils/lang/stripTags'\r\n\r\nimport _getChapterParentIdByDiffer from './_getChapterParentIdByDiffer'\r\nimport _getChaptersWithCode from './_getChaptersWithCode'\r\n\r\nconst getChapters = (headings, showCode = true) => {\r\n let previous = 1\r\n let level = 0\r\n const chapters = []\r\n\r\n headings.forEach((heading, i) => {\r\n const headingLevel = heading.tagName.replace(/h/i, '')\r\n let current = parseInt(headingLevel, 10)\r\n let pid = -1\r\n\r\n // 场景1:当前标题是前一个标题的子标题\r\n // 当前标题的(标题标签)序号 > 前一个标题的序号:两个相连的标题是父标题 -> 子标题关系;\r\n // h2 (前一个标题)\r\n // h3 (当前标题)\r\n if (current > previous) {\r\n level += 1\r\n\r\n // 第一层级的 pid 是 -1\r\n if (level === 1) {\r\n pid = -1\r\n } else {\r\n pid = i - 1\r\n }\r\n }\r\n // 场景2:当前标题和前一个标题层级相同\r\n // 当前标题的(标题标签)序号 = 前一个标题的序号\r\n // h2 (前一个标题)\r\n // h2 (当前标题)\r\n // 当前标题的(标题标签)序号 < 前一个标题的序号,并且当前标题序号 > 当前的级别\r\n // h2\r\n // h4 (前一个标题)\r\n // h3 (当前标题:这种情况我们还是任务 h3 是 h2 的下一级章节)\r\n else if (current === previous || (current < previous && current > level)) {\r\n // H1 的层级肯定是 1\r\n if (current === 1) {\r\n level = 1\r\n pid = -1\r\n } else {\r\n pid = chapters[i - 1].pid\r\n }\r\n }\r\n // 场景3:当前标题比前一个标题层级高\r\n else if (current <= level) {\r\n // H1 的层级肯定是 1\r\n if (current === 1) {\r\n level = 1\r\n } else {\r\n level = level - (previous - current)\r\n\r\n if (level <= 1) {\r\n level = 1\r\n }\r\n }\r\n\r\n // 第一级的标题\r\n if (level === 1) {\r\n pid = -1\r\n } else {\r\n // 通过当前标题和前一个标题之间的等级差,获得当前标题的父标题ID\r\n pid = _getChapterParentIdByDiffer(chapters, previous - current, i)\r\n }\r\n }\r\n\r\n previous = current\r\n\r\n chapters.push({\r\n id: i,\r\n pid: pid,\r\n level: level,\r\n rel: `heading-${i}`,\r\n text: stripTags(trim(heading.innerHTML))\r\n })\r\n })\r\n\r\n return showCode ? _getChaptersWithCode(chapters) : chapters\r\n}\r\n\r\nexport default getChapters\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 过滤所有 HTML 标签\r\n * ========================================================================\r\n * @method stripTags\r\n * @param {string} str\r\n * @returns {string}\r\n */\r\nconst stripTags = (str) => {\r\n if (!isString(str)) {\r\n return ''\r\n }\r\n return str.replace(/<\\/?[^>]+(>|$)/g, '')\r\n}\r\n\r\nexport default stripTags\r\n","const _getChapterParentIdByDiffer = (chapters, differ, index) => {\r\n let previous = chapters[index - 1]\r\n let pid\r\n let i\r\n\r\n for (i = 0; i < differ; i += 1) {\r\n pid = previous.pid\r\n previous = chapters[pid]\r\n }\r\n\r\n pid = previous.pid\r\n\r\n return pid\r\n}\r\n\r\nexport default _getChapterParentIdByDiffer\r\n","const _getChaptersWithCode = (chapters) => {\r\n const groups = {}\r\n const cb = (o) => {\r\n return [o.pid]\r\n }\r\n\r\n chapters.forEach((o) => {\r\n const group = JSON.stringify(cb(o))\r\n\r\n groups[group] = groups[group] || []\r\n groups[group].push(o)\r\n\r\n o.index = groups[group].length\r\n if (o.pid === -1) {\r\n o.code = String(o.index)\r\n }\r\n })\r\n\r\n Object.keys(groups).forEach((group) => {\r\n groups[group].forEach((c) => {\r\n const subjects = chapters.filter((b) => b.pid === c.id)\r\n subjects.forEach((o) => {\r\n o.code = c.code + '.' + o.index\r\n })\r\n })\r\n })\r\n\r\n return chapters\r\n}\r\n\r\nexport default _getChaptersWithCode\r\n","import Base from './base'\r\n\r\n// 在文章的标题生成 anchor 链接\r\nimport isString from './utils/types/isString'\r\nimport isFunction from './utils/types/isFunction'\r\nimport isElement from './utils/types/isElement'\r\nimport toTree from './utils/lang/toTree'\r\nimport later from './utils/lang/later'\r\nimport scrollTo from './utils/dom/scrollTo'\r\nimport _getScrollElement from './utils/dom/_getScrollElement'\r\nimport offsetTop from './utils/dom/offsetTop'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\nimport stop from './utils/event/stop'\r\nimport publish from './utils/observer/emit'\r\nimport paint from './utils/icons/paint'\r\n\r\nimport _updateHeading from './_updateHeading'\r\nimport _resetHeading from './_resetHeading'\r\nimport getChapters from './getChapters'\r\n\r\nclass Anchors extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Anchors.DEFAULTS\r\n this.$articleElement = null\r\n this.$scrollElement = null\r\n this.$headings = []\r\n\r\n this.chapters = []\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n let scrollElement\r\n let selector\r\n let $articleElement\r\n let articleElement\r\n\r\n this.attr(options)\r\n articleElement = this.attr('articleElement')\r\n scrollElement = this.attr('scrollElement')\r\n selector = this.attr('selector')\r\n created = this.attr('created')\r\n\r\n if (isString(articleElement)) {\r\n $articleElement = document.querySelector(articleElement)\r\n } else if (isElement(articleElement)) {\r\n $articleElement = articleElement\r\n }\r\n\r\n if (!$articleElement) {\r\n return this\r\n }\r\n\r\n this.$articleElement = $articleElement\r\n this.$scrollElement = _getScrollElement(scrollElement)\r\n this.$headings = [...$articleElement.querySelectorAll(selector)]\r\n\r\n if (this.$headings.length < 1) {\r\n return this\r\n }\r\n\r\n this.chapters = getChapters(this.$headings)\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n this.render().addListeners()\r\n\r\n return this\r\n }\r\n\r\n getChapters(isTreeStructured = false) {\r\n const chapters = this.chapters\r\n return isTreeStructured ? toTree(chapters, 'id', 'pid') : chapters\r\n }\r\n\r\n count() {\r\n return this.chapters.length\r\n }\r\n\r\n render() {\r\n const mounted = this.attr('mounted')\r\n const hasAnchor = this.attr('hasAnchor')\r\n const isAtStart = this.attr('isAtStart')\r\n const showCode = this.attr('showCode')\r\n const anchorURL = this.attr('anchorURL')\r\n const $headings = this.$headings\r\n const chapters = this.getChapters()\r\n\r\n paint()\r\n\r\n $headings.forEach(($heading, i) => {\r\n const chapterCode = chapters[i].code\r\n _updateHeading($heading, i, {\r\n hasAnchor,\r\n isAtStart,\r\n showCode,\r\n chapterCode,\r\n anchorURL\r\n })\r\n })\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n scrollTo(top, after) {\r\n const el = this.$scrollElement\r\n\r\n scrollTo(el, top, after)\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const hasAnchor = this.attr('hasAnchor')\r\n const isAtStart = this.attr('isAtStart')\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n const afterDestroy = this.attr('afterDestroy')\r\n const $headings = this.$headings\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n $headings.forEach(($heading) => {\r\n _resetHeading($heading, hasAnchor, isAtStart)\r\n })\r\n\r\n this.attr(Anchors.DEFAULTS)\r\n this.$articleElement = null\r\n this.$scrollElement = null\r\n this.$headings = []\r\n this.chapters = []\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n onAnchorTrigger(evt) {\r\n const anchorURL = this.attr('anchorURL')\r\n const afterScroll = this.attr('afterScroll')\r\n const stickyHeight = this.attr('stickyHeight')\r\n const $anchor = evt.delegateTarget\r\n const $heading = $anchor.parentNode\r\n const top = offsetTop($heading) - (stickyHeight + 10)\r\n const $scrollElement = this.$scrollElement\r\n const min = 0\r\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\r\n const after = () => {\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(this, 'anchor')\r\n }\r\n\r\n later(() => {\r\n publish('toolbar:update', {\r\n top,\r\n min,\r\n max\r\n })\r\n })\r\n }\r\n\r\n this.scrollTo(top, after)\r\n\r\n if (!anchorURL) {\r\n stop(evt)\r\n }\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const $articleElement = this.$articleElement\r\n\r\n on(\r\n $articleElement,\r\n '.outline-heading__anchor',\r\n 'click',\r\n this.onAnchorTrigger,\r\n this,\r\n true\r\n )\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const $articleElement = this.$articleElement\r\n\r\n off($articleElement, 'click', this.onAnchorTrigger)\r\n\r\n return this\r\n }\r\n}\r\n\r\nAnchors.DEFAULTS = {\r\n scrollElement: 'html,body',\r\n articleElement: '#article',\r\n selector: 'h1,h2,h3,h4,h5,h6',\r\n stickyHeight: 0,\r\n anchorURL: '',\r\n hasAnchor: true,\r\n isAtStart: true,\r\n showCode: false,\r\n created: null,\r\n mounted: null,\r\n afterScroll: null,\r\n beforeDestroy: null,\r\n afterDestroy: null\r\n}\r\n\r\nexport default Anchors\r\n","const toTree = (list, nodeKey, parentKey) => {\r\n const map = {}\r\n const roots = []\r\n\r\n list.forEach((item, i) => {\r\n // initialize the map\r\n map[item[nodeKey]] = i\r\n // initialize the children\r\n item.children = []\r\n })\r\n\r\n list.forEach((item) => {\r\n const node = list[map[item[parentKey]]]\r\n\r\n if (item[parentKey] !== -1) {\r\n // if you have dangling branches check that map[node.parentId] exists\r\n node.children.push(item)\r\n } else {\r\n roots.push(item)\r\n }\r\n })\r\n\r\n return roots\r\n}\r\n\r\nexport default toTree\r\n","import trim from './utils/lang/trim'\r\nimport createElement from './utils/dom/createElement'\r\nimport setAttribute from './utils/dom/setAttribute'\r\n\r\nimport icon from './utils/icons/icon'\r\n\r\nconst _updateHeading = ($heading, i, options) => {\r\n const $fragment = document.createDocumentFragment()\r\n const CLS_HEADING = 'outline-heading'\r\n const hasAnchor = options.hasAnchor || true\r\n const isAtStart = options.isAtStart || true\r\n const showCode = options.showCode || false\r\n const chapterCode = options.chapterCode || ''\r\n const anchorURL = options.anchorURL || ''\r\n const headingId = `heading-${i}`\r\n const attrs = {\r\n id: headingId,\r\n className: isAtStart ? `${CLS_HEADING} ${CLS_HEADING}_start` : CLS_HEADING,\r\n 'data-id': i\r\n }\r\n const keys = Object.keys(attrs)\r\n const text = trim($heading.innerHTML)\r\n let $anchor\r\n let $icon\r\n\r\n keys.forEach((prop) => {\r\n setAttribute($heading, prop, attrs[prop])\r\n })\r\n\r\n if (showCode) {\r\n $heading.innerHTML = chapterCode + ' ' + text\r\n }\r\n\r\n if (!hasAnchor) {\r\n return false\r\n }\r\n\r\n $icon = icon('hash', { iconSet: 'outline' })\r\n $anchor = createElement(\r\n 'a',\r\n {\r\n id: `anchor-${i}`,\r\n className: `${CLS_HEADING}__anchor anchor-${i}`,\r\n href: anchorURL || `#${headingId}`,\r\n target: anchorURL ? '_blank' : 'self',\r\n 'data-id': i\r\n },\r\n [$icon]\r\n )\r\n $fragment.appendChild($anchor)\r\n $heading.appendChild($fragment)\r\n}\r\n\r\nexport default _updateHeading\r\n","import hasClass from './hasClass'\r\n\r\n/**\r\n * 给 DOM 节点添加名为 className 的样式\r\n * ========================================================================\r\n * @method addClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst addClass = (el, className) => {\r\n let classList\r\n let allClass\r\n\r\n if (hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.add) {\r\n classList.add(className)\r\n } else {\r\n allClass = el.className\r\n allClass += allClass.length > 0 ? ' ' + className : className\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default addClass\r\n","const setProperty = (prop, value) => {\r\n const documentElement = document.documentElement\r\n documentElement.style.setProperty(prop, value)\r\n}\r\n\r\nexport default setProperty\r\n","import setProperty from './utils/dom/setProperty'\r\n\r\nlet index = 2000\r\n\r\nconst zIndex = (idx) => {\r\n if (idx) {\r\n index = idx\r\n } else {\r\n index += 1\r\n }\r\n\r\n setProperty('--outline-zIndex', `${index}`)\r\n\r\n return index\r\n}\r\n\r\nexport default zIndex\r\n","import Base from './base'\r\n\r\nimport later from './utils/lang/later'\r\nimport isFunction from './utils/types/isFunction'\r\nimport addClass from './utils/dom/addClass'\r\nimport removeClass from './utils/dom/removeClass'\r\nimport createElement from './utils/dom/createElement'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\n\r\nimport paint from './utils/icons/paint'\r\nimport icon from './utils/icons/icon'\r\nimport zIndex from './zIndex'\r\n\r\nclass Drawer extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Drawer.DEFAULTS\r\n this.title = ''\r\n this.closed = true\r\n this.$el = null\r\n this.$modal = null\r\n this.$header = null\r\n this.$title = null\r\n this.$close = null\r\n this.$main = null\r\n this.$footer = null\r\n this.$overlay = null\r\n this.zIndex = 0\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n\r\n this.attr(options)\r\n\r\n this.title = this.attr('title')\r\n created = this.attr('created')\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n this.render().addListeners()\r\n return this\r\n }\r\n\r\n setTitle(title) {\r\n this.attr('title', title)\r\n this.title = title\r\n this.$title.innerHTML = title\r\n\r\n return this\r\n }\r\n\r\n isClosed() {\r\n return this.closed\r\n }\r\n\r\n render() {\r\n const mounted = this.attr('mounted')\r\n const size = this.attr('size')\r\n const placement = this.attr('placement')\r\n const hasClose = this.attr('hasClose')\r\n const hasOverlay = this.attr('hasOverlay')\r\n const hasOffset = this.attr('hasOffset')\r\n const hasPadding = this.attr('hasPadding')\r\n const autoHeight = this.attr('autoHeight')\r\n const customClass = this.attr('customClass')\r\n let $el\r\n let $modal\r\n let $header\r\n let $title\r\n let $close\r\n let $main\r\n let $footer\r\n let $overlay\r\n\r\n paint()\r\n this.zIndex = zIndex()\r\n\r\n $title = createElement(\r\n 'h2',\r\n {\r\n className: 'outline-drawer__title'\r\n },\r\n [this.title]\r\n )\r\n this.$title = $title\r\n\r\n if (hasClose) {\r\n $close = createElement(\r\n 'div',\r\n {\r\n className: 'outline-drawer__close'\r\n },\r\n [icon('close', { size: 20 })]\r\n )\r\n this.$close = $close\r\n }\r\n\r\n $header = createElement(\r\n 'header',\r\n {\r\n className: 'outline-drawer__header'\r\n },\r\n [$title, $close]\r\n )\r\n this.$header = $header\r\n\r\n $main = createElement(\r\n 'div',\r\n {\r\n className: 'outline-drawer__main'\r\n },\r\n ['']\r\n )\r\n this.$main = $main\r\n\r\n if (!hasPadding) {\r\n addClass($main, 'outline-drawer_full')\r\n }\r\n\r\n $footer = createElement(\r\n 'footer',\r\n {\r\n className: 'outline-drawer__footer'\r\n },\r\n ['']\r\n )\r\n this.$footer = $footer\r\n\r\n $modal = createElement(\r\n 'div',\r\n {\r\n className: `outline-drawer__modal outline-drawer_${placement} outline-drawer_${size} outline-drawer_closed`\r\n },\r\n [$header, $main, $footer]\r\n )\r\n this.$modal = $modal\r\n\r\n if (hasOffset) {\r\n addClass($modal, 'outline-drawer_offset')\r\n }\r\n\r\n if (autoHeight) {\r\n addClass($modal, 'outline-drawer_auto')\r\n }\r\n\r\n if (customClass) {\r\n addClass($modal, customClass)\r\n }\r\n\r\n if (hasOverlay) {\r\n $overlay = createElement(\r\n 'div',\r\n {\r\n className: 'outline-drawer__overlay'\r\n },\r\n ['']\r\n )\r\n this.$overlay = $overlay\r\n }\r\n\r\n $el = createElement(\r\n 'div',\r\n {\r\n className: `outline-drawer`\r\n },\r\n [$modal, $overlay]\r\n )\r\n this.$el = $el\r\n document.body.appendChild($el)\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n open() {\r\n const opened = this.attr('afterOpened')\r\n const $modal = this.$modal\r\n\r\n addClass(this.$el, 'outline-drawer_opened')\r\n removeClass($modal, 'outline-drawer_closed')\r\n addClass($modal, 'outline-drawer_opened')\r\n\r\n later(() => {\r\n this.closed = false\r\n\r\n if (isFunction(opened)) {\r\n opened.call(this)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n close() {\r\n const closed = this.attr('afterClosed')\r\n const $modal = this.$modal\r\n\r\n removeClass($modal, 'outline-drawer_opened')\r\n addClass($modal, 'outline-drawer_closed')\r\n\r\n later(() => {\r\n removeClass(this.$el, 'outline-drawer_opened')\r\n this.closed = true\r\n\r\n if (isFunction(closed)) {\r\n closed.call(this)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n toggle() {\r\n const afterToggle = this.attr('afterToggle')\r\n const closed = this.isClosed()\r\n\r\n if (closed) {\r\n this.open()\r\n } else {\r\n this.close()\r\n }\r\n\r\n if (isFunction(afterToggle)) {\r\n later(() => {\r\n afterToggle.call(this, closed)\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const afterDestroy = this.attr('afterDestroy')\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n let index = this.zIndex\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n\r\n this.attrs = Drawer.DEFAULTS\r\n this.title = ''\r\n this.closed = false\r\n this.$el = null\r\n this.$modal = null\r\n this.$header = null\r\n this.$title = null\r\n this.$close = null\r\n this.$main = null\r\n this.$footer = null\r\n this.$overlay = null\r\n\r\n index -= 1\r\n zIndex(index)\r\n this.zIndex = 0\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const hasClose = this.attr('hasClose')\r\n const hasOverlay = this.attr('hasOverlay')\r\n const $el = this.$el\r\n\r\n if (hasClose) {\r\n on($el, '.outline-drawer__close', 'click', this.onClose, this, true)\r\n }\r\n\r\n if (hasOverlay) {\r\n on($el, '.outline-drawer__overlay', 'click', this.onClose, this, true)\r\n }\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const hasClose = this.attr('hasClose')\r\n const hasOverlay = this.attr('hasOverlay')\r\n const $el = this.$el\r\n\r\n if (!hasClose && !hasOverlay) {\r\n return this\r\n }\r\n\r\n off($el, 'click', this.onClose)\r\n\r\n return this\r\n }\r\n\r\n onClose() {\r\n this.close()\r\n return this\r\n }\r\n}\r\n\r\nDrawer.DEFAULTS = {\r\n placement: 'rtl',\r\n title: '标题',\r\n size: 'regular',\r\n hasClose: true,\r\n hasOverlay: true,\r\n hasOffset: false,\r\n hasPadding: true,\r\n autoHeight: true,\r\n created: null,\r\n mounted: null,\r\n afterClosed: null,\r\n afterOpened: null,\r\n afterScroll: null,\r\n beforeDestroy: null,\r\n afterDestroy: null,\r\n afterToggle: null\r\n}\r\n\r\nexport default Drawer\r\n","import isFunction from '../types/isFunction'\r\nimport off from './off'\r\n\r\nimport { CAPTURE_EVENTS } from './enum'\r\n\r\n/**\r\n * 绑定事件\r\n * ========================================================================\r\n * @method at\r\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\r\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\r\n * @param {Function|Object} fn - (必须) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\r\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\r\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\r\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\r\n * @param {Boolean} once - (可选)是否仅触发一次\r\n */\r\nconst at = (el, type, fn, data, context, once = false) => {\r\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n const listener = function (evt) {\r\n let overrideContext = context || el\r\n\r\n // 当设置为 true 时,则事件处理器回调函数的\r\n // this 上下文指向为 data 对象\r\n if (context === true) {\r\n overrideContext = data\r\n }\r\n\r\n // 仅触发一次\r\n /* istanbul ignore else */\r\n if (once === true) {\r\n off(el, type, listener)\r\n }\r\n\r\n fn.call(overrideContext, evt, data)\r\n }\r\n\r\n if (!isFunction(fn)) {\r\n return false\r\n }\r\n\r\n if (!el._listeners) {\r\n el._listeners = []\r\n }\r\n\r\n // 缓存 options 元素绑定的事件处理器\r\n el._listeners.push({\r\n el,\r\n type,\r\n fn: listener,\r\n data,\r\n context,\r\n capture\r\n })\r\n\r\n // 缓存包装后的事件处理器\r\n fn._delegateListener = listener\r\n\r\n el.addEventListener(type, listener, capture)\r\n}\r\n\r\nexport default at\r\n","/**\r\n * 获取HTML元素的某个CSS样式值\r\n * ====================================================\r\n * @param el\r\n * @param ruleName\r\n * @returns {*}\r\n */\r\nconst getStyle = (el, ruleName) => {\r\n return getComputedStyle(el)[ruleName]\r\n}\r\n\r\nexport default getStyle\r\n","import Base from './base'\r\n\r\nimport isString from './utils/types/isString'\r\nimport isFunction from './utils/types/isFunction'\r\nimport isElement from './utils/types/isElement'\r\nimport later from './utils/lang/later'\r\nimport at from './utils/event/at'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\nimport stop from './utils/event/stop'\r\nimport createElement from './utils/dom/createElement'\r\nimport scrollTo from './utils/dom/scrollTo'\r\nimport addClass from './utils/dom/addClass'\r\nimport intersection from './utils/dom/intersection'\r\nimport removeClass from './utils/dom/removeClass'\r\nimport offsetTop from './utils/dom/offsetTop'\r\nimport getStyle from './utils/dom/getStyle'\r\nimport setProperty from './utils/dom/setProperty'\r\nimport publish from './utils/observer/emit'\r\n\r\nimport _getScrollElement from './utils/dom/_getScrollElement'\r\nimport _paintChapters from './_paintChapters'\r\n\r\nclass Chapters extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Chapters.DEFAULTS\r\n this.$el = null\r\n this.$title = null\r\n this.$main = null\r\n this.$list = null\r\n this.$placeholder = null\r\n this.$parentElement = null\r\n this.$scrollElement = null\r\n this.chapters = []\r\n this.closed = false\r\n this.active = 0\r\n this.offsetTop = 0\r\n this.offsetWidth = 0\r\n this.$active = null\r\n this.scrollTimer = null\r\n this.resizeTimer = null\r\n this.playing = false\r\n this.Observer = null\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n let parentElement\r\n let scrollElement\r\n let $parent\r\n\r\n this.attr(options)\r\n created = this.attr('created')\r\n parentElement = this.attr('parentElement')\r\n scrollElement = this.attr('scrollElement')\r\n\r\n if (isString(parentElement)) {\r\n $parent = document.querySelector(parentElement)\r\n } else if (isElement(parentElement)) {\r\n $parent = parentElement\r\n }\r\n this.$parentElement = $parent\r\n this.$scrollElement = _getScrollElement(scrollElement)\r\n\r\n this.chapters = this.attr('chapters')\r\n this.closed = this.attr('closed')\r\n this.active = this.attr('active')\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n if (this.chapters.length < 1) {\r\n return this\r\n }\r\n\r\n this.render().addListeners()\r\n\r\n this.$active = document.querySelector(`#chapter-${this.active}`)\r\n\r\n return this\r\n }\r\n\r\n isClosed() {\r\n return this.closed\r\n }\r\n\r\n isSticky() {\r\n const position = this.attr('position')\r\n return position === 'sticky'\r\n }\r\n\r\n isFixed() {\r\n const position = this.attr('position')\r\n return position === 'fixed'\r\n }\r\n\r\n isInside() {\r\n return this.isFixed() || this.isSticky()\r\n }\r\n\r\n isOutside() {\r\n return !this.isInside()\r\n }\r\n\r\n _paintEdge() {\r\n const $fragment = document.createDocumentFragment()\r\n const STICKY = 'outline-chapters_sticky'\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const title = this.attr('title')\r\n const customClass = this.attr('customClass')\r\n const $parentElement = this.$parentElement\r\n const contents = []\r\n let $title = null\r\n let $el\r\n let $main\r\n let $list\r\n let $placeholder\r\n\r\n if (!$parentElement) {\r\n return this\r\n }\r\n\r\n if (this.isInside()) {\r\n $title = createElement(\r\n 'h2',\r\n {\r\n className: 'outline-chapters__title'\r\n },\r\n [title]\r\n )\r\n this.$title = $title\r\n contents.push($title)\r\n }\r\n\r\n $list = createElement(\r\n 'ul',\r\n {\r\n // 为优化性能,添加了 _fixed 和 _hidden\r\n // fixed 为了让 $list 脱离流布局\r\n // hidden 让 $list 不可见\r\n className: `outline-chapters__list`\r\n },\r\n ['']\r\n )\r\n this.$list = $list\r\n\r\n $placeholder = createElement(\r\n 'div',\r\n {\r\n className: 'outline-chapters__placeholder'\r\n },\r\n ['']\r\n )\r\n this.$placeholder = $placeholder\r\n\r\n $main = createElement(\r\n 'div',\r\n {\r\n className: 'outline-chapters__main'\r\n },\r\n [$list, $placeholder]\r\n )\r\n this.$main = $main\r\n contents.push($main)\r\n\r\n $el = createElement(\r\n 'nav',\r\n {\r\n id: 'outline-chapters',\r\n className: `outline-chapters ${HIDDEN}`\r\n },\r\n contents\r\n )\r\n this.$el = $el\r\n\r\n if (this.isSticky()) {\r\n this.calculateStickyHeight()\r\n addClass($el, STICKY)\r\n }\r\n\r\n if (customClass) {\r\n addClass($el, customClass)\r\n }\r\n $fragment.appendChild($el)\r\n $parentElement.appendChild($fragment)\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const showCode = this.attr('showCode')\r\n const mounted = this.attr('mounted')\r\n const $parentElement = this.$parentElement\r\n const chapters = this.chapters\r\n let $el\r\n let $list\r\n\r\n if (!$parentElement || chapters.length < 1) {\r\n return this\r\n }\r\n\r\n this._paintEdge()\r\n\r\n $el = this.$el\r\n $list = this.$list\r\n _paintChapters($list, chapters, showCode)\r\n removeClass($el, HIDDEN)\r\n this.positionPlaceholder(this.active)\r\n\r\n this.offsetTop = offsetTop($el)\r\n this.offsetWidth = $el.offsetWidth\r\n\r\n if (this.isFixed()) {\r\n this.sticky()\r\n setProperty('--outline-chapters-width', `${this.offsetWidth}px`)\r\n }\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n this.onObserver()\r\n\r\n return this\r\n }\r\n\r\n positionPlaceholder(index) {\r\n const $main = this.$main\r\n const $list = this.$list\r\n const $placeholder = this.$placeholder\r\n const $anchor = $list.querySelector('.outline-chapters__anchor')\r\n const mainPaddingTop = parseInt(getStyle($main, 'padding-top'), 10)\r\n const mainBorderTop = parseInt(getStyle($main, 'border-top-width'), 10)\r\n const placeholderPaddingTop = parseInt(getStyle($list, 'padding-top'), 10)\r\n const placeholderMarginTop = parseInt(getStyle($list, 'margin-top'), 10)\r\n const placeholderBorderTop = parseInt(\r\n getStyle($list, 'border-top-width'),\r\n 10\r\n )\r\n let height = $anchor.offsetHeight\r\n let offsetTop = 0\r\n let top\r\n\r\n if (mainPaddingTop) {\r\n offsetTop += mainPaddingTop\r\n }\r\n\r\n if (placeholderPaddingTop) {\r\n offsetTop += placeholderPaddingTop\r\n }\r\n\r\n if (placeholderMarginTop) {\r\n offsetTop += placeholderMarginTop\r\n }\r\n\r\n if (mainBorderTop) {\r\n offsetTop += mainBorderTop\r\n }\r\n\r\n if (placeholderBorderTop) {\r\n offsetTop += placeholderBorderTop\r\n }\r\n\r\n top = height * index\r\n // top:calc(${offsetTop}px + ${top}px);\r\n $placeholder.style.cssText = `transform: translateY(${\r\n offsetTop + top\r\n }px);height:${height}px;`\r\n\r\n return this\r\n }\r\n\r\n highlight(id) {\r\n const $anchor = this.$el.querySelector(`#chapter__anchor-${id}`)\r\n const HIGHLIGHT = 'outline-chapters_active'\r\n\r\n if (!$anchor) {\r\n return this\r\n }\r\n\r\n if (this.$active) {\r\n removeClass(this.$active, HIGHLIGHT)\r\n }\r\n\r\n this.active = parseInt($anchor.getAttribute('data-id'), 10)\r\n this.$active = $anchor\r\n addClass(this.$active, HIGHLIGHT)\r\n\r\n this.positionPlaceholder(this.active)\r\n\r\n return this\r\n }\r\n\r\n sticky() {\r\n const afterSticky = this.attr('afterSticky')\r\n const FIXED = 'outline-chapters_fixed'\r\n const $el = this.$el\r\n const top = this.offsetTop\r\n const scrollTop = this.$scrollElement.scrollTop\r\n let isStickying\r\n\r\n if (!this.isFixed()) {\r\n return this\r\n }\r\n\r\n isStickying = scrollTop >= top\r\n\r\n if (isStickying) {\r\n addClass($el, FIXED)\r\n } else {\r\n removeClass($el, FIXED)\r\n }\r\n\r\n if (isFunction(afterSticky)) {\r\n afterSticky.call(this, this.isClosed(), isStickying)\r\n }\r\n\r\n return this\r\n }\r\n\r\n calculateStickyHeight() {\r\n const documentElement = document.documentElement\r\n const height = Math.max(\r\n documentElement.clientHeight || 0,\r\n window.innerHeight || 0\r\n )\r\n setProperty('--outline-sticky-height', `${height}px`)\r\n return this\r\n }\r\n\r\n scrollTo(top, after) {\r\n const el = this.$scrollElement\r\n\r\n scrollTo(el, top, after)\r\n\r\n return this\r\n }\r\n\r\n show() {\r\n const FOLDED = 'outline-chapters_folded'\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const opened = this.attr('afterOpened')\r\n const $el = this.$el\r\n const $parent = this.$parentElement\r\n\r\n if (this.isInside()) {\r\n removeClass($parent, HIDDEN)\r\n removeClass($el, HIDDEN)\r\n later(() => {\r\n removeClass($parent, FOLDED)\r\n removeClass($el, FOLDED)\r\n }, 30)\r\n } else {\r\n removeClass($el, HIDDEN)\r\n }\r\n this.closed = false\r\n\r\n if (isFunction(opened)) {\r\n opened.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n hide() {\r\n const FOLDED = 'outline-chapters_folded'\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const closed = this.attr('afterClosed')\r\n const $el = this.$el\r\n const $parent = this.$parentElement\r\n\r\n if (this.isInside()) {\r\n addClass($parent, FOLDED)\r\n addClass($el, FOLDED)\r\n later(() => {\r\n addClass($parent, HIDDEN)\r\n addClass($el, HIDDEN)\r\n })\r\n } else {\r\n addClass($el, HIDDEN)\r\n }\r\n this.closed = true\r\n\r\n if (isFunction(closed)) {\r\n closed.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n toggle() {\r\n const afterToggle = this.attr('afterToggle')\r\n const top = this.offsetTop\r\n const scrollTop = this.$scrollElement.scrollTop\r\n let isStickying\r\n\r\n if (this.isClosed()) {\r\n this.show()\r\n } else {\r\n this.hide()\r\n }\r\n\r\n if (isFunction(afterToggle)) {\r\n later(() => {\r\n isStickying = scrollTop >= top\r\n afterToggle.call(this, this.isClosed(), isStickying)\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n const afterDestroy = this.attr('afterDestroy')\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n this.$parentElement.removeChild(this.$el)\r\n\r\n this.attr(Chapters.DEFAULTS)\r\n this.$el = null\r\n this.$title = null\r\n this.$main = null\r\n this.$list = null\r\n this.$placeholder = null\r\n this.$parentElement = null\r\n this.$scrollElement = null\r\n this.chapters = []\r\n this.active = 0\r\n this.offsetTop = 0\r\n this.$active = null\r\n this.closed = false\r\n\r\n if (this.scrollTimer) {\r\n clearTimeout(this.scrollTimer)\r\n this.scrollTimer = null\r\n }\r\n\r\n if (this.resizeTimer) {\r\n clearTimeout(this.resizeTimer)\r\n this.resizeTimer = null\r\n }\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n if (this.Observer) {\r\n this.Observer = null\r\n }\r\n\r\n return this\r\n }\r\n\r\n onObserver() {\r\n const selector = this.attr('selector')\r\n let timer = null\r\n\r\n this.Observer = intersection(\r\n ($heading) => {\r\n const id = $heading.getAttribute('data-id')\r\n\r\n if (this.playing) {\r\n return false\r\n }\r\n\r\n if (timer) {\r\n clearTimeout(timer)\r\n }\r\n\r\n timer = later(() => {\r\n this.highlight(id)\r\n }, 100)\r\n },\r\n {\r\n selector,\r\n context: this\r\n }\r\n )\r\n\r\n return this\r\n }\r\n\r\n onSelect(evt) {\r\n const stickyHeight = this.attr('stickyHeight')\r\n const $anchor = evt.delegateTarget\r\n const id = $anchor.getAttribute('data-id')\r\n const headingId = $anchor.href.split('#')[1]\r\n const $heading = document.querySelector(`#${headingId}`)\r\n const top = offsetTop($heading) - (stickyHeight + 10)\r\n const min = 0\r\n const max = this.$scrollElement.scrollHeight\r\n const afterScroll = this.attr('afterScroll')\r\n const after = () => {\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(this, 'chapter')\r\n }\r\n\r\n later(() => {\r\n this.playing = false\r\n publish('toolbar:update', {\r\n top,\r\n min,\r\n max\r\n })\r\n })\r\n }\r\n\r\n this.playing = true\r\n if (this.isFixed()) {\r\n this.sticky()\r\n later(() => {\r\n this.scrollTo(top, after)\r\n this.highlight(id)\r\n }, 10)\r\n } else {\r\n this.scrollTo(top, after)\r\n this.highlight(id)\r\n }\r\n\r\n stop(evt)\r\n\r\n return this\r\n }\r\n\r\n onScroll() {\r\n const $scrollElement = this.$scrollElement\r\n\r\n if (this.scrollTimer) {\r\n clearTimeout(this.scrollTimer)\r\n }\r\n\r\n this.scrollTimer = later(() => {\r\n const top = $scrollElement.scrollTop\r\n const min = 0\r\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\r\n\r\n if (this.isFixed()) {\r\n this.sticky()\r\n }\r\n\r\n publish('toolbar:update', {\r\n top,\r\n min,\r\n max\r\n })\r\n }, 100)\r\n\r\n return this\r\n }\r\n\r\n onResize() {\r\n if (this.resizeTimer) {\r\n clearTimeout(this.resizeTimer)\r\n }\r\n\r\n this.resizeTimer = later(() => {\r\n this.calculateStickyHeight()\r\n })\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const $el = this.$el\r\n const $scrollElement = this.$scrollElement\r\n const tagName = $scrollElement.tagName.toLowerCase()\r\n let $element = $scrollElement\r\n\r\n if (tagName === 'html' || tagName === 'body') {\r\n $element = window\r\n }\r\n\r\n on($el, '.outline-chapters__anchor', 'click', this.onSelect, this, true)\r\n at($element, 'scroll', this.onScroll, this, true)\r\n if (this.isSticky()) {\r\n at($element, 'resize', this.onResize, this, true)\r\n }\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const selector = this.attr('selector')\r\n const $el = this.$el\r\n const $scrollElement = this.$scrollElement\r\n const tagName = $scrollElement.tagName.toLowerCase()\r\n let $element = $scrollElement\r\n\r\n if (tagName === 'html' || tagName === 'body') {\r\n $element = window\r\n }\r\n\r\n off($el, 'click', this.onSelect)\r\n off($element, 'scroll', this.onScroll)\r\n\r\n if (this.isSticky()) {\r\n at($element, 'resize', this.onResize)\r\n }\r\n\r\n if (this.Observer) {\r\n document.querySelectorAll(selector).forEach((section) => {\r\n this.Observer.unobserve(section)\r\n })\r\n }\r\n\r\n return this\r\n }\r\n}\r\n\r\nChapters.DEFAULTS = {\r\n parentElement: '',\r\n scrollElement: '',\r\n selector: '.outline-heading',\r\n active: 0,\r\n closed: false,\r\n showCode: true,\r\n position: 'relative',\r\n stickyHeight: 0,\r\n chapters: [],\r\n created: null,\r\n mounted: null,\r\n afterClosed: null,\r\n afterOpened: null,\r\n afterScroll: null,\r\n beforeDestroy: null,\r\n afterDestroy: null,\r\n afterSticky: null\r\n}\r\n\r\nexport default Chapters\r\n","import createElement from './utils/dom/createElement'\r\n\r\nconst _paintChapters = ($list, chapters, showCode = false) => {\r\n const byId = (id) => document.querySelector(`#${id}`)\r\n\r\n chapters.forEach((chapter) => {\r\n const pid = chapter.pid\r\n const id = chapter.id\r\n const rel = chapter.rel\r\n const $text = createElement(\r\n 'span',\r\n {\r\n className: 'outline-chapters__text'\r\n },\r\n [chapter.text]\r\n )\r\n const $link = createElement(\r\n 'a',\r\n {\r\n id: `chapter__anchor-${id}`,\r\n className: 'outline-chapters__anchor',\r\n href: '#' + rel,\r\n rel: rel,\r\n 'data-id': id\r\n },\r\n [$text]\r\n )\r\n let $code\r\n let $li\r\n let $ul\r\n let $parent\r\n\r\n if (showCode) {\r\n $code = createElement(\r\n 'span',\r\n {\r\n className: 'outline-chapters__code',\r\n 'data-id': id\r\n },\r\n [chapter.code]\r\n )\r\n\r\n $link.insertBefore($code, $link.firstChild)\r\n }\r\n\r\n $li = createElement(\r\n 'li',\r\n {\r\n id: `chapter-${id}`,\r\n className: 'outline-chapters__item',\r\n 'data-id': id\r\n },\r\n [$link]\r\n )\r\n\r\n if (pid === -1) {\r\n $list.appendChild($li)\r\n } else {\r\n $parent = byId(`chapter-${pid}`)\r\n $ul = byId(`subject-${pid}`)\r\n\r\n if (!$ul) {\r\n $ul = createElement(\r\n 'ul',\r\n {\r\n id: 'subject-' + pid,\r\n className: 'outline-chapters__subject'\r\n },\r\n [$li]\r\n )\r\n\r\n $parent.appendChild($ul)\r\n } else {\r\n $ul.appendChild($li)\r\n }\r\n }\r\n })\r\n}\r\n\r\nexport default _paintChapters\r\n","import isFunction from '../types/isFunction'\r\nimport isElement from '../types/isElement'\r\n\r\n/**\r\n * 通用的 IntersectionObserver 观察者处理器\r\n * ========================================================================\r\n * @method intersection\r\n * @param {Function} fn\r\n * @param {Object} [props]\r\n * @param {Object|HTMLElement} [props.root]\r\n * @param {String} [props.selector]\r\n * @param {Object} [props.context]\r\n * @param {String} [props.attr]\r\n * @param {String} [props.rootMargin]\r\n */\r\nconst intersection = (fn, props = {}) => {\r\n const root = props.root || null\r\n const selector = props.selector || '.outline-heading'\r\n const context = props.context || null\r\n const rootMargin = props.rootMargin || '0px 0px -90% 0px'\r\n const options = {\r\n rootMargin: rootMargin\r\n }\r\n const Observer = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.intersectionRatio > 0) {\r\n if (isFunction(fn)) {\r\n fn.call(context || entry.target, entry.target)\r\n }\r\n }\r\n })\r\n }, options)\r\n const $root = isElement(root) ? root : document\r\n\r\n if (root) {\r\n options.root = root\r\n }\r\n\r\n $root.querySelectorAll(selector).forEach((section) => {\r\n Observer.observe(section)\r\n })\r\n\r\n return Observer\r\n}\r\n\r\nexport default intersection\r\n","import icon from './utils/icons/icon'\r\nimport createElement from './utils/dom/createElement'\r\nimport addClass from './utils/dom/addClass'\r\n\r\nconst _createButton = (button, rounded = true) => {\r\n const $icon = icon(button.icon, {\r\n iconSet: button.iconSet || 'outline',\r\n color: button.color || '',\r\n size: button.size\r\n })\r\n const $anchor = createElement(\r\n 'a',\r\n {\r\n className: `outline-toolbar__anchor`,\r\n href: button.link\r\n },\r\n [$icon]\r\n )\r\n const $button = createElement(\r\n 'div',\r\n {\r\n className: `outline-toolbar__button ${button.name}`\r\n },\r\n [button.link ? $anchor : $icon]\r\n )\r\n\r\n addClass($icon, 'outline-toolbar__icon')\r\n\r\n if (rounded) {\r\n addClass($button, 'outline-toolbar_rounded')\r\n }\r\n\r\n if (button.disabled) {\r\n addClass($button, 'outline-toolbar_disabled')\r\n }\r\n\r\n return $button\r\n}\r\n\r\nexport default _createButton\r\n","import Base from './base'\r\n\r\nimport isString from './utils/types/isString'\r\nimport isFunction from './utils/types/isFunction'\r\nimport isObject from './utils/types/isObject'\r\nimport isArray from './utils/types/isArray'\r\nimport later from './utils/lang/later'\r\nimport createElement from './utils/dom/createElement'\r\nimport addClass from './utils/dom/addClass'\r\nimport hasClass from './utils/dom/hasClass'\r\nimport removeClass from './utils/dom/removeClass'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\nimport publish from './utils/observer/emit'\r\nimport paint from './utils/icons/paint'\r\n\r\nimport _createButton from './_createButton'\r\n\r\nconst DISABLED = 'outline-toolbar_disabled'\r\nconst HIDDEN = 'outline-toolbar_hidden'\r\n\r\nclass Toolbar extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Toolbar.DEFAULTS\r\n this.$el = null\r\n this.disabled = false\r\n this.closed = false\r\n this.buttons = []\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n\r\n this.attr(options)\r\n created = this.attr('created')\r\n this.disabled = this.attr('disabled')\r\n this.closed = this.attr('closed')\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n this.render().addListeners()\r\n\r\n return this\r\n }\r\n\r\n isDisabled(name) {\r\n const buttons = this.attr('buttons')\r\n let button\r\n\r\n if (name) {\r\n button = buttons.find((option) => option.name === name)\r\n\r\n return button?.disabled\r\n }\r\n\r\n return this.disabled\r\n }\r\n\r\n isClosed() {\r\n return this.closed\r\n }\r\n\r\n highlight(name) {\r\n const button = this.buttons.find((item) => item.name === name)\r\n const ACTIVE = 'outline-toolbar_active'\r\n let $button\r\n\r\n if ($button) {\r\n return this\r\n }\r\n\r\n $button = button.$el\r\n\r\n if (hasClass($button, ACTIVE)) {\r\n removeClass($button, ACTIVE)\r\n } else {\r\n addClass($button, ACTIVE)\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n const mounted = this.attr('mounted')\r\n const buttons = this.attr('buttons') || []\r\n const rounded = this.attr('rounded')\r\n const placement = this.attr('placement')\r\n const $buttons = document.createDocumentFragment()\r\n const $fragment = document.createDocumentFragment()\r\n\r\n paint()\r\n\r\n buttons.forEach((button) => {\r\n const $button = _createButton(button, rounded)\r\n\r\n $buttons.appendChild($button)\r\n this.buttons.push({\r\n name: button.name,\r\n $el: $button\r\n })\r\n })\r\n\r\n this.$el = createElement(\r\n 'div',\r\n {\r\n id: 'outline-toolbar',\r\n className: `outline-toolbar outline-toolbar_${placement}`\r\n },\r\n [$buttons]\r\n )\r\n $fragment.appendChild(this.$el)\r\n document.body.appendChild($fragment)\r\n\r\n if (this.closed) {\r\n this.hide()\r\n }\r\n\r\n if (this.disabled) {\r\n this.disable()\r\n }\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n add(button) {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons')\r\n const action = button.action\r\n const $fragment = document.createDocumentFragment()\r\n let type\r\n\r\n if (isObject(button)) {\r\n buttons.push(button)\r\n $fragment.appendChild(_createButton(button))\r\n } else if (isArray(button)) {\r\n button.forEach((item) => {\r\n $fragment.appendChild(_createButton(item))\r\n })\r\n }\r\n $el.appendChild($fragment)\r\n\r\n if (action && isFunction(action.handler)) {\r\n type = action.type || 'click'\r\n on($el, `.${button.name}`, type, action.handler)\r\n }\r\n\r\n return this\r\n }\r\n\r\n remove(name) {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons')\r\n const button = buttons.find((option) => option.name === name)\r\n let index = -1\r\n let $button\r\n\r\n if (!button) {\r\n return this\r\n }\r\n\r\n buttons.forEach((button, i) => {\r\n if (button.name === name) {\r\n index = i\r\n }\r\n })\r\n\r\n if (index > -1) {\r\n this.attr().buttons.splice(index, 1)\r\n }\r\n\r\n $button = $el.querySelector(`.${name}`)\r\n this.switch(name, false)\r\n $el.removeChild($button)\r\n\r\n return this\r\n }\r\n\r\n switch(name, enabled) {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons')\r\n const button = buttons.find((option) => option.name === name)\r\n let action\r\n let type\r\n let listener\r\n let $button\r\n\r\n if (!button) {\r\n return this\r\n }\r\n\r\n buttons.forEach((option) => {\r\n if (option.name === name) {\r\n button.disabled = !enabled\r\n }\r\n })\r\n\r\n action = button.action\r\n $button = $el.querySelector(`.${name}`)\r\n\r\n if (action) {\r\n type = action.type || 'click'\r\n listener = action.handler\r\n }\r\n\r\n if (enabled) {\r\n removeClass($button, DISABLED)\r\n\r\n if (type && listener) {\r\n on($el, `.${name}`, type, listener)\r\n }\r\n } else {\r\n addClass($button, DISABLED)\r\n\r\n if (type && listener) {\r\n off($el, type, listener)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n disable(name) {\r\n const disabled = this.attr('afterDisabled')\r\n\r\n if (name) {\r\n this.switch(name, false)\r\n } else {\r\n addClass(this.$el, DISABLED)\r\n this.removeListeners()\r\n this.disabled = true\r\n\r\n if (isFunction(disabled)) {\r\n disabled.call(this)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n enable(name) {\r\n const enabled = this.attr('afterEnabled')\r\n\r\n if (name) {\r\n this.switch(name, true)\r\n } else {\r\n this.disabled = false\r\n removeClass(this.$el, DISABLED)\r\n this.addListeners()\r\n\r\n if (isFunction(enabled)) {\r\n enabled.call(this)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n show(name) {\r\n const opened = this.attr('afterOpened')\r\n const button = this.attr('buttons').find((option) => option.name === name)\r\n const $el = this.$el\r\n let $button\r\n\r\n if (name) {\r\n if (!button) {\r\n return this\r\n }\r\n\r\n $button = $el.querySelector(`.${name}`)\r\n removeClass($button, HIDDEN)\r\n } else {\r\n removeClass($el, HIDDEN)\r\n this.closed = false\r\n\r\n if (isFunction(opened)) {\r\n later(() => {\r\n opened.call(this)\r\n }, 310)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n hide(name) {\r\n const closed = this.attr('afterClosed')\r\n const button = this.attr('buttons').find((option) => option.name === name)\r\n const $el = this.$el\r\n let $button\r\n\r\n if (name) {\r\n if (!button) {\r\n return this\r\n }\r\n $button = $el.querySelector(`.${name}`)\r\n addClass($button, HIDDEN)\r\n } else {\r\n addClass($el, HIDDEN)\r\n this.closed = true\r\n\r\n if (isFunction(closed)) {\r\n later(() => {\r\n closed.call(this)\r\n }, 310)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n toggle() {\r\n if (this.isClosed()) {\r\n this.show()\r\n } else {\r\n this.hide()\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n const afterDestroy = this.attr('afterDestroy')\r\n let $el = this.$el\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n document.body.removeChild($el)\r\n $el = null\r\n\r\n this.attr(Toolbar.DEFAULTS)\r\n this.disabled = false\r\n this.closed = false\r\n this.buttons = []\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n refresh() {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons') || []\r\n\r\n this.removeListeners()\r\n $el.innerHTML = ''\r\n\r\n buttons.forEach((button) => {\r\n this.$el.appendChild(_createButton(button))\r\n })\r\n\r\n this.addListeners()\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const buttons = this.attr('buttons')\r\n const $el = this.$el\r\n\r\n if (!buttons || buttons.length < 1) {\r\n return this\r\n }\r\n\r\n buttons.forEach((button) => {\r\n const action = button.action\r\n const disabled = this.disabled\r\n let type\r\n let listener\r\n let context\r\n let command\r\n\r\n if (disabled) {\r\n return false\r\n }\r\n\r\n if (action) {\r\n listener = action.handler\r\n if (isString(listener)) {\r\n command = listener\r\n action.handler = function () {\r\n publish(command, button.name)\r\n }\r\n listener = action.handler\r\n }\r\n\r\n type = action.type || 'click'\r\n context = action.context\r\n }\r\n\r\n if (isFunction(listener)) {\r\n on($el, `.${button.name}`, type, listener, context || this, true)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const buttons = this.attr('buttons')\r\n const $el = this.$el\r\n\r\n if (!buttons || buttons.length < 1) {\r\n return this\r\n }\r\n\r\n buttons.forEach((button) => {\r\n const action = button.action\r\n const disabled = this.disabled\r\n let type\r\n let listener\r\n\r\n if (disabled) {\r\n return false\r\n }\r\n\r\n if (action) {\r\n listener = action.handler\r\n type = action.type || 'click'\r\n }\r\n\r\n if (isFunction(listener)) {\r\n off($el, type, listener)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n}\r\n\r\nToolbar.DEFAULTS = {\r\n placement: 'ltr',\r\n closed: false,\r\n disabled: false,\r\n rounded: true,\r\n buttons: [],\r\n created: null,\r\n mounted: null,\r\n afterClosed: null,\r\n afterOpened: null,\r\n afterDisabled: null,\r\n afterEnabled: null,\r\n beforeDestroy: null,\r\n afterDestroy: null\r\n}\r\n\r\nexport default Toolbar\r\n","/**\r\n * 生成唯一 id 字符串的函数\r\n * ========================================================================\r\n * @method guid\r\n * @param {String} [prefix] - 生成 id 的前缀字符串\r\n * @return {String} 返回一个表示唯一 id 的字符串\r\n */\r\nconst guid = (() => {\r\n let uuid = 0\r\n\r\n return (prefix) => {\r\n uuid += 1\r\n\r\n return prefix ? prefix + '-' + uuid : 'guid-' + uuid\r\n }\r\n})()\r\n\r\nexport default guid\r\n","import _subscribers from './_subscribers'\r\nimport isFunction from '../types/isFunction'\r\nimport guid from '../lang/guid'\r\n\r\n/**\r\n * 订阅主题,并给出处理器函数\r\n * ========================================================================\r\n * @method on\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Function} handler - (必须)主题的处理器函数\r\n * @param {Object} [context] - (可选)指定 this 执行上下文\r\n * @return {String} - 唯一的 token 字符串,例如:'guid-1'。\r\n */\r\nconst on = (topic, handler, context = null) => {\r\n const token = guid()\r\n let subject = typeof topic === 'symbol' ? topic.toString() : topic\r\n\r\n if (!isFunction(handler)) {\r\n return ''\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (!_subscribers[subject]) {\r\n _subscribers[subject] = []\r\n }\r\n\r\n _subscribers[subject].push({\r\n topic: subject,\r\n callback: handler,\r\n context,\r\n token\r\n })\r\n\r\n return token\r\n}\r\n\r\nexport default on\r\n","import _subscribers from './_subscribers'\r\nimport hasOwn from '../lang/hasOwn'\r\n\r\n/**\r\n * 删除与给定 topic 相同的订阅者信息\r\n * ========================================================================\r\n * @method _removeSubscriber\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _removeSubscriber = (topic) => {\r\n if (!hasOwn(_subscribers, topic)) {\r\n return false\r\n }\r\n\r\n delete _subscribers[topic]\r\n}\r\n\r\nexport default _removeSubscriber\r\n","import has from './has'\r\nimport _removeSubscriber from './_removeSubscriber'\r\nimport _removeSubscriberByToken from './_removeSubscriberByToken'\r\n\r\n/**\r\n * 取消订阅主题\r\n * ========================================================================\r\n * @method off\r\n * @param {String} topic - (必须)订阅的主题\r\n * @param {Function|String} [token] - (可选)订阅主题的处理器函数或者唯一 Id 值\r\n */\r\nconst off = (topic, token) => {\r\n if (!has(topic)) {\r\n return false\r\n }\r\n\r\n if (token) {\r\n _removeSubscriberByToken(token)\r\n } else {\r\n _removeSubscriber(topic)\r\n }\r\n}\r\n\r\nexport default off\r\n","import _subscribers from './_subscribers'\r\nimport _removeSubscriber from './_removeSubscriber'\r\n\r\n/**\r\n * 通过订阅者 token 值删除订阅者信息\r\n * ========================================================================\r\n * @method _removeSubscriberByToken\r\n * @param {String} token - 订阅者 token 字符串\r\n * @returns {boolean}\r\n * @private\r\n */\r\nconst _removeSubscriberByToken = (token) => {\r\n const keys = Object.keys(_subscribers)\r\n let index = -1\r\n\r\n if (!token || keys.length < 1) {\r\n return false\r\n }\r\n\r\n keys.forEach((subject) => {\r\n const subscriber = _subscribers[subject]\r\n let topic\r\n\r\n subscriber.forEach((execution, j) => {\r\n if (execution.callback === token || execution.token === token) {\r\n topic = execution.topic\r\n subscriber.splice(index, j)\r\n }\r\n })\r\n\r\n /* istanbul ignore else */\r\n if (subscriber.length < 1) {\r\n _removeSubscriber(topic)\r\n }\r\n })\r\n}\r\n\r\nexport default _removeSubscriberByToken\r\n","import Base from './base'\r\nimport Anchors from './anchors'\r\nimport Drawer from './drawer'\r\nimport Chapters from './chapters'\r\nimport Toolbar from './toolbar'\r\n\r\nimport later from './utils/lang/later'\r\nimport isFunction from './utils/types/isFunction'\r\nimport scrollTo from './utils/dom/scrollTo'\r\nimport _getScrollElement from './utils/dom/_getScrollElement'\r\nimport subscribe from './utils/observer/on'\r\nimport unsubscribe from './utils/observer/off'\r\n\r\nclass Outline extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Outline.DEFAULTS\r\n this.anchors = null\r\n this.drawer = null\r\n this.chapters = null\r\n this.toolbar = null\r\n this.buttons = []\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n getChapters(isTreeStructured = false) {\r\n return this.anchors.getChapters(isTreeStructured)\r\n }\r\n\r\n count() {\r\n return this.anchors.count()\r\n }\r\n\r\n render() {\r\n this._renderAnchors()._renderChapters()._renderToolbar()\r\n\r\n return this\r\n }\r\n\r\n _renderAnchors() {\r\n const articleElement = this.attr('articleElement')\r\n const selector = this.attr('selector')\r\n const stickyHeight = this.attr('stickyHeight')\r\n const scrollElement = this.attr('scrollElement')\r\n const showCode = this.attr('showCode')\r\n const anchorURL = this.attr('anchorURL')\r\n const afterScroll = this.attr('afterScroll')\r\n\r\n this.anchors = new Anchors({\r\n articleElement,\r\n stickyHeight,\r\n scrollElement,\r\n selector,\r\n showCode,\r\n anchorURL,\r\n afterScroll\r\n })\r\n\r\n return this\r\n }\r\n\r\n _renderChapters() {\r\n const title = this.attr('title')\r\n const stickyHeight = this.attr('stickyHeight')\r\n const scrollElement = this.attr('scrollElement')\r\n const customClass = this.attr('customClass')\r\n const showCode = this.attr('showCode')\r\n const position = this.attr('position')\r\n const placement = this.attr('placement')\r\n const afterSticky = this.attr('afterSticky')\r\n const afterToggle = this.attr('afterToggle')\r\n const afterScroll = this.attr('afterScroll')\r\n const count = this.count()\r\n let parentElement = this.attr('parentElement')\r\n let CHAPTERS_OPTIONS\r\n\r\n if (count < 1) {\r\n return this\r\n }\r\n\r\n CHAPTERS_OPTIONS = {\r\n scrollElement,\r\n showCode,\r\n position,\r\n title,\r\n stickyHeight,\r\n chapters: this.getChapters(),\r\n afterSticky,\r\n afterToggle,\r\n afterScroll\r\n }\r\n\r\n if (position === 'relative') {\r\n this.drawer = new Drawer({\r\n placement,\r\n title,\r\n size: 'tiny',\r\n hasOffset: true,\r\n hasPadding: false,\r\n customClass,\r\n afterClosed: () => {\r\n const toolbar = this.toolbar\r\n toolbar.toggle()\r\n }\r\n })\r\n parentElement = this.drawer.$main\r\n } else {\r\n CHAPTERS_OPTIONS.customClass = customClass\r\n }\r\n\r\n CHAPTERS_OPTIONS.parentElement = parentElement\r\n this.chapters = new Chapters(CHAPTERS_OPTIONS)\r\n\r\n return this\r\n }\r\n\r\n _renderToolbar() {\r\n const placement = this.attr('placement')\r\n const homepage = this.attr('homepage')\r\n const git = this.attr('git')\r\n const tags = this.attr('tags')\r\n const issues = this.attr('issues')\r\n const tools = this.attr('tools')\r\n const count = this.count()\r\n const UP = {\r\n name: 'up',\r\n icon: 'up',\r\n size: 20,\r\n action: {\r\n type: 'click',\r\n handler: 'toolbar:action:up'\r\n }\r\n }\r\n const HOME = {\r\n name: 'homepage',\r\n icon: 'homepage',\r\n size: 20,\r\n link: homepage\r\n }\r\n const GIT = {\r\n name: 'github',\r\n icon: 'github',\r\n size: 20,\r\n link: git\r\n }\r\n const TAGS = {\r\n name: 'tags',\r\n icon: 'tags',\r\n size: 20,\r\n link: tags\r\n }\r\n const ISSUES = {\r\n name: 'issues',\r\n icon: 'issues',\r\n size: 20,\r\n link: issues\r\n }\r\n const MENU = {\r\n name: 'menu',\r\n icon: 'menu',\r\n size: 18,\r\n action: {\r\n type: 'click',\r\n handler: 'toolbar:action:toggle'\r\n }\r\n }\r\n const DOWN = {\r\n name: 'down',\r\n icon: 'down',\r\n size: 20,\r\n action: {\r\n type: 'click',\r\n handler: 'toolbar:action:down'\r\n }\r\n }\r\n const buttons = []\r\n\r\n buttons.push(UP)\r\n if (count > 0) {\r\n buttons.push(MENU)\r\n }\r\n if (homepage) {\r\n buttons.push(HOME)\r\n }\r\n if (git) {\r\n buttons.push(GIT)\r\n }\r\n if (tags) {\r\n buttons.push(TAGS)\r\n }\r\n if (issues) {\r\n buttons.push(ISSUES)\r\n }\r\n if (tools?.length > 0) {\r\n buttons.push(...tools)\r\n }\r\n buttons.push(DOWN)\r\n this.buttons = [...buttons]\r\n\r\n this.toolbar = new Toolbar({\r\n placement,\r\n buttons: buttons\r\n })\r\n\r\n return this\r\n }\r\n\r\n addButton(button) {\r\n const toolbar = this.toolbar\r\n const buttons = this.buttons\r\n buttons.splice(-1, 0, button)\r\n toolbar.attr({\r\n buttons\r\n })\r\n toolbar.refresh()\r\n return this\r\n }\r\n\r\n removeButton(name) {\r\n this.toolbar.remove(name)\r\n return this\r\n }\r\n\r\n toTop() {\r\n const afterScroll = this.attr('afterScroll')\r\n const toolbar = this.toolbar\r\n const chapters = this.chapters\r\n const count = this.count()\r\n const afterTop = () => {\r\n toolbar.hide('up')\r\n toolbar.show('down')\r\n\r\n if (count > 0) {\r\n chapters.highlight(0)\r\n chapters.playing = false\r\n }\r\n\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(toolbar, 'up')\r\n }\r\n }\r\n\r\n if (count > 0) {\r\n chapters.playing = true\r\n }\r\n this.scrollTo(0, afterTop)\r\n\r\n return this\r\n }\r\n\r\n toBottom() {\r\n const afterScroll = this.attr('afterScroll')\r\n const $scrollElement = _getScrollElement(this.attr('scrollElement'))\r\n const toolbar = this.toolbar\r\n const chapters = this.chapters\r\n const count = this.count()\r\n const top = Math.floor(\r\n $scrollElement.scrollHeight - $scrollElement.clientHeight\r\n )\r\n const afterDown = () => {\r\n toolbar.hide('down')\r\n toolbar.show('up')\r\n\r\n if (count > 0) {\r\n chapters.highlight(count - 1)\r\n chapters.playing = false\r\n }\r\n\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(toolbar, 'bottom')\r\n }\r\n }\r\n\r\n if (count > 0) {\r\n chapters.playing = true\r\n }\r\n this.scrollTo(top, afterDown)\r\n\r\n return this\r\n }\r\n\r\n scrollTo(top, afterScroll) {\r\n const scrollElement = this.attr('scrollElement')\r\n scrollTo(scrollElement, top, afterScroll)\r\n return this\r\n }\r\n\r\n toggle() {\r\n const position = this.attr('position')\r\n const toolbar = this.toolbar\r\n const drawer = this.drawer\r\n const chapters = this.chapters\r\n const count = this.count()\r\n\r\n if (count < 1) {\r\n return this\r\n }\r\n\r\n if (position !== 'relative') {\r\n chapters.toggle()\r\n toolbar.highlight('menu')\r\n } else {\r\n toolbar.toggle()\r\n\r\n later(() => {\r\n if (chapters.isInside()) {\r\n chapters.toggle()\r\n } else {\r\n drawer.toggle()\r\n }\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n let anchors = this.anchors\r\n let chapters = this.chapters\r\n let drawer = this.drawer\r\n let toolbar = this.toolbar\r\n let isOutside = false\r\n const count = this.count()\r\n\r\n this.removeListeners()\r\n\r\n if (count > 0) {\r\n isOutside = chapters.isOutside()\r\n\r\n chapters.destroy()\r\n chapters = null\r\n\r\n if (isOutside) {\r\n drawer.destroy()\r\n drawer = null\r\n }\r\n }\r\n\r\n toolbar.destroy()\r\n toolbar = null\r\n\r\n anchors.destroy()\r\n anchors = null\r\n\r\n this.attr(Outline.DEFAULTS)\r\n\r\n return this\r\n }\r\n\r\n onToggle() {\r\n this.toggle()\r\n return this\r\n }\r\n\r\n onScrollTop() {\r\n this.toTop()\r\n return this\r\n }\r\n\r\n onScrollBottom() {\r\n this.toBottom()\r\n return this\r\n }\r\n\r\n onToolbarUpdate({ top, min, max }) {\r\n const toolbar = this.toolbar\r\n const current = Math.ceil(top)\r\n\r\n if (current <= min) {\r\n toolbar.hide('up')\r\n toolbar.show('down')\r\n } else if (current >= max) {\r\n toolbar.hide('down')\r\n toolbar.show('up')\r\n } else if (current > min && current < max) {\r\n toolbar.show('up')\r\n toolbar.show('down')\r\n }\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n subscribe('toolbar:update', this.onToolbarUpdate, this)\r\n subscribe('toolbar:action:up', this.onScrollTop, this)\r\n subscribe('toolbar:action:toggle', this.onToggle, this)\r\n subscribe('toolbar:action:down', this.onScrollBottom, this)\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n unsubscribe('toolbar:update')\r\n unsubscribe('toolbar:action:up')\r\n unsubscribe('toolbar:action:toggle')\r\n unsubscribe('toolbar:action:down')\r\n return this\r\n }\r\n}\r\n\r\nOutline.DEFAULTS = {\r\n articleElement: '#article',\r\n selector: 'h2,h3,h4,h5,h6',\r\n title: '目录',\r\n scrollElement: 'html,body',\r\n position: 'relative',\r\n parentElement: '#aside',\r\n placement: 'rtl',\r\n showCode: true,\r\n anchorURL: '',\r\n stickyHeight: 0,\r\n homepage: '',\r\n git: '',\r\n tags: '',\r\n issues: '',\r\n tools: [],\r\n customClass: '',\r\n afterSticky: null,\r\n afterToggle: null,\r\n afterScroll: null\r\n}\r\n\r\nif (window.jQuery) {\r\n // 将 Outline 扩展为一个 jquery 插件\r\n // eslint-disable-next-line no-undef\r\n jQuery.extend(jQuery.fn, {\r\n outline: function (options) {\r\n // eslint-disable-next-line no-undef\r\n let $article = jQuery(this)\r\n\r\n return new Outline(\r\n // eslint-disable-next-line no-undef\r\n jQuery.extend({}, options, {\r\n articleElement: $article\r\n })\r\n )\r\n }\r\n })\r\n}\r\n\r\nexport default Outline\r\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isElement","nodeName","tagName","nodeType","later","fn","delay","setTimeout","easeInQuad","x","_getScrollElement","scrollElement","$rootElements","$scrollElement","document","querySelector","querySelectorAll","scrollTop","scrollTo","top","afterStop","step","distance","MAX_HEIGHT","scrollHeight","MAX_TOP","stop","play","requestAnimationFrame","offsetTop","el","offsetParent","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","$children","childNodes","filter","getListeners","$child","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","stopPropagation","preventDefault","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","isArray","Array","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","exec","iconName","getSymbol","paint","$body","body","$icons","symbols","add","innerHTML","join","createElement","insertBefore","firstChild","trim","isDOM","isHTMLCollection","fragment","isTextNode","setAttribute","toLowerCase","style","cssText","className","children","$fragment","createDocumentFragment","$el","isValidChild","child","append","createTextNode","appendChild","every","isSVG","pattern","RegExp","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","hasClass","allClass","classList","contains","removeClass","remove","_resetHeading","$heading","hasAnchor","isAtStart","CLS_HEADING","text","$anchor","removeAttribute","removeChild","getChapters","headings","showCode","previous","level","chapters","heading","headingLevel","current","parseInt","pid","differ","_getChapterParentIdByDiffer","id","rel","groups","group","JSON","stringify","cb","code","String","c","b","_getChaptersWithCode","Anchors","super","DEFAULTS","$articleElement","$headings","created","articleElement","isTreeStructured","list","nodeKey","parentKey","map","roots","item","node","toTree","count","mounted","anchorURL","chapterCode","headingId","href","_updateHeading","after","beforeDestroy","afterDestroy","onAnchorTrigger","afterScroll","stickyHeight","max","clientHeight","publish","min","addClass","setProperty","documentElement","zIndex","idx","Drawer","title","closed","$modal","$header","$title","$close","$main","$footer","$overlay","setTitle","isClosed","placement","hasClose","hasOverlay","hasOffset","hasPadding","autoHeight","customClass","open","opened","close","toggle","afterToggle","onClose","afterClosed","afterOpened","at","getStyle","ruleName","getComputedStyle","Chapters","$list","$placeholder","$parentElement","active","offsetWidth","$active","scrollTimer","resizeTimer","playing","Observer","parentElement","$parent","isSticky","isFixed","isInside","isOutside","_paintEdge","contents","calculateStickyHeight","byId","chapter","$text","$link","$code","$li","$ul","_paintChapters","positionPlaceholder","sticky","onObserver","mainPaddingTop","mainBorderTop","placeholderPaddingTop","placeholderMarginTop","placeholderBorderTop","offsetHeight","highlight","HIGHLIGHT","getAttribute","afterSticky","FIXED","isStickying","Math","window","innerHeight","show","FOLDED","HIDDEN","hide","clearTimeout","timer","props","root","rootMargin","IntersectionObserver","entries","entry","intersectionRatio","$root","section","observe","intersection","onSelect","split","onScroll","onResize","unobserve","_createButton","button","rounded","link","$button","disabled","DISABLED","Toolbar","buttons","isDisabled","option","ACTIVE","$buttons","disable","action","switch","enabled","enable","refresh","command","afterDisabled","afterEnabled","guid","uuid","prefix","token","subject","_removeSubscriber","execution","j","_removeSubscriberByToken","Outline","anchors","drawer","toolbar","_renderAnchors","_renderChapters","_renderToolbar","CHAPTERS_OPTIONS","homepage","git","tags","issues","tools","HOME","GIT","TAGS","ISSUES","MENU","addButton","removeButton","toTop","toBottom","floor","onToggle","onScrollTop","onScrollBottom","onToolbarUpdate","ceil","subscribe","unsubscribe","jQuery","extend","outline","$article"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"outline.min.js","sources":["../../src/utils/types/isString.js","../../src/utils/lang/hasOwn.js","../../src/utils/lang/toString.js","../../src/utils/types/isFunction.js","../../src/utils/types/isObject.js","../../src/base.js","../../src/utils/lang/extend.js","../../src/utils/types/isElement.js","../../src/utils/lang/later.js","../../src/utils/lang/easeInQuad.js","../../src/utils/dom/_getScrollElement.js","../../src/utils/dom/scrollTo.js","../../src/utils/dom/offsetTop.js","../../src/utils/dom/matches.js","../../src/utils/dom/getParentOrHost.js","../../src/utils/event/enum.js","../../src/utils/event/_off.js","../../src/utils/event/_delete.js","../../src/utils/event/purgeElement.js","../../src/utils/event/getListeners.js","../../src/utils/event/off.js","../../src/utils/event/on.js","../../src/utils/event/getTarget.js","../../src/utils/dom/resolveTextNode.js","../../src/utils/dom/closest.js","../../src/utils/event/stop.js","../../src/utils/observer/_subscribers.js","../../src/utils/observer/_hasDirectSubscribersFor.js","../../src/utils/observer/has.js","../../src/utils/observer/_hasSubscribers.js","../../src/utils/observer/emit.js","../../src/utils/types/isTypedArray.js","../../src/utils/types/isArray.js","../../src/utils/icons/symbols.js","../../src/utils/icons/defaults.js","../../src/utils/icons/getSymbols.js","../../src/utils/icons/getSymbol.js","../../src/utils/icons/paint.js","../../src/utils/icons/add.js","../../src/utils/lang/trim.js","../../src/utils/types/isDOM.js","../../src/utils/types/isHTMLCollection.js","../../src/utils/types/isFragment.js","../../src/utils/types/isTextNode.js","../../src/utils/dom/setAttribute.js","../../src/utils/dom/createElement.js","../../src/utils/types/isSVG.js","../../src/utils/icons/icon.js","../../src/utils/icons/createElement.js","../../src/utils/dom/hasClass.js","../../src/utils/dom/removeClass.js","../../src/_resetHeading.js","../../src/utils/types/isEmpty.js","../../src/getChapters.js","../../src/utils/lang/stripTags.js","../../src/_getChapterParentIdByDiffer.js","../../src/_getChaptersWithCode.js","../../src/anchors.js","../../src/utils/lang/toTree.js","../../src/_updateHeading.js","../../src/utils/dom/addClass.js","../../src/utils/dom/setProperty.js","../../src/zIndex.js","../../src/drawer.js","../../src/utils/event/at.js","../../src/utils/dom/getStyle.js","../../src/chapters.js","../../src/_paintChapters.js","../../src/utils/dom/intersection.js","../../src/_createButton.js","../../src/toolbar.js","../../src/utils/lang/guid.js","../../src/utils/observer/on.js","../../src/utils/observer/_removeSubscriber.js","../../src/utils/observer/off.js","../../src/utils/observer/_removeSubscriberByToken.js","../../src/outline.js"],"sourcesContent":["/**\n * 检测数据是否为 String 类型\n * ========================================================================\n * @method isArray\n * @param {*} str\n * @returns {boolean}\n */\nconst isString = (str) => {\n return typeof str === 'string'\n}\n\nexport default isString\n","/**\n * 检测对象自身属性中是否具有指定的属性。\n * ========================================================================\n * @method hasOwn\n * @param {Object} obj - (必须)检测的目标对象\n * @param {String} prop - (必须)属性名\n * @returns {Boolean}\n */\nconst hasOwn = (obj, prop) => {\n const hasOwnProperty = Object.prototype.hasOwnProperty\n return obj && hasOwnProperty.call(obj, prop)\n}\n\nexport default hasOwn\n","/**\n * Object 对象原型上的 toString 方法\n * ========================================================================\n * @method toString\n * @param {*} val\n * @returns {string}\n */\nconst toString = (val) => {\n return Object.prototype.toString.apply(val)\n}\n\nexport default toString\n","import toString from '../lang/toString'\n\n/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return typeof val === 'function' || toString(val) === '[object Function]'\n}\n\nexport default isFunction\n","import toString from '../lang/toString'\nimport isFunction from '../types/isFunction'\n\n/**\n * 检测数据是否为 Object 类型\n * ========================================================================\n * @method isObject\n * @param {*} o\n * @returns {boolean}\n */\nconst isObject = (o) => {\n return (\n (toString(o) === '[object Object]' ||\n typeof o === 'object' ||\n isFunction(o)) &&\n o !== null\n )\n}\n\nexport default isObject\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\n\n/**\n * 扩展对象\n * ========================================================================\n * @method extend\n * @param {Object} origin\n * @param {Object} source\n */\nconst extend = (origin, source) => {\n const keys = Object.keys(source)\n\n keys.forEach((prop) => {\n if (hasOwn(source, prop)) {\n origin[prop] = source[prop]\n }\n })\n}\n\nexport default extend\n","import isObject from './isObject'\n\n/**\n * 检测数据是否为 HTMLElement DOM 节点\n * ========================================================================\n * @method isElement\n * @param {*} o\n * @returns {boolean}\n */\nconst isElement = (o) => {\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\n}\n\nexport default isElement\n","import isFunction from '../types/isFunction'\n\n/**\n * later - 延迟执行方法\n * ========================================================================\n * @method later\n * @param {Function} fn\n * @param {Number} [delay]\n * @returns {number|boolean}\n */\nconst later = (fn, delay = 300) => {\n if (!isFunction(fn)) {\n return false\n }\n\n return setTimeout(() => {\n fn()\n }, delay)\n}\n\nexport default later\n","/**\n * 返回给定值的平方值\n * ========================================================================\n * @method easeInQuad\n * @param {Number} x\n * @returns {number}\n */\nconst easeInQuad = (x) => {\n return x * x\n}\n\nexport default easeInQuad\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\n\n/**\n * 通过给的 scrollElement 参数,获取滚动 DOM 元素\n * ========================================================================\n * @method _getScrollElement\n * @param {String|HTMLElement} scrollElement\n * @returns {Element}\n * @private\n */\nconst _getScrollElement = (scrollElement = null) => {\n let $rootElements\n let $scrollElement\n\n if (!scrollElement) {\n $rootElements = document.querySelectorAll('html,body')\n $scrollElement =\n $rootElements[0].scrollTop - $rootElements[1].scrollTop >= 0\n ? $rootElements[0]\n : $rootElements[1]\n } else {\n if (isString(scrollElement)) {\n $scrollElement = document.querySelector(scrollElement)\n } else if (isElement(scrollElement)) {\n $scrollElement = scrollElement\n }\n }\n\n return $scrollElement\n}\n\nexport default _getScrollElement\n","import easeInQuad from '../lang/easeInQuad'\nimport isFunction from '../types/isFunction'\nimport _getScrollElement from './_getScrollElement'\n\n/**\n * 指定 rootElement DOM 节点滚动到指定 top 位置\n * ========================================================================\n * @method scrollTo\n * @param {HTMLElement|Object} [scrollElement] - (必须)要滚动的 DOM 节点\n * @param {Number} top - (必须)滚动的 scrollTop 数值\n * @param {Function} [afterStop] - (可选)滚动完成的回调函数\n */\nconst scrollTo = (scrollElement, top, afterStop) => {\n const $scrollElement = _getScrollElement(scrollElement)\n let scrollTop = $scrollElement.scrollTop\n let step = 0\n const distance = top - scrollTop\n const MAX_HEIGHT = $scrollElement.scrollHeight\n const MAX_TOP = top - MAX_HEIGHT <= 0 ? top : MAX_HEIGHT\n const stop = (top) => {\n if (isFunction(afterStop)) {\n afterStop(top)\n }\n\n return false\n }\n const play = () => {\n step += 1\n\n // 向上滚动\n if (distance < 0) {\n scrollTop -= easeInQuad(step)\n $scrollElement.scrollTop = scrollTop\n\n if (scrollTop <= top) {\n $scrollElement.scrollTop = top\n return stop(top)\n }\n } else {\n scrollTop += easeInQuad(step)\n $scrollElement.scrollTop = scrollTop\n\n if (scrollTop >= MAX_TOP) {\n $scrollElement.scrollTop = MAX_TOP\n return stop(MAX_TOP)\n }\n }\n\n requestAnimationFrame(play)\n }\n\n requestAnimationFrame(play)\n}\n\nexport default scrollTo\n","/**\n * 获取 DOM 节点相对于窗口的 left (纵坐标)值\n * ========================================================================\n * @method offsetTop\n * @param {HTMLElement} el - DOM 节点\n * @returns {Number}\n */\nconst offsetTop = (el) => {\n let top = el.offsetTop\n\n if (el.offsetParent !== null) {\n top += offsetTop(el.offsetParent)\n }\n\n return top\n}\n\nexport default offsetTop\n","/**\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\n * ========================================================================\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\n * 标 DOM 元素是否为事件代理所期望触发的目标。\n * ========================================================================\n * @method matches\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\n * @returns {Boolean}\n */\nconst matches = (el, selector = '') => {\n const sel = selector.replace(/^>/i, '')\n\n if (!selector || !sel || !el) {\n return false\n }\n\n /* istanbul ignore else */\n if (el.matches) {\n return el.matches(sel)\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(sel)\n } else {\n return false\n }\n}\n\nexport default matches\n","/**\n * 获取 DOM 元素的父节点\n * ========================================================================\n * @method getParentOrHost\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\n * @returns {*|HTMLElement}\n */\nconst getParentOrHost = (el) => {\n return el.host && el !== document && el.host.nodeType\n ? el.host\n : el.parentNode\n}\n\nexport default getParentOrHost\n","export const CAPTURE_EVENTS = [\n 'focusout',\n 'blur',\n 'focusin',\n 'focus',\n 'load',\n 'unload',\n 'mouseenter',\n 'mouseleave'\n]\n","import { CAPTURE_EVENTS } from './enum'\nimport _delete from './_delete'\n\n/**\n * (私有方法)取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method _off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须)事件处理器回调函数\n * @private\n */\nconst _off = (el, type, fn) => {\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n /* istanbul ignore else */\n if (fn._delegateListener) {\n fn = fn._delegateListener\n delete fn._delegateListener\n }\n\n // 移除缓存的 _listeners 数据\n _delete(el, type, fn)\n\n el.removeEventListener(type, fn, capture)\n}\n\nexport default _off\n","/**\n * 删除 DOM 元素缓存的 _listeners 数据\n * ========================================================================\n * @method _delete\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\n * @param {String} type - 事件类型(名称)\n * @param {Function} [fn] - 事件处理器回调函数\n */\nconst _delete = function (el, type, fn) {\n const listeners = el._listeners\n let index = -1\n\n if (listeners.length < 1) {\n return false\n }\n\n // 移除缓存的 _listeners 数据\n listeners.forEach((listener, i) => {\n const handler = listener.fn\n\n if (type === listener.type) {\n index = i\n\n if (handler === fn) {\n index = i\n }\n }\n })\n\n /* istanbul ignore else */\n if (index > -1) {\n listeners.splice(index, 1)\n }\n}\n\nexport default _delete\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\nimport getListeners from './getListeners'\nimport _off from './_off'\n\n/**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purgeElement\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\n * @param {String|Boolean} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n */\nconst purgeElement = function (el, type, recurse = false) {\n const $element = isString(el) ? document.querySelector(el) : el\n const $children = $element.childNodes\n const listeners = getListeners($element, type)\n\n listeners.forEach((listener) => {\n _off($element, listener.type, listener.fn)\n })\n\n if (\n (recurse || type === true || arguments.length === 1) &&\n $element &&\n $children\n ) {\n $children.forEach(($child) => {\n if (isElement($child)) {\n purgeElement($child, type, recurse)\n }\n })\n }\n}\n\nexport default purgeElement\n","import isString from '../types/isString'\n\n/**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @methods getListeners\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\nconst getListeners = (el, type) => {\n let listeners = el._listeners || []\n\n if (isString(type) && type) {\n listeners = listeners.filter((listener) => {\n return listener.type === type\n })\n }\n\n return listeners\n}\n\nexport default getListeners\n","import purgeElement from './purgeElement'\nimport isFunction from '../types/isFunction'\nimport _off from './_off'\n\n/**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} [fn] - (可选)事件处理器回调函数\n */\nconst off = (el, type, fn) => {\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\n if (!isFunction(fn)) {\n return purgeElement(el, type)\n }\n\n _off(el, type, fn)\n}\n\nexport default off\n","import closest from '../dom/closest'\nimport off from './off'\nimport getTarget from './getTarget'\n\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst on = (el, selector, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n const listener = function (evt) {\n const target = getTarget(evt)\n // 通过 Element.matches 方法获得点击的目标元素\n const delegateTarget = closest(target, selector, el)\n let overrideContext = context || el\n\n evt.delegateTarget = delegateTarget\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n /* istanbul ignore else */\n if (delegateTarget) {\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n selector,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default on\n","import resolveTextNode from '../dom/resolveTextNode'\n\n/**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\nconst getTarget = function (evt) {\n const target = evt.target\n\n return resolveTextNode(target)\n}\n\nexport default getTarget\n","/**\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\n * resolveTextNode() 方法则会返回实际的目标节点。\n * ========================================================================\n * @method resolveTextNode\n * @param {HTMLElement|Text} el - 要解析的节点\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\n */\nconst resolveTextNode = function (el) {\n if (el && el.nodeType === 3) {\n return el.parentNode\n }\n\n return el\n}\n\nexport default resolveTextNode\n","import matches from './matches'\nimport getParentOrHost from './getParentOrHost'\n\n/**\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\n * ========================================================================\n * @method closest\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)DOM 元素的选择其\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\n */\nconst closest = (el, selector, ctx, includeCTX) => {\n const context = ctx || document\n\n if (!el) {\n return null\n }\n\n do {\n /* istanbul ignore else */\n if (\n (selector != null &&\n (selector.startsWith('>')\n ? el.parentNode === context && matches(el, selector)\n : matches(el, selector))) ||\n (includeCTX && el === context)\n ) {\n return el\n }\n\n /* istanbul ignore else */\n if (el === context) {\n break\n }\n\n /* jshint boss:true */\n } while ((el = getParentOrHost(el)))\n}\n\nexport default closest\n","/**\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\n * ========================================================================\n * @method stop\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 工作台输出:'a'\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\n * stopEvent(evt)\n * })\n */\nconst stop = function (evt) {\n evt.stopPropagation()\n evt.preventDefault()\n}\n\nexport default stop\n","/**\n * 存储订阅者(主题和处理器的)私有对象\n * ========================================================================\n * @type {{}}\n * @private\n */\nconst _subscribers = {}\n\nexport default _subscribers\n","import _subscribers from './_subscribers'\nimport hasOwn from '../lang/hasOwn'\n\n/**\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\n * ========================================================================\n * @method _hasDirectSubscribersFor\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasDirectSubscribersFor = (topic) => {\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\n}\n\nexport default _hasDirectSubscribersFor\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\nimport _hasSubscribers from './_hasSubscribers'\n\n/**\n * 判断是否存在包含 topic 指定的订阅者信息\n * ========================================================================\n * @method has\n * @param {String} topic - (必须)主题名称\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\n * @returns {Boolean}\n */\nconst has = (topic, isDirect = true) => {\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\n}\n\nexport default has\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * 判断是否存在包含给定 topic 相关的订阅者信息\n * ========================================================================\n * @method _hasSubscribers\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasSubscribers = (topic) => {\n let found = _hasDirectSubscribersFor(topic)\n let position = topic.lastIndexOf('.')\n\n while (!found && position !== -1) {\n topic = topic.substring(0, position)\n position = topic.lastIndexOf('.')\n found = _hasDirectSubscribersFor(topic)\n }\n\n return found\n}\n\nexport default _hasSubscribers\n","import isTypedArray from '../types/isTypedArray'\nimport _subscribers from './_subscribers'\nimport has from './has'\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * (异步)发布订阅主题信息\n * ========================================================================\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\n * ========================================================================\n * @method emit\n * @param {String} topic - (必须)主题名称\n * @param {Object} data - (必须)数据对象\n * @param {Boolean} async - (可选) 是否异步发布\n */\nconst emit = (topic, data, async = true) => {\n const execute = (topic) => {\n if (!_hasDirectSubscribersFor(topic)) {\n return false\n }\n\n _subscribers[topic].forEach((subscriber) => {\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\n // 采用 toString() 方法转化为普通(JSON)字符串\n const message = isTypedArray(data) ? data.toString() : data\n\n subscriber.callback.call(subscriber.context || subscriber, message)\n })\n }\n const deliver = () => {\n let subscriber = topic\n let position = topic.lastIndexOf('.')\n\n while (position !== -1) {\n subscriber = subscriber.substring(0, position)\n position = subscriber.lastIndexOf('.')\n\n execute(subscriber)\n }\n\n // 执行 topic 对应的处理器\n execute(topic)\n // 执行特殊 topic:'*'(监听全部消息的发布)\n execute('*')\n }\n\n if (!has(topic)) {\n return false\n }\n\n if (async) {\n setTimeout(deliver, 10)\n } else {\n deliver()\n }\n}\n\nexport default emit\n","import toString from '../lang/toString'\n/**\n * 判断检测数据是否为 Typed Arrays 类型的数据\n * ========================================================================\n * @param {*} val\n * @returns {boolean}\n */\nconst isTypedArray = (val) => {\n const TYPES = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n '[object BigInt64Array]',\n '[object BigUint64Array]'\n ]\n\n return TYPES.indexOf(toString(val)) > -1\n}\n\nexport default isTypedArray\n","import toString from '../lang/toString'\n\n/**\n * 检测数据是否为 Array 类型\n * ========================================================================\n * @method isArray\n * @param {*} o\n * @returns {boolean}\n */\nconst isArray = (o) => {\n if (Array.isArray) {\n return Array.isArray(o)\n } else {\n return toString(o) === '[object Array]'\n }\n}\n\nexport default isArray\n","import DEFAULTS from './defaults'\n\nconst SYMBOLS = [...DEFAULTS]\n\nexport default SYMBOLS\n","const DEFAULTS = [\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n ''\n]\n\nexport default DEFAULTS\n","import isString from '../types/isString'\nimport getSymbol from './getSymbol'\nimport SYMBOLS from './symbols'\n\n/**\n *\n * @method getSymbols\n * @param {String} [name]\n * @param {String} [iconSet]\n * @returns {string[]|*}\n */\nconst getSymbols = (name, iconSet = 'icon') => {\n if (isString(name)) {\n return getSymbol(name, iconSet)\n }\n\n return [...SYMBOLS]\n}\n\nexport default getSymbols\n","import SYMBOLS from './symbols'\n\n/**\n * @method getSymbol\n * @param {String} name\n * @param {String} [iconSet]\n * @returns {String}\n */\nconst getSymbol = (name, iconSet = 'icon') => {\n const patternName = /id=\"(.*?)\"/\n const patternSet = /^(\\w+)-/\n const symbols = SYMBOLS\n\n return symbols.find((symbol) => {\n const names = patternName.exec(symbol)\n const fullName = names[1]\n const sets = patternSet.exec(fullName)\n const setName = sets[1]\n const iconName =\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\n\n return setName === iconSet && fullName === iconName\n })\n}\n\nexport default getSymbol\n","import add from './add'\nimport getSymbols from './getSymbols'\n\n/**\n * 绘制 SVG 图标集\n * ========================================================================\n * @method paint\n * @param {String|Array} symbol\n */\nconst paint = (symbol = '') => {\n const $body = document.body\n let $icons = document.querySelector('#outline-icons')\n let symbols = []\n\n add(symbol)\n symbols = getSymbols()\n\n if ($icons) {\n $icons.innerHTML = symbols.join('')\n } else {\n $icons = document.createElement('div')\n $icons.innerHTML =\n ``\n $body.insertBefore($icons.firstChild, $body.firstChild)\n }\n}\n\nexport default paint\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport SYMBOLS from './symbols'\n\n/**\n * @method add\n * @param {Array|String} symbols\n * @return {Boolean}\n */\nconst add = (symbols) => {\n if (!symbols) {\n return false\n }\n\n if (isArray(symbols) && symbols.length > 0) {\n symbols.forEach((symbol) => {\n /* istanbul ignore else */\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\n SYMBOLS.push(symbol)\n }\n })\n } else {\n /* istanbul ignore else */\n if (isString(symbols)) {\n SYMBOLS.push(symbols)\n }\n }\n}\n\nexport default add\n","import isString from '../types/isString'\n\n/**\n * 清楚字符串起始位置所有的空格\n * ========================================================================\n * @method trim\n * @param {string} str\n * @returns {string|Boolean}\n */\nconst trim = (str) => {\n if (!isString(str)) {\n return false\n }\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\n}\n\nexport default trim\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\nimport isObject from './isObject'\n\nconst isFragment = (fragment) => {\n return !!(\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\n )\n}\n\nexport default isFragment\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","/**\n * 给 DOM 节点设置属性/值\n * ========================================================================\n * @method setAttribute\n * @param {HTMLElement} el - DOM 节点\n * @param {String} attr - 属性名称\n * @param {String|Number|Boolean} value - 属性值\n */\nconst setAttribute = (el, attr, value) => {\n let tagName = el.tagName.toLowerCase()\n\n switch (attr) {\n case 'style':\n el.style.cssText = value\n break\n case 'value':\n if (tagName === 'input' || tagName === 'textarea') {\n el.value = value\n } else {\n el.setAttribute(attr, value)\n }\n break\n case 'className':\n el.className = value\n break\n default:\n el.setAttribute(attr, value)\n break\n }\n}\n\nexport default setAttribute\n","import hasOwn from '../lang/hasOwn'\nimport isObject from '../types/isObject'\nimport isString from '../types/isString'\nimport isArray from '../types/isArray'\nimport isDOM from '../types/isDOM'\nimport setAttribute from './setAttribute'\n\n/**\n * 创建 DOM 节点,并添加属性和子节点\n * ========================================================================\n * @method createElement\n * @param {String} tagName - 标签名称\n * @param {Object|Array} attrs - 属性对象或者子节点\n * @param {Array} [children] - 子节点数组\n * @returns {HTMLElement}\n */\nconst createElement = (tagName, attrs, children) => {\n const $fragment = document.createDocumentFragment()\n const $el = document.createElement(tagName)\n const isValidChild = (child) => {\n return isDOM(child) || isString(child)\n }\n const append = (child) => {\n let $child\n\n if (!isValidChild(child)) {\n return false\n }\n\n if (isDOM(child)) {\n $child = child\n } else if (isString(child)) {\n $child = document.createTextNode(child)\n }\n\n $fragment.appendChild($child)\n }\n\n if (isObject(attrs)) {\n Object.keys(attrs).forEach((attr) => {\n if (hasOwn(attrs, attr)) {\n setAttribute($el, attr, attrs[attr])\n }\n })\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\n attrs.forEach((child) => {\n append(child)\n })\n }\n\n if (isArray(children)) {\n children.forEach((child) => {\n append(child)\n })\n } else {\n append(children)\n }\n\n $el.appendChild($fragment)\n\n return $el\n}\n\nexport default createElement\n","import isString from './isString'\n\nconst isSVG = (str) => {\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\n const doctype =\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\n const pattern = new RegExp(svg, 'i')\n\n return isString(str) && pattern.test(str)\n}\n\nexport default isSVG\n","import createElement from './createElement'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method icon\n * @alias createElement\n * @see createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst icon = (name, options = {}) => {\n return createElement(name, options)\n}\n\nexport default icon\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport isSVG from '../types/isSVG'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst createElement = (name, options = {}) => {\n const size = options.size || 0\n const color = options.color || ''\n const iconSet = options.iconSet || ''\n const width = isArray(size) ? size[0] : size\n const height = isArray(size) ? size[1] : size\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\n const $icon = document.createElement('i')\n let binds = ''\n let svg = ''\n let $svg\n\n if (!isString(name)) {\n return null\n }\n\n if (isSVG(name)) {\n svg = name\n } else {\n binds =\n iconSet && iconSet !== 'icon'\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\n : `xlink:href=\"#icon-${name}\"`\n svg =\n `` +\n `` +\n ``\n }\n\n $icon.className = 'outline-icon'\n $icon.innerHTML = svg\n\n if (isSVG(name)) {\n $svg = $icon.querySelector('svg')\n $svg.setAttribute('aria-hidden', 'true')\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n $svg.setAttribute('class', 'outline-icon__svg')\n $svg.setAttribute('width', '200')\n $svg.setAttribute('height', '200')\n $svg.style = cssRules\n }\n\n return $icon\n}\n\nexport default createElement\n","import isElement from '../types/isElement'\n/**\n * 检测 DOM 节点是否包含名为 className 的样式\n * ========================================================================\n * @method hasClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst hasClass = (el, className) => {\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\n let allClass\n let classList\n\n if (!isElement(el)) {\n return false\n }\n\n allClass = el.className\n\n if (!allClass) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.contains) {\n return el.classList.contains(className)\n }\n\n return !!pattern.exec(allClass)\n}\n\nexport default hasClass\n","import trim from '../lang/trim'\nimport hasClass from './hasClass'\n\n/**\n * 移除 DOM 节点的 className 样式\n * ========================================================================\n * @method removeClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst removeClass = (el, className) => {\n let allClass = el.className\n let classList\n\n if (!allClass || !hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.remove) {\n classList.remove(className)\n } else {\n allClass = trim(allClass.replace(className, ''))\n el.className = allClass\n }\n}\n\nexport default removeClass\n","import removeClass from './utils/dom/removeClass'\nimport isEmpty from './utils/types/isEmpty'\nimport trim from './utils/lang/trim'\n\nconst _resetHeading = ($heading, hasAnchor = true, isAtStart = true) => {\n const CLS_HEADING = 'outline-heading'\n const text = $heading.innerHTML\n const pattern = /^\\d+(\\.?\\d+)*\\s?/gi\n let $anchor\n\n $heading.innerHTML = text.replace(pattern, '')\n $heading.removeAttribute('id')\n $heading.removeAttribute('data-id')\n\n removeClass($heading, CLS_HEADING)\n\n if (!hasAnchor) {\n return false\n }\n\n $anchor = $heading.querySelector(`.${CLS_HEADING}__anchor`)\n\n if (isAtStart) {\n removeClass($heading, `${CLS_HEADING}_start`)\n }\n\n if (isEmpty(trim($heading.className))) {\n $heading.removeAttribute('class')\n }\n\n $heading.removeChild($anchor)\n}\n\nexport default _resetHeading\n","import isString from './isString'\n/**\n * 检测数据是否为空字符串\n * ========================================================================\n * @method isEmpty\n * @param {String} str\n * @returns {boolean}\n */\nconst isEmpty = (str) => {\n return isString(str) && str === ''\n}\n\nexport default isEmpty\n","import trim from './utils/lang/trim'\nimport stripTags from './utils/lang/stripTags'\n\nimport _getChapterParentIdByDiffer from './_getChapterParentIdByDiffer'\nimport _getChaptersWithCode from './_getChaptersWithCode'\n\nconst getChapters = (headings, showCode = true) => {\n let previous = 1\n let level = 0\n const chapters = []\n\n headings.forEach((heading, i) => {\n const headingLevel = heading.tagName.replace(/h/i, '')\n let current = parseInt(headingLevel, 10)\n let pid = -1\n\n // 场景1:当前标题是前一个标题的子标题\n // 当前标题的(标题标签)序号 > 前一个标题的序号:两个相连的标题是父标题 -> 子标题关系;\n // h2 (前一个标题)\n // h3 (当前标题)\n if (current > previous) {\n level += 1\n\n // 第一层级的 pid 是 -1\n if (level === 1) {\n pid = -1\n } else {\n pid = i - 1\n }\n }\n // 场景2:当前标题和前一个标题层级相同\n // 当前标题的(标题标签)序号 = 前一个标题的序号\n // h2 (前一个标题)\n // h2 (当前标题)\n // 当前标题的(标题标签)序号 < 前一个标题的序号,并且当前标题序号 > 当前的级别\n // h2\n // h4 (前一个标题)\n // h3 (当前标题:这种情况我们还是任务 h3 是 h2 的下一级章节)\n else if (current === previous || (current < previous && current > level)) {\n // H1 的层级肯定是 1\n if (current === 1) {\n level = 1\n pid = -1\n } else {\n pid = chapters[i - 1].pid\n }\n }\n // 场景3:当前标题比前一个标题层级高\n else if (current <= level) {\n // H1 的层级肯定是 1\n if (current === 1) {\n level = 1\n } else {\n level = level - (previous - current)\n\n if (level <= 1) {\n level = 1\n }\n }\n\n // 第一级的标题\n if (level === 1) {\n pid = -1\n } else {\n // 通过当前标题和前一个标题之间的等级差,获得当前标题的父标题ID\n pid = _getChapterParentIdByDiffer(chapters, previous - current, i)\n }\n }\n\n previous = current\n\n chapters.push({\n id: i,\n pid: pid,\n level: level,\n rel: `heading-${i}`,\n text: stripTags(trim(heading.innerHTML))\n })\n })\n\n return showCode ? _getChaptersWithCode(chapters) : chapters\n}\n\nexport default getChapters\n","import isString from '../types/isString'\n\n/**\n * 过滤所有 HTML 标签\n * ========================================================================\n * @method stripTags\n * @param {string} str\n * @returns {string}\n */\nconst stripTags = (str) => {\n if (!isString(str)) {\n return ''\n }\n return str.replace(/<\\/?[^>]+(>|$)/g, '')\n}\n\nexport default stripTags\n","const _getChapterParentIdByDiffer = (chapters, differ, index) => {\n let previous = chapters[index - 1]\n let pid\n let i\n\n for (i = 0; i < differ; i += 1) {\n pid = previous.pid\n previous = chapters[pid]\n }\n\n pid = previous.pid\n\n return pid\n}\n\nexport default _getChapterParentIdByDiffer\n","const _getChaptersWithCode = (chapters) => {\n const groups = {}\n const cb = (o) => {\n return [o.pid]\n }\n\n chapters.forEach((o) => {\n const group = JSON.stringify(cb(o))\n\n groups[group] = groups[group] || []\n groups[group].push(o)\n\n o.index = groups[group].length\n if (o.pid === -1) {\n o.code = String(o.index)\n }\n })\n\n Object.keys(groups).forEach((group) => {\n groups[group].forEach((c) => {\n const subjects = chapters.filter((b) => b.pid === c.id)\n subjects.forEach((o) => {\n o.code = c.code + '.' + o.index\n })\n })\n })\n\n return chapters\n}\n\nexport default _getChaptersWithCode\n","import Base from './base'\n\n// 在文章的标题生成 anchor 链接\nimport isString from './utils/types/isString'\nimport isFunction from './utils/types/isFunction'\nimport isElement from './utils/types/isElement'\nimport toTree from './utils/lang/toTree'\nimport later from './utils/lang/later'\nimport scrollTo from './utils/dom/scrollTo'\nimport _getScrollElement from './utils/dom/_getScrollElement'\nimport offsetTop from './utils/dom/offsetTop'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\nimport stop from './utils/event/stop'\nimport publish from './utils/observer/emit'\nimport paint from './utils/icons/paint'\n\nimport _updateHeading from './_updateHeading'\nimport _resetHeading from './_resetHeading'\nimport getChapters from './getChapters'\n\nclass Anchors extends Base {\n constructor(options) {\n super()\n\n this.attrs = Anchors.DEFAULTS\n this.$articleElement = null\n this.$scrollElement = null\n this.$headings = []\n\n this.chapters = []\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n let scrollElement\n let selector\n let $articleElement\n let articleElement\n\n this.attr(options)\n articleElement = this.attr('articleElement')\n scrollElement = this.attr('scrollElement')\n selector = this.attr('selector')\n created = this.attr('created')\n\n if (isString(articleElement)) {\n $articleElement = document.querySelector(articleElement)\n } else if (isElement(articleElement)) {\n $articleElement = articleElement\n }\n\n if (!$articleElement) {\n return this\n }\n\n this.$articleElement = $articleElement\n this.$scrollElement = _getScrollElement(scrollElement)\n this.$headings = [...$articleElement.querySelectorAll(selector)]\n\n if (this.$headings.length < 1) {\n return this\n }\n\n this.chapters = getChapters(this.$headings)\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n this.render().addListeners()\n\n return this\n }\n\n getChapters(isTreeStructured = false) {\n const chapters = this.chapters\n return isTreeStructured ? toTree(chapters, 'id', 'pid') : chapters\n }\n\n count() {\n return this.chapters.length\n }\n\n render() {\n const mounted = this.attr('mounted')\n const hasAnchor = this.attr('hasAnchor')\n const isAtStart = this.attr('isAtStart')\n const showCode = this.attr('showCode')\n const anchorURL = this.attr('anchorURL')\n const $headings = this.$headings\n const chapters = this.getChapters()\n\n paint()\n\n $headings.forEach(($heading, i) => {\n const chapterCode = chapters[i].code\n _updateHeading($heading, i, {\n hasAnchor,\n isAtStart,\n showCode,\n chapterCode,\n anchorURL\n })\n })\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n return this\n }\n\n scrollTo(top, after) {\n const el = this.$scrollElement\n\n scrollTo(el, top, after)\n\n return this\n }\n\n destroy() {\n const hasAnchor = this.attr('hasAnchor')\n const isAtStart = this.attr('isAtStart')\n const beforeDestroy = this.attr('beforeDestroy')\n const afterDestroy = this.attr('afterDestroy')\n const $headings = this.$headings\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n $headings.forEach(($heading) => {\n _resetHeading($heading, hasAnchor, isAtStart)\n })\n\n this.attr(Anchors.DEFAULTS)\n this.$articleElement = null\n this.$scrollElement = null\n this.$headings = []\n this.chapters = []\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n return this\n }\n\n onAnchorTrigger(evt) {\n const anchorURL = this.attr('anchorURL')\n const afterScroll = this.attr('afterScroll')\n const stickyHeight = this.attr('stickyHeight')\n const $anchor = evt.delegateTarget\n const $heading = $anchor.parentNode\n const top = offsetTop($heading) - (stickyHeight + 10)\n const $scrollElement = this.$scrollElement\n const min = 0\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\n const after = () => {\n if (isFunction(afterScroll)) {\n afterScroll.call(this, 'anchor')\n }\n\n later(() => {\n publish('toolbar:update', {\n top,\n min,\n max\n })\n })\n }\n\n this.scrollTo(top, after)\n\n if (!anchorURL) {\n stop(evt)\n }\n\n return this\n }\n\n addListeners() {\n const $articleElement = this.$articleElement\n\n on(\n $articleElement,\n '.outline-heading__anchor',\n 'click',\n this.onAnchorTrigger,\n this,\n true\n )\n\n return this\n }\n\n removeListeners() {\n const $articleElement = this.$articleElement\n\n off($articleElement, 'click', this.onAnchorTrigger)\n\n return this\n }\n}\n\nAnchors.DEFAULTS = {\n scrollElement: 'html,body',\n articleElement: '#article',\n selector: 'h1,h2,h3,h4,h5,h6',\n stickyHeight: 0,\n anchorURL: '',\n hasAnchor: true,\n isAtStart: true,\n showCode: false,\n created: null,\n mounted: null,\n afterScroll: null,\n beforeDestroy: null,\n afterDestroy: null\n}\n\nexport default Anchors\n","const toTree = (list, nodeKey, parentKey) => {\r\n const map = {}\r\n const roots = []\r\n\r\n list.forEach((item, i) => {\r\n // initialize the map\r\n map[item[nodeKey]] = i\r\n // initialize the children\r\n item.children = []\r\n })\r\n\r\n list.forEach((item) => {\r\n const node = list[map[item[parentKey]]]\r\n\r\n if (item[parentKey] !== -1) {\r\n // if you have dangling branches check that map[node.parentId] exists\r\n node.children.push(item)\r\n } else {\r\n roots.push(item)\r\n }\r\n })\r\n\r\n return roots\r\n}\r\n\r\nexport default toTree\r\n","import trim from './utils/lang/trim'\nimport createElement from './utils/dom/createElement'\nimport setAttribute from './utils/dom/setAttribute'\n\nimport icon from './utils/icons/icon'\n\nconst _updateHeading = ($heading, i, options) => {\n const $fragment = document.createDocumentFragment()\n const CLS_HEADING = 'outline-heading'\n const hasAnchor = options.hasAnchor || true\n const isAtStart = options.isAtStart || true\n const showCode = options.showCode || false\n const chapterCode = options.chapterCode || ''\n const anchorURL = options.anchorURL || ''\n const headingId = `heading-${i}`\n const attrs = {\n id: headingId,\n className: isAtStart ? `${CLS_HEADING} ${CLS_HEADING}_start` : CLS_HEADING,\n 'data-id': i\n }\n const keys = Object.keys(attrs)\n const text = trim($heading.innerHTML)\n let $anchor\n let $icon\n\n keys.forEach((prop) => {\n setAttribute($heading, prop, attrs[prop])\n })\n\n if (showCode) {\n $heading.innerHTML = chapterCode + ' ' + text\n }\n\n if (!hasAnchor) {\n return false\n }\n\n $icon = icon('hash', { iconSet: 'outline' })\n $anchor = createElement(\n 'a',\n {\n id: `anchor-${i}`,\n className: `${CLS_HEADING}__anchor anchor-${i}`,\n href: anchorURL || `#${headingId}`,\n target: anchorURL ? '_blank' : 'self',\n 'data-id': i\n },\n [$icon]\n )\n $fragment.appendChild($anchor)\n $heading.appendChild($fragment)\n}\n\nexport default _updateHeading\n","import hasClass from './hasClass'\n\n/**\n * 给 DOM 节点添加名为 className 的样式\n * ========================================================================\n * @method addClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst addClass = (el, className) => {\n let classList\n let allClass\n\n if (hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.add) {\n classList.add(className)\n } else {\n allClass = el.className\n allClass += allClass.length > 0 ? ' ' + className : className\n el.className = allClass\n }\n}\n\nexport default addClass\n","const setProperty = (prop, value) => {\r\n const documentElement = document.documentElement\r\n documentElement.style.setProperty(prop, value)\r\n}\r\n\r\nexport default setProperty\r\n","import setProperty from './utils/dom/setProperty'\n\nlet index = 2000\n\nconst zIndex = (idx) => {\n if (idx) {\n index = idx\n } else {\n index += 1\n }\n\n setProperty('--outline-zIndex', `${index}`)\n\n return index\n}\n\nexport default zIndex\n","import Base from './base'\n\nimport later from './utils/lang/later'\nimport isFunction from './utils/types/isFunction'\nimport addClass from './utils/dom/addClass'\nimport removeClass from './utils/dom/removeClass'\nimport createElement from './utils/dom/createElement'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\n\nimport paint from './utils/icons/paint'\nimport icon from './utils/icons/icon'\nimport zIndex from './zIndex'\n\nclass Drawer extends Base {\n constructor(options) {\n super()\n\n this.attrs = Drawer.DEFAULTS\n this.title = ''\n this.closed = true\n this.$el = null\n this.$modal = null\n this.$header = null\n this.$title = null\n this.$close = null\n this.$main = null\n this.$footer = null\n this.$overlay = null\n this.zIndex = 0\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n\n this.attr(options)\n\n this.title = this.attr('title')\n created = this.attr('created')\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n this.render().addListeners()\n return this\n }\n\n setTitle(title) {\n this.attr('title', title)\n this.title = title\n this.$title.innerHTML = title\n\n return this\n }\n\n isClosed() {\n return this.closed\n }\n\n render() {\n const mounted = this.attr('mounted')\n const size = this.attr('size')\n const placement = this.attr('placement')\n const hasClose = this.attr('hasClose')\n const hasOverlay = this.attr('hasOverlay')\n const hasOffset = this.attr('hasOffset')\n const hasPadding = this.attr('hasPadding')\n const autoHeight = this.attr('autoHeight')\n const customClass = this.attr('customClass')\n let $el\n let $modal\n let $header\n let $title\n let $close\n let $main\n let $footer\n let $overlay\n\n paint()\n this.zIndex = zIndex()\n\n $title = createElement(\n 'h2',\n {\n className: 'outline-drawer__title'\n },\n [this.title]\n )\n this.$title = $title\n\n if (hasClose) {\n $close = createElement(\n 'div',\n {\n className: 'outline-drawer__close'\n },\n [icon('close', { size: 20 })]\n )\n this.$close = $close\n }\n\n $header = createElement(\n 'header',\n {\n className: 'outline-drawer__header'\n },\n [$title, $close]\n )\n this.$header = $header\n\n $main = createElement(\n 'div',\n {\n className: 'outline-drawer__main'\n },\n ['']\n )\n this.$main = $main\n\n if (!hasPadding) {\n addClass($main, 'outline-drawer_full')\n }\n\n $footer = createElement(\n 'footer',\n {\n className: 'outline-drawer__footer'\n },\n ['']\n )\n this.$footer = $footer\n\n $modal = createElement(\n 'div',\n {\n className: `outline-drawer__modal outline-drawer_${placement} outline-drawer_${size} outline-drawer_closed`\n },\n [$header, $main, $footer]\n )\n this.$modal = $modal\n\n if (hasOffset) {\n addClass($modal, 'outline-drawer_offset')\n }\n\n if (autoHeight) {\n addClass($modal, 'outline-drawer_auto')\n }\n\n if (customClass) {\n addClass($modal, customClass)\n }\n\n if (hasOverlay) {\n $overlay = createElement(\n 'div',\n {\n className: 'outline-drawer__overlay'\n },\n ['']\n )\n this.$overlay = $overlay\n }\n\n $el = createElement(\n 'div',\n {\n className: `outline-drawer`\n },\n [$modal, $overlay]\n )\n this.$el = $el\n document.body.appendChild($el)\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n return this\n }\n\n open() {\n const opened = this.attr('afterOpened')\n const $modal = this.$modal\n\n addClass(this.$el, 'outline-drawer_opened')\n removeClass($modal, 'outline-drawer_closed')\n addClass($modal, 'outline-drawer_opened')\n\n later(() => {\n this.closed = false\n\n if (isFunction(opened)) {\n opened.call(this)\n }\n })\n\n return this\n }\n\n close() {\n const closed = this.attr('afterClosed')\n const $modal = this.$modal\n\n removeClass($modal, 'outline-drawer_opened')\n addClass($modal, 'outline-drawer_closed')\n\n later(() => {\n removeClass(this.$el, 'outline-drawer_opened')\n this.closed = true\n\n if (isFunction(closed)) {\n closed.call(this)\n }\n })\n\n return this\n }\n\n toggle() {\n const afterToggle = this.attr('afterToggle')\n const closed = this.isClosed()\n\n if (closed) {\n this.open()\n } else {\n this.close()\n }\n\n if (isFunction(afterToggle)) {\n later(() => {\n afterToggle.call(this, closed)\n })\n }\n\n return this\n }\n\n destroy() {\n const afterDestroy = this.attr('afterDestroy')\n const beforeDestroy = this.attr('beforeDestroy')\n let index = this.zIndex\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n\n this.attrs = Drawer.DEFAULTS\n this.title = ''\n this.closed = false\n this.$el = null\n this.$modal = null\n this.$header = null\n this.$title = null\n this.$close = null\n this.$main = null\n this.$footer = null\n this.$overlay = null\n\n index -= 1\n zIndex(index)\n this.zIndex = 0\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n return this\n }\n\n addListeners() {\n const hasClose = this.attr('hasClose')\n const hasOverlay = this.attr('hasOverlay')\n const $el = this.$el\n\n if (hasClose) {\n on($el, '.outline-drawer__close', 'click', this.onClose, this, true)\n }\n\n if (hasOverlay) {\n on($el, '.outline-drawer__overlay', 'click', this.onClose, this, true)\n }\n\n return this\n }\n\n removeListeners() {\n const hasClose = this.attr('hasClose')\n const hasOverlay = this.attr('hasOverlay')\n const $el = this.$el\n\n if (!hasClose && !hasOverlay) {\n return this\n }\n\n off($el, 'click', this.onClose)\n\n return this\n }\n\n onClose() {\n this.close()\n return this\n }\n}\n\nDrawer.DEFAULTS = {\n placement: 'rtl',\n title: '标题',\n size: 'regular',\n hasClose: true,\n hasOverlay: true,\n hasOffset: false,\n hasPadding: true,\n autoHeight: true,\n created: null,\n mounted: null,\n afterClosed: null,\n afterOpened: null,\n afterScroll: null,\n beforeDestroy: null,\n afterDestroy: null,\n afterToggle: null\n}\n\nexport default Drawer\n","import isFunction from '../types/isFunction'\nimport off from './off'\n\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定事件\n * ========================================================================\n * @method at\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\n * @param {Function|Object} fn - (必须) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst at = (el, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n const listener = function (evt) {\n let overrideContext = context || el\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n\n if (!isFunction(fn)) {\n return false\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default at\n","/**\r\n * 获取HTML元素的某个CSS样式值\r\n * ====================================================\r\n * @param el\r\n * @param ruleName\r\n * @returns {*}\r\n */\r\nconst getStyle = (el, ruleName) => {\r\n return getComputedStyle(el)[ruleName]\r\n}\r\n\r\nexport default getStyle\r\n","import Base from './base'\n\nimport isString from './utils/types/isString'\nimport isFunction from './utils/types/isFunction'\nimport isElement from './utils/types/isElement'\nimport later from './utils/lang/later'\nimport at from './utils/event/at'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\nimport stop from './utils/event/stop'\nimport createElement from './utils/dom/createElement'\nimport scrollTo from './utils/dom/scrollTo'\nimport addClass from './utils/dom/addClass'\nimport intersection from './utils/dom/intersection'\nimport removeClass from './utils/dom/removeClass'\nimport offsetTop from './utils/dom/offsetTop'\nimport getStyle from './utils/dom/getStyle'\nimport setProperty from './utils/dom/setProperty'\nimport publish from './utils/observer/emit'\n\nimport _getScrollElement from './utils/dom/_getScrollElement'\nimport _paintChapters from './_paintChapters'\n\nclass Chapters extends Base {\n constructor(options) {\n super()\n\n this.attrs = Chapters.DEFAULTS\n this.$el = null\n this.$title = null\n this.$main = null\n this.$list = null\n this.$placeholder = null\n this.$parentElement = null\n this.$scrollElement = null\n this.chapters = []\n this.closed = false\n this.active = 0\n this.offsetTop = 0\n this.offsetWidth = 0\n this.$active = null\n this.scrollTimer = null\n this.resizeTimer = null\n this.playing = false\n this.Observer = null\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n let parentElement\n let scrollElement\n let $parent\n\n this.attr(options)\n created = this.attr('created')\n parentElement = this.attr('parentElement')\n scrollElement = this.attr('scrollElement')\n\n if (isString(parentElement)) {\n $parent = document.querySelector(parentElement)\n } else if (isElement(parentElement)) {\n $parent = parentElement\n }\n this.$parentElement = $parent\n this.$scrollElement = _getScrollElement(scrollElement)\n\n this.chapters = this.attr('chapters')\n this.closed = this.attr('closed')\n this.active = this.attr('active')\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n if (this.chapters.length < 1) {\n return this\n }\n\n this.render().addListeners()\n\n this.$active = document.querySelector(`#chapter-${this.active}`)\n\n return this\n }\n\n isClosed() {\n return this.closed\n }\n\n isSticky() {\n const position = this.attr('position')\n return position === 'sticky'\n }\n\n isFixed() {\n const position = this.attr('position')\n return position === 'fixed'\n }\n\n isInside() {\n return this.isFixed() || this.isSticky()\n }\n\n isOutside() {\n return !this.isInside()\n }\n\n _paintEdge() {\n const $fragment = document.createDocumentFragment()\n const STICKY = 'outline-chapters_sticky'\n const HIDDEN = 'outline-chapters_hidden'\n const title = this.attr('title')\n const customClass = this.attr('customClass')\n const $parentElement = this.$parentElement\n const contents = []\n let $title = null\n let $el\n let $main\n let $list\n let $placeholder\n\n if (!$parentElement) {\n return this\n }\n\n if (this.isInside()) {\n $title = createElement(\n 'h2',\n {\n className: 'outline-chapters__title'\n },\n [title]\n )\n this.$title = $title\n contents.push($title)\n }\n\n $list = createElement(\n 'ul',\n {\n // 为优化性能,添加了 _fixed 和 _hidden\n // fixed 为了让 $list 脱离流布局\n // hidden 让 $list 不可见\n className: `outline-chapters__list`\n },\n ['']\n )\n this.$list = $list\n\n $placeholder = createElement(\n 'div',\n {\n className: 'outline-chapters__placeholder'\n },\n ['']\n )\n this.$placeholder = $placeholder\n\n $main = createElement(\n 'div',\n {\n className: 'outline-chapters__main'\n },\n [$list, $placeholder]\n )\n this.$main = $main\n contents.push($main)\n\n $el = createElement(\n 'nav',\n {\n id: 'outline-chapters',\n className: `outline-chapters ${HIDDEN}`\n },\n contents\n )\n this.$el = $el\n\n if (this.isSticky()) {\n this.calculateStickyHeight()\n addClass($el, STICKY)\n }\n\n if (customClass) {\n addClass($el, customClass)\n }\n $fragment.appendChild($el)\n $parentElement.appendChild($fragment)\n\n return this\n }\n\n render() {\n const HIDDEN = 'outline-chapters_hidden'\n const showCode = this.attr('showCode')\n const mounted = this.attr('mounted')\n const $parentElement = this.$parentElement\n const chapters = this.chapters\n let $el\n let $list\n\n if (!$parentElement || chapters.length < 1) {\n return this\n }\n\n this._paintEdge()\n\n $el = this.$el\n $list = this.$list\n _paintChapters($list, chapters, showCode)\n removeClass($el, HIDDEN)\n this.positionPlaceholder(this.active)\n\n this.offsetTop = offsetTop($el)\n this.offsetWidth = $el.offsetWidth\n\n if (this.isFixed()) {\n this.sticky()\n setProperty('--outline-chapters-width', `${this.offsetWidth}px`)\n }\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n this.onObserver()\n\n return this\n }\n\n positionPlaceholder(index) {\n const $main = this.$main\n const $list = this.$list\n const $placeholder = this.$placeholder\n const $anchor = $list.querySelector('.outline-chapters__anchor')\n const mainPaddingTop = parseInt(getStyle($main, 'padding-top'), 10)\n const mainBorderTop = parseInt(getStyle($main, 'border-top-width'), 10)\n const placeholderPaddingTop = parseInt(getStyle($list, 'padding-top'), 10)\n const placeholderMarginTop = parseInt(getStyle($list, 'margin-top'), 10)\n const placeholderBorderTop = parseInt(\n getStyle($list, 'border-top-width'),\n 10\n )\n let height = $anchor.offsetHeight\n let offsetTop = 0\n let top\n\n if (mainPaddingTop) {\n offsetTop += mainPaddingTop\n }\n\n if (placeholderPaddingTop) {\n offsetTop += placeholderPaddingTop\n }\n\n if (placeholderMarginTop) {\n offsetTop += placeholderMarginTop\n }\n\n if (mainBorderTop) {\n offsetTop += mainBorderTop\n }\n\n if (placeholderBorderTop) {\n offsetTop += placeholderBorderTop\n }\n\n top = height * index\n // top:calc(${offsetTop}px + ${top}px);\n $placeholder.style.cssText = `transform: translateY(${\n offsetTop + top\n }px);height:${height}px;`\n\n return this\n }\n\n highlight(id) {\n const $anchor = this.$el.querySelector(`#chapter__anchor-${id}`)\n const HIGHLIGHT = 'outline-chapters_active'\n\n if (!$anchor) {\n return this\n }\n\n if (this.$active) {\n removeClass(this.$active, HIGHLIGHT)\n }\n\n this.active = parseInt($anchor.getAttribute('data-id'), 10)\n this.$active = $anchor\n addClass(this.$active, HIGHLIGHT)\n\n this.positionPlaceholder(this.active)\n\n return this\n }\n\n sticky() {\n const afterSticky = this.attr('afterSticky')\n const FIXED = 'outline-chapters_fixed'\n const $el = this.$el\n const top = this.offsetTop\n const scrollTop = this.$scrollElement.scrollTop\n let isStickying\n\n if (!this.isFixed()) {\n return this\n }\n\n isStickying = scrollTop >= top\n\n if (isStickying) {\n addClass($el, FIXED)\n } else {\n removeClass($el, FIXED)\n }\n\n if (isFunction(afterSticky)) {\n afterSticky.call(this, this.isClosed(), isStickying)\n }\n\n return this\n }\n\n calculateStickyHeight() {\n const documentElement = document.documentElement\n const height = Math.max(\n documentElement.clientHeight || 0,\n window.innerHeight || 0\n )\n setProperty('--outline-sticky-height', `${height}px`)\n return this\n }\n\n scrollTo(top, after) {\n const el = this.$scrollElement\n\n scrollTo(el, top, after)\n\n return this\n }\n\n show() {\n const FOLDED = 'outline-chapters_folded'\n const HIDDEN = 'outline-chapters_hidden'\n const opened = this.attr('afterOpened')\n const $el = this.$el\n const $parent = this.$parentElement\n\n if (this.isInside()) {\n removeClass($parent, HIDDEN)\n removeClass($el, HIDDEN)\n later(() => {\n removeClass($parent, FOLDED)\n removeClass($el, FOLDED)\n }, 30)\n } else {\n removeClass($el, HIDDEN)\n }\n this.closed = false\n\n if (isFunction(opened)) {\n opened.call(this)\n }\n\n return this\n }\n\n hide() {\n const FOLDED = 'outline-chapters_folded'\n const HIDDEN = 'outline-chapters_hidden'\n const closed = this.attr('afterClosed')\n const $el = this.$el\n const $parent = this.$parentElement\n\n if (this.isInside()) {\n addClass($parent, FOLDED)\n addClass($el, FOLDED)\n later(() => {\n addClass($parent, HIDDEN)\n addClass($el, HIDDEN)\n })\n } else {\n addClass($el, HIDDEN)\n }\n this.closed = true\n\n if (isFunction(closed)) {\n closed.call(this)\n }\n\n return this\n }\n\n toggle() {\n const afterToggle = this.attr('afterToggle')\n const top = this.offsetTop\n const scrollTop = this.$scrollElement.scrollTop\n let isStickying\n\n if (this.isClosed()) {\n this.show()\n } else {\n this.hide()\n }\n\n if (isFunction(afterToggle)) {\n later(() => {\n isStickying = scrollTop >= top\n afterToggle.call(this, this.isClosed(), isStickying)\n })\n }\n\n return this\n }\n\n destroy() {\n const beforeDestroy = this.attr('beforeDestroy')\n const afterDestroy = this.attr('afterDestroy')\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n this.$parentElement.removeChild(this.$el)\n\n this.attr(Chapters.DEFAULTS)\n this.$el = null\n this.$title = null\n this.$main = null\n this.$list = null\n this.$placeholder = null\n this.$parentElement = null\n this.$scrollElement = null\n this.chapters = []\n this.active = 0\n this.offsetTop = 0\n this.$active = null\n this.closed = false\n\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer)\n this.scrollTimer = null\n }\n\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer)\n this.resizeTimer = null\n }\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n if (this.Observer) {\n this.Observer = null\n }\n\n return this\n }\n\n onObserver() {\n const selector = this.attr('selector')\n let timer = null\n\n this.Observer = intersection(\n ($heading) => {\n const id = $heading.getAttribute('data-id')\n\n if (this.playing) {\n return false\n }\n\n if (timer) {\n clearTimeout(timer)\n }\n\n timer = later(() => {\n this.highlight(id)\n }, 100)\n },\n {\n selector,\n context: this\n }\n )\n\n return this\n }\n\n onSelect(evt) {\n const stickyHeight = this.attr('stickyHeight')\n const $anchor = evt.delegateTarget\n const id = $anchor.getAttribute('data-id')\n const headingId = $anchor.href.split('#')[1]\n const $heading = document.querySelector(`#${headingId}`)\n const top = offsetTop($heading) - (stickyHeight + 10)\n const min = 0\n const max = this.$scrollElement.scrollHeight\n const afterScroll = this.attr('afterScroll')\n const after = () => {\n if (isFunction(afterScroll)) {\n afterScroll.call(this, 'chapter')\n }\n\n later(() => {\n this.playing = false\n publish('toolbar:update', {\n top,\n min,\n max\n })\n })\n }\n\n this.playing = true\n if (this.isFixed()) {\n this.sticky()\n later(() => {\n this.scrollTo(top, after)\n this.highlight(id)\n }, 10)\n } else {\n this.scrollTo(top, after)\n this.highlight(id)\n }\n\n stop(evt)\n\n return this\n }\n\n onScroll() {\n const $scrollElement = this.$scrollElement\n\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer)\n }\n\n this.scrollTimer = later(() => {\n const top = $scrollElement.scrollTop\n const min = 0\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\n\n if (this.isFixed()) {\n this.sticky()\n }\n\n publish('toolbar:update', {\n top,\n min,\n max\n })\n }, 100)\n\n return this\n }\n\n onResize() {\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer)\n }\n\n this.resizeTimer = later(() => {\n this.calculateStickyHeight()\n })\n\n return this\n }\n\n addListeners() {\n const $el = this.$el\n const $scrollElement = this.$scrollElement\n const tagName = $scrollElement.tagName.toLowerCase()\n let $element = $scrollElement\n\n if (tagName === 'html' || tagName === 'body') {\n $element = window\n }\n\n on($el, '.outline-chapters__anchor', 'click', this.onSelect, this, true)\n at($element, 'scroll', this.onScroll, this, true)\n if (this.isSticky()) {\n at($element, 'resize', this.onResize, this, true)\n }\n\n return this\n }\n\n removeListeners() {\n const selector = this.attr('selector')\n const $el = this.$el\n const $scrollElement = this.$scrollElement\n const tagName = $scrollElement.tagName.toLowerCase()\n let $element = $scrollElement\n\n if (tagName === 'html' || tagName === 'body') {\n $element = window\n }\n\n off($el, 'click', this.onSelect)\n off($element, 'scroll', this.onScroll)\n\n if (this.isSticky()) {\n at($element, 'resize', this.onResize)\n }\n\n if (this.Observer) {\n document.querySelectorAll(selector).forEach((section) => {\n this.Observer.unobserve(section)\n })\n }\n\n return this\n }\n}\n\nChapters.DEFAULTS = {\n parentElement: '',\n scrollElement: '',\n selector: '.outline-heading',\n active: 0,\n closed: false,\n showCode: true,\n position: 'relative',\n stickyHeight: 0,\n chapters: [],\n created: null,\n mounted: null,\n afterClosed: null,\n afterOpened: null,\n afterScroll: null,\n beforeDestroy: null,\n afterDestroy: null,\n afterSticky: null\n}\n\nexport default Chapters\n","import createElement from './utils/dom/createElement'\n\nconst _paintChapters = ($list, chapters, showCode = false) => {\n const byId = (id) => document.querySelector(`#${id}`)\n\n chapters.forEach((chapter) => {\n const pid = chapter.pid\n const id = chapter.id\n const rel = chapter.rel\n const $text = createElement(\n 'span',\n {\n className: 'outline-chapters__text'\n },\n [chapter.text]\n )\n const $link = createElement(\n 'a',\n {\n id: `chapter__anchor-${id}`,\n className: 'outline-chapters__anchor',\n href: '#' + rel,\n rel: rel,\n 'data-id': id\n },\n [$text]\n )\n let $code\n let $li\n let $ul\n let $parent\n\n if (showCode) {\n $code = createElement(\n 'span',\n {\n className: 'outline-chapters__code',\n 'data-id': id\n },\n [chapter.code]\n )\n\n $link.insertBefore($code, $link.firstChild)\n }\n\n $li = createElement(\n 'li',\n {\n id: `chapter-${id}`,\n className: 'outline-chapters__item',\n 'data-id': id\n },\n [$link]\n )\n\n if (pid === -1) {\n $list.appendChild($li)\n } else {\n $parent = byId(`chapter-${pid}`)\n $ul = byId(`subject-${pid}`)\n\n if (!$ul) {\n $ul = createElement(\n 'ul',\n {\n id: 'subject-' + pid,\n className: 'outline-chapters__subject'\n },\n [$li]\n )\n\n $parent.appendChild($ul)\n } else {\n $ul.appendChild($li)\n }\n }\n })\n}\n\nexport default _paintChapters\n","import isFunction from '../types/isFunction'\nimport isElement from '../types/isElement'\n\n/**\n * 通用的 IntersectionObserver 观察者处理器\n * ========================================================================\n * @method intersection\n * @param {Function} fn\n * @param {Object} [props]\n * @param {Object|HTMLElement} [props.root]\n * @param {String} [props.selector]\n * @param {Object} [props.context]\n * @param {String} [props.attr]\n * @param {String} [props.rootMargin]\n */\nconst intersection = (fn, props = {}) => {\n const root = props.root || null\n const selector = props.selector || '.outline-heading'\n const context = props.context || null\n const rootMargin = props.rootMargin || '0px 0px -90% 0px'\n const options = {\n rootMargin: rootMargin\n }\n const Observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio > 0) {\n if (isFunction(fn)) {\n fn.call(context || entry.target, entry.target)\n }\n }\n })\n }, options)\n const $root = isElement(root) ? root : document\n\n if (root) {\n options.root = root\n }\n\n $root.querySelectorAll(selector).forEach((section) => {\n Observer.observe(section)\n })\n\n return Observer\n}\n\nexport default intersection\n","import icon from './utils/icons/icon'\nimport createElement from './utils/dom/createElement'\nimport addClass from './utils/dom/addClass'\n\nconst _createButton = (button, rounded = true) => {\n const $icon = icon(button.icon, {\n iconSet: button.iconSet || 'outline',\n color: button.color || '',\n size: button.size\n })\n const $anchor = createElement(\n 'a',\n {\n className: `outline-toolbar__anchor`,\n href: button.link\n },\n [$icon]\n )\n const $button = createElement(\n 'div',\n {\n className: `outline-toolbar__button ${button.name}`\n },\n [button.link ? $anchor : $icon]\n )\n\n addClass($icon, 'outline-toolbar__icon')\n\n if (rounded) {\n addClass($button, 'outline-toolbar_rounded')\n }\n\n if (button.disabled) {\n addClass($button, 'outline-toolbar_disabled')\n }\n\n return $button\n}\n\nexport default _createButton\n","import Base from './base'\n\nimport isString from './utils/types/isString'\nimport isFunction from './utils/types/isFunction'\nimport isObject from './utils/types/isObject'\nimport isArray from './utils/types/isArray'\nimport later from './utils/lang/later'\nimport createElement from './utils/dom/createElement'\nimport addClass from './utils/dom/addClass'\nimport hasClass from './utils/dom/hasClass'\nimport removeClass from './utils/dom/removeClass'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\nimport publish from './utils/observer/emit'\nimport paint from './utils/icons/paint'\n\nimport _createButton from './_createButton'\n\nconst DISABLED = 'outline-toolbar_disabled'\nconst HIDDEN = 'outline-toolbar_hidden'\n\nclass Toolbar extends Base {\n constructor(options) {\n super()\n\n this.attrs = Toolbar.DEFAULTS\n this.$el = null\n this.disabled = false\n this.closed = false\n this.buttons = []\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n\n this.attr(options)\n created = this.attr('created')\n this.disabled = this.attr('disabled')\n this.closed = this.attr('closed')\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n this.render().addListeners()\n\n return this\n }\n\n isDisabled(name) {\n const buttons = this.attr('buttons')\n let button\n\n if (name) {\n button = buttons.find((option) => option.name === name)\n\n return button?.disabled\n }\n\n return this.disabled\n }\n\n isClosed() {\n return this.closed\n }\n\n highlight(name) {\n const button = this.buttons.find((item) => item.name === name)\n const ACTIVE = 'outline-toolbar_active'\n let $button\n\n if ($button) {\n return this\n }\n\n $button = button.$el\n\n if (hasClass($button, ACTIVE)) {\n removeClass($button, ACTIVE)\n } else {\n addClass($button, ACTIVE)\n }\n\n return this\n }\n\n render() {\n const mounted = this.attr('mounted')\n const buttons = this.attr('buttons') || []\n const rounded = this.attr('rounded')\n const placement = this.attr('placement')\n const $buttons = document.createDocumentFragment()\n const $fragment = document.createDocumentFragment()\n\n paint()\n\n buttons.forEach((button) => {\n const $button = _createButton(button, rounded)\n\n $buttons.appendChild($button)\n this.buttons.push({\n name: button.name,\n $el: $button\n })\n })\n\n this.$el = createElement(\n 'div',\n {\n id: 'outline-toolbar',\n className: `outline-toolbar outline-toolbar_${placement}`\n },\n [$buttons]\n )\n $fragment.appendChild(this.$el)\n document.body.appendChild($fragment)\n\n if (this.closed) {\n this.hide()\n }\n\n if (this.disabled) {\n this.disable()\n }\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n return this\n }\n\n add(button) {\n const $el = this.$el\n const buttons = this.attr('buttons')\n const action = button.action\n const $fragment = document.createDocumentFragment()\n let type\n\n if (isObject(button)) {\n buttons.push(button)\n $fragment.appendChild(_createButton(button))\n } else if (isArray(button)) {\n button.forEach((item) => {\n $fragment.appendChild(_createButton(item))\n })\n }\n $el.appendChild($fragment)\n\n if (action && isFunction(action.handler)) {\n type = action.type || 'click'\n on($el, `.${button.name}`, type, action.handler)\n }\n\n return this\n }\n\n remove(name) {\n const $el = this.$el\n const buttons = this.attr('buttons')\n const button = buttons.find((option) => option.name === name)\n let index = -1\n let $button\n\n if (!button) {\n return this\n }\n\n buttons.forEach((button, i) => {\n if (button.name === name) {\n index = i\n }\n })\n\n if (index > -1) {\n this.attr().buttons.splice(index, 1)\n }\n\n $button = $el.querySelector(`.${name}`)\n this.switch(name, false)\n $el.removeChild($button)\n\n return this\n }\n\n switch(name, enabled) {\n const $el = this.$el\n const buttons = this.attr('buttons')\n const button = buttons.find((option) => option.name === name)\n let action\n let type\n let listener\n let $button\n\n if (!button) {\n return this\n }\n\n buttons.forEach((option) => {\n if (option.name === name) {\n button.disabled = !enabled\n }\n })\n\n action = button.action\n $button = $el.querySelector(`.${name}`)\n\n if (action) {\n type = action.type || 'click'\n listener = action.handler\n }\n\n if (enabled) {\n removeClass($button, DISABLED)\n\n if (type && listener) {\n on($el, `.${name}`, type, listener)\n }\n } else {\n addClass($button, DISABLED)\n\n if (type && listener) {\n off($el, type, listener)\n }\n }\n\n return this\n }\n\n disable(name) {\n const disabled = this.attr('afterDisabled')\n\n if (name) {\n this.switch(name, false)\n } else {\n addClass(this.$el, DISABLED)\n this.removeListeners()\n this.disabled = true\n\n if (isFunction(disabled)) {\n disabled.call(this)\n }\n }\n\n return this\n }\n\n enable(name) {\n const enabled = this.attr('afterEnabled')\n\n if (name) {\n this.switch(name, true)\n } else {\n this.disabled = false\n removeClass(this.$el, DISABLED)\n this.addListeners()\n\n if (isFunction(enabled)) {\n enabled.call(this)\n }\n }\n\n return this\n }\n\n show(name) {\n const opened = this.attr('afterOpened')\n const button = this.attr('buttons').find((option) => option.name === name)\n const $el = this.$el\n let $button\n\n if (name) {\n if (!button) {\n return this\n }\n\n $button = $el.querySelector(`.${name}`)\n removeClass($button, HIDDEN)\n } else {\n removeClass($el, HIDDEN)\n this.closed = false\n\n if (isFunction(opened)) {\n later(() => {\n opened.call(this)\n }, 310)\n }\n }\n\n return this\n }\n\n hide(name) {\n const closed = this.attr('afterClosed')\n const button = this.attr('buttons').find((option) => option.name === name)\n const $el = this.$el\n let $button\n\n if (name) {\n if (!button) {\n return this\n }\n $button = $el.querySelector(`.${name}`)\n addClass($button, HIDDEN)\n } else {\n addClass($el, HIDDEN)\n this.closed = true\n\n if (isFunction(closed)) {\n later(() => {\n closed.call(this)\n }, 310)\n }\n }\n\n return this\n }\n\n toggle() {\n if (this.isClosed()) {\n this.show()\n } else {\n this.hide()\n }\n\n return this\n }\n\n destroy() {\n const beforeDestroy = this.attr('beforeDestroy')\n const afterDestroy = this.attr('afterDestroy')\n let $el = this.$el\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n document.body.removeChild($el)\n $el = null\n\n this.attr(Toolbar.DEFAULTS)\n this.disabled = false\n this.closed = false\n this.buttons = []\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n return this\n }\n\n refresh() {\n const $el = this.$el\n const buttons = this.attr('buttons') || []\n\n this.removeListeners()\n $el.innerHTML = ''\n\n buttons.forEach((button) => {\n this.$el.appendChild(_createButton(button))\n })\n\n this.addListeners()\n\n return this\n }\n\n addListeners() {\n const buttons = this.attr('buttons')\n const $el = this.$el\n\n if (!buttons || buttons.length < 1) {\n return this\n }\n\n buttons.forEach((button) => {\n const action = button.action\n const disabled = this.disabled\n let type\n let listener\n let context\n let command\n\n if (disabled) {\n return false\n }\n\n if (action) {\n listener = action.handler\n if (isString(listener)) {\n command = listener\n action.handler = function () {\n publish(command, button.name)\n }\n listener = action.handler\n }\n\n type = action.type || 'click'\n context = action.context\n }\n\n if (isFunction(listener)) {\n on($el, `.${button.name}`, type, listener, context || this, true)\n }\n })\n\n return this\n }\n\n removeListeners() {\n const buttons = this.attr('buttons')\n const $el = this.$el\n\n if (!buttons || buttons.length < 1) {\n return this\n }\n\n buttons.forEach((button) => {\n const action = button.action\n const disabled = this.disabled\n let type\n let listener\n\n if (disabled) {\n return false\n }\n\n if (action) {\n listener = action.handler\n type = action.type || 'click'\n }\n\n if (isFunction(listener)) {\n off($el, type, listener)\n }\n })\n\n return this\n }\n}\n\nToolbar.DEFAULTS = {\n placement: 'ltr',\n closed: false,\n disabled: false,\n rounded: true,\n buttons: [],\n created: null,\n mounted: null,\n afterClosed: null,\n afterOpened: null,\n afterDisabled: null,\n afterEnabled: null,\n beforeDestroy: null,\n afterDestroy: null\n}\n\nexport default Toolbar\n","/**\n * 生成唯一 id 字符串的函数\n * ========================================================================\n * @method guid\n * @param {String} [prefix] - 生成 id 的前缀字符串\n * @return {String} 返回一个表示唯一 id 的字符串\n */\nconst guid = (() => {\n let uuid = 0\n\n return (prefix) => {\n uuid += 1\n\n return prefix ? prefix + '-' + uuid : 'guid-' + uuid\n }\n})()\n\nexport default guid\n","import _subscribers from './_subscribers'\nimport isFunction from '../types/isFunction'\nimport guid from '../lang/guid'\n\n/**\n * 订阅主题,并给出处理器函数\n * ========================================================================\n * @method on\n * @param {String} topic - (必须)主题名称\n * @param {Function} handler - (必须)主题的处理器函数\n * @param {Object} [context] - (可选)指定 this 执行上下文\n * @return {String} - 唯一的 token 字符串,例如:'guid-1'。\n */\nconst on = (topic, handler, context = null) => {\n const token = guid()\n let subject = typeof topic === 'symbol' ? topic.toString() : topic\n\n if (!isFunction(handler)) {\n return ''\n }\n\n /* istanbul ignore else */\n if (!_subscribers[subject]) {\n _subscribers[subject] = []\n }\n\n _subscribers[subject].push({\n topic: subject,\n callback: handler,\n context,\n token\n })\n\n return token\n}\n\nexport default on\n","import _subscribers from './_subscribers'\nimport hasOwn from '../lang/hasOwn'\n\n/**\n * 删除与给定 topic 相同的订阅者信息\n * ========================================================================\n * @method _removeSubscriber\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _removeSubscriber = (topic) => {\n if (!hasOwn(_subscribers, topic)) {\n return false\n }\n\n delete _subscribers[topic]\n}\n\nexport default _removeSubscriber\n","import has from './has'\nimport _removeSubscriber from './_removeSubscriber'\nimport _removeSubscriberByToken from './_removeSubscriberByToken'\n\n/**\n * 取消订阅主题\n * ========================================================================\n * @method off\n * @param {String} topic - (必须)订阅的主题\n * @param {Function|String} [token] - (可选)订阅主题的处理器函数或者唯一 Id 值\n */\nconst off = (topic, token) => {\n if (!has(topic)) {\n return false\n }\n\n if (token) {\n _removeSubscriberByToken(token)\n } else {\n _removeSubscriber(topic)\n }\n}\n\nexport default off\n","import _subscribers from './_subscribers'\nimport _removeSubscriber from './_removeSubscriber'\n\n/**\n * 通过订阅者 token 值删除订阅者信息\n * ========================================================================\n * @method _removeSubscriberByToken\n * @param {String} token - 订阅者 token 字符串\n * @returns {boolean}\n * @private\n */\nconst _removeSubscriberByToken = (token) => {\n const keys = Object.keys(_subscribers)\n let index = -1\n\n if (!token || keys.length < 1) {\n return false\n }\n\n keys.forEach((subject) => {\n const subscriber = _subscribers[subject]\n let topic\n\n subscriber.forEach((execution, j) => {\n if (execution.callback === token || execution.token === token) {\n topic = execution.topic\n subscriber.splice(index, j)\n }\n })\n\n /* istanbul ignore else */\n if (subscriber.length < 1) {\n _removeSubscriber(topic)\n }\n })\n}\n\nexport default _removeSubscriberByToken\n","import Base from './base'\nimport Anchors from './anchors'\nimport Drawer from './drawer'\nimport Chapters from './chapters'\nimport Toolbar from './toolbar'\n\nimport later from './utils/lang/later'\nimport isFunction from './utils/types/isFunction'\nimport scrollTo from './utils/dom/scrollTo'\nimport _getScrollElement from './utils/dom/_getScrollElement'\nimport subscribe from './utils/observer/on'\nimport unsubscribe from './utils/observer/off'\n\nclass Outline extends Base {\n constructor(options) {\n super()\n\n this.attrs = Outline.DEFAULTS\n this.anchors = null\n this.drawer = null\n this.chapters = null\n this.toolbar = null\n this.buttons = []\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n this.attr(options).render().addListeners()\n return this\n }\n\n getChapters(isTreeStructured = false) {\n return this.anchors.getChapters(isTreeStructured)\n }\n\n count() {\n return this.anchors.count()\n }\n\n render() {\n const scrollElement = this.attr('scrollElement')\n const $scrollElement = document.querySelector(scrollElement) || document.getElementById(scrollElement)\n\n this._renderAnchors()._renderChapters()._renderToolbar()\n\n if ($scrollElement) {\n this.onToolbarUpdate({\n top: $scrollElement.scrollTop,\n min: 0,\n max: $scrollElement.scrollHeight\n })\n }\n\n return this\n }\n\n _renderAnchors() {\n const articleElement = this.attr('articleElement')\n const selector = this.attr('selector')\n const stickyHeight = this.attr('stickyHeight')\n const scrollElement = this.attr('scrollElement')\n const showCode = this.attr('showCode')\n const anchorURL = this.attr('anchorURL')\n const afterScroll = this.attr('afterScroll')\n\n this.anchors = new Anchors({\n articleElement,\n stickyHeight,\n scrollElement,\n selector,\n showCode,\n anchorURL,\n afterScroll\n })\n\n return this\n }\n\n _renderChapters() {\n const title = this.attr('title')\n const stickyHeight = this.attr('stickyHeight')\n const scrollElement = this.attr('scrollElement')\n const customClass = this.attr('customClass')\n const showCode = this.attr('showCode')\n const position = this.attr('position')\n const placement = this.attr('placement')\n const afterSticky = this.attr('afterSticky')\n const afterToggle = this.attr('afterToggle')\n const afterScroll = this.attr('afterScroll')\n const count = this.count()\n let parentElement = this.attr('parentElement')\n let CHAPTERS_OPTIONS\n\n if (count < 1) {\n return this\n }\n\n CHAPTERS_OPTIONS = {\n scrollElement,\n showCode,\n position,\n title,\n stickyHeight,\n chapters: this.getChapters(),\n afterSticky,\n afterToggle,\n afterScroll\n }\n\n if (position === 'relative') {\n this.drawer = new Drawer({\n placement,\n title,\n size: 'tiny',\n hasOffset: true,\n hasPadding: false,\n customClass,\n afterClosed: () => {\n const toolbar = this.toolbar\n toolbar.toggle()\n }\n })\n parentElement = this.drawer.$main\n } else {\n CHAPTERS_OPTIONS.customClass = customClass\n }\n\n CHAPTERS_OPTIONS.parentElement = parentElement\n this.chapters = new Chapters(CHAPTERS_OPTIONS)\n\n return this\n }\n\n _renderToolbar() {\n const placement = this.attr('placement')\n const homepage = this.attr('homepage')\n const git = this.attr('git')\n const tags = this.attr('tags')\n const issues = this.attr('issues')\n const tools = this.attr('tools')\n const count = this.count()\n const UP = {\n name: 'up',\n icon: 'up',\n size: 20,\n action: {\n type: 'click',\n handler: 'toolbar:action:up'\n }\n }\n const HOME = {\n name: 'homepage',\n icon: 'homepage',\n size: 20,\n link: homepage\n }\n const GIT = {\n name: 'github',\n icon: 'github',\n size: 20,\n link: git\n }\n const TAGS = {\n name: 'tags',\n icon: 'tags',\n size: 20,\n link: tags\n }\n const ISSUES = {\n name: 'issues',\n icon: 'issues',\n size: 20,\n link: issues\n }\n const MENU = {\n name: 'menu',\n icon: 'menu',\n size: 18,\n action: {\n type: 'click',\n handler: 'toolbar:action:toggle'\n }\n }\n const DOWN = {\n name: 'down',\n icon: 'down',\n size: 20,\n action: {\n type: 'click',\n handler: 'toolbar:action:down'\n }\n }\n const buttons = []\n\n buttons.push(UP)\n if (homepage) {\n buttons.push(HOME)\n }\n if (count > 0) {\n buttons.push(MENU)\n }\n if (git) {\n buttons.push(GIT)\n }\n if (tags) {\n buttons.push(TAGS)\n }\n if (issues) {\n buttons.push(ISSUES)\n }\n if (tools?.length > 0) {\n buttons.push(...tools)\n }\n buttons.push(DOWN)\n this.buttons = [...buttons]\n\n this.toolbar = new Toolbar({\n placement,\n buttons: buttons\n })\n\n return this\n }\n\n addButton(button) {\n const toolbar = this.toolbar\n const buttons = this.buttons\n buttons.splice(-1, 0, button)\n toolbar.attr({\n buttons\n })\n toolbar.refresh()\n return this\n }\n\n removeButton(name) {\n this.toolbar.remove(name)\n return this\n }\n\n toTop() {\n const afterScroll = this.attr('afterScroll')\n const toolbar = this.toolbar\n const chapters = this.chapters\n const count = this.count()\n const afterTop = () => {\n toolbar.hide('up')\n toolbar.show('down')\n\n if (count > 0) {\n chapters.highlight(0)\n chapters.playing = false\n }\n\n if (isFunction(afterScroll)) {\n afterScroll.call(toolbar, 'up')\n }\n }\n\n if (count > 0) {\n chapters.playing = true\n }\n this.scrollTo(0, afterTop)\n\n return this\n }\n\n toBottom() {\n const afterScroll = this.attr('afterScroll')\n const $scrollElement = _getScrollElement(this.attr('scrollElement'))\n const toolbar = this.toolbar\n const chapters = this.chapters\n const count = this.count()\n const top = Math.floor(\n $scrollElement.scrollHeight - $scrollElement.clientHeight\n )\n const afterDown = () => {\n toolbar.hide('down')\n toolbar.show('up')\n\n if (count > 0) {\n chapters.highlight(count - 1)\n chapters.playing = false\n }\n\n if (isFunction(afterScroll)) {\n afterScroll.call(toolbar, 'bottom')\n }\n }\n\n if (count > 0) {\n chapters.playing = true\n }\n this.scrollTo(top, afterDown)\n\n return this\n }\n\n scrollTo(top, afterScroll) {\n const scrollElement = this.attr('scrollElement')\n scrollTo(scrollElement, top, afterScroll)\n return this\n }\n\n toggle() {\n const position = this.attr('position')\n const toolbar = this.toolbar\n const drawer = this.drawer\n const chapters = this.chapters\n const count = this.count()\n\n if (count < 1) {\n return this\n }\n\n if (position !== 'relative') {\n chapters.toggle()\n toolbar.highlight('menu')\n } else {\n toolbar.toggle()\n\n later(() => {\n if (chapters.isInside()) {\n chapters.toggle()\n } else {\n drawer.toggle()\n }\n })\n }\n\n return this\n }\n\n destroy() {\n let anchors = this.anchors\n let chapters = this.chapters\n let drawer = this.drawer\n let toolbar = this.toolbar\n let isOutside = false\n const count = this.count()\n\n this.removeListeners()\n\n if (count > 0) {\n isOutside = chapters.isOutside()\n\n chapters.destroy()\n chapters = null\n\n if (isOutside) {\n drawer.destroy()\n drawer = null\n }\n }\n\n toolbar.destroy()\n toolbar = null\n\n anchors.destroy()\n anchors = null\n\n this.attr(Outline.DEFAULTS)\n\n return this\n }\n\n onToggle() {\n this.toggle()\n return this\n }\n\n onScrollTop() {\n this.toTop()\n return this\n }\n\n onScrollBottom() {\n this.toBottom()\n return this\n }\n\n onToolbarUpdate({ top, min, max }) {\n const toolbar = this.toolbar\n const current = Math.ceil(top)\n\n if (current <= min) {\n toolbar.hide('up')\n toolbar.show('down')\n } else if (current >= max) {\n toolbar.hide('down')\n toolbar.show('up')\n } else if (current > min && current < max) {\n toolbar.show('up')\n toolbar.show('down')\n }\n\n return this\n }\n\n addListeners() {\n subscribe('toolbar:update', this.onToolbarUpdate, this)\n subscribe('toolbar:action:up', this.onScrollTop, this)\n subscribe('toolbar:action:toggle', this.onToggle, this)\n subscribe('toolbar:action:down', this.onScrollBottom, this)\n return this\n }\n\n removeListeners() {\n unsubscribe('toolbar:update')\n unsubscribe('toolbar:action:up')\n unsubscribe('toolbar:action:toggle')\n unsubscribe('toolbar:action:down')\n return this\n }\n}\n\nOutline.DEFAULTS = {\n articleElement: '#article',\n selector: 'h2,h3,h4,h5,h6',\n title: '目录',\n scrollElement: 'html,body',\n position: 'relative',\n parentElement: '#aside',\n placement: 'rtl',\n showCode: true,\n anchorURL: '',\n stickyHeight: 0,\n homepage: '',\n git: '',\n tags: '',\n issues: '',\n tools: [],\n customClass: '',\n afterSticky: null,\n afterToggle: null,\n afterScroll: null\n}\n\nif (window.jQuery) {\n // 将 Outline 扩展为一个 jquery 插件\n // eslint-disable-next-line no-undef\n jQuery.extend(jQuery.fn, {\n outline: function (options) {\n // eslint-disable-next-line no-undef\n let $article = jQuery(this)\n\n return new Outline(\n // eslint-disable-next-line no-undef\n jQuery.extend({}, options, {\n articleElement: $article\n })\n )\n }\n })\n}\n\nexport default Outline\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isElement","nodeName","tagName","nodeType","later","fn","delay","setTimeout","easeInQuad","x","_getScrollElement","scrollElement","$rootElements","$scrollElement","document","querySelector","querySelectorAll","scrollTop","scrollTo","top","afterStop","step","distance","MAX_HEIGHT","scrollHeight","MAX_TOP","stop","play","requestAnimationFrame","offsetTop","el","offsetParent","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","$children","childNodes","filter","getListeners","$child","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","stopPropagation","preventDefault","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","isArray","Array","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","exec","iconName","getSymbol","paint","$body","body","$icons","symbols","add","innerHTML","join","createElement","insertBefore","firstChild","trim","isDOM","isHTMLCollection","fragment","isTextNode","setAttribute","toLowerCase","style","cssText","className","children","$fragment","createDocumentFragment","$el","isValidChild","child","append","createTextNode","appendChild","every","isSVG","pattern","RegExp","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","hasClass","allClass","classList","contains","removeClass","remove","_resetHeading","$heading","hasAnchor","isAtStart","CLS_HEADING","text","$anchor","removeAttribute","removeChild","getChapters","headings","showCode","previous","level","chapters","heading","headingLevel","current","parseInt","pid","differ","_getChapterParentIdByDiffer","id","rel","groups","group","JSON","stringify","cb","code","String","c","b","_getChaptersWithCode","Anchors","super","DEFAULTS","$articleElement","$headings","created","articleElement","isTreeStructured","list","nodeKey","parentKey","map","roots","item","node","toTree","count","mounted","anchorURL","chapterCode","headingId","href","_updateHeading","after","beforeDestroy","afterDestroy","onAnchorTrigger","afterScroll","stickyHeight","max","clientHeight","publish","min","addClass","setProperty","documentElement","zIndex","idx","Drawer","title","closed","$modal","$header","$title","$close","$main","$footer","$overlay","setTitle","isClosed","placement","hasClose","hasOverlay","hasOffset","hasPadding","autoHeight","customClass","open","opened","close","toggle","afterToggle","onClose","afterClosed","afterOpened","at","getStyle","ruleName","getComputedStyle","Chapters","$list","$placeholder","$parentElement","active","offsetWidth","$active","scrollTimer","resizeTimer","playing","Observer","parentElement","$parent","isSticky","isFixed","isInside","isOutside","_paintEdge","contents","calculateStickyHeight","byId","chapter","$text","$link","$code","$li","$ul","_paintChapters","positionPlaceholder","sticky","onObserver","mainPaddingTop","mainBorderTop","placeholderPaddingTop","placeholderMarginTop","placeholderBorderTop","offsetHeight","highlight","HIGHLIGHT","getAttribute","afterSticky","FIXED","isStickying","Math","window","innerHeight","show","FOLDED","HIDDEN","hide","clearTimeout","timer","props","root","rootMargin","IntersectionObserver","entries","entry","intersectionRatio","$root","section","observe","intersection","onSelect","split","onScroll","onResize","unobserve","_createButton","button","rounded","link","$button","disabled","DISABLED","Toolbar","buttons","isDisabled","option","ACTIVE","$buttons","disable","action","switch","enabled","enable","refresh","command","afterDisabled","afterEnabled","guid","uuid","prefix","token","subject","_removeSubscriber","execution","j","_removeSubscriberByToken","Outline","anchors","drawer","toolbar","getElementById","_renderAnchors","_renderChapters","_renderToolbar","onToolbarUpdate","CHAPTERS_OPTIONS","homepage","git","tags","issues","tools","HOME","GIT","TAGS","ISSUES","MENU","addButton","removeButton","toTop","toBottom","floor","onToggle","onScrollTop","onScrollBottom","ceil","subscribe","unsubscribe","jQuery","extend","outline","$article"],"mappings":"wOAOA,MAAMA,EAAYC,GACM,iBAARA,ECAVC,EAAS,CAACC,EAAKC,KACnB,MAAMC,EAAiBC,OAAOC,UAAUF,eACxC,OAAOF,GAAOE,EAAeG,KAAKL,EAAKC,EAAI,ECHvCK,EAAYC,GACTJ,OAAOC,UAAUE,SAASE,MAAMD,GCCnCE,EAAcF,GACI,mBAARA,GAAwC,sBAAlBD,EAASC,GCAzCG,EAAYC,IAEG,oBAAhBL,EAASK,IACK,iBAANA,GACPF,EAAWE,KACP,OAANA,ECVJ,MAAMC,EACJC,YAAYC,GACVC,KAAKC,MAAQ,CAAE,EAEXF,GACFC,KAAKE,WAAWH,EAEnB,CAEDG,WAAWH,GAET,OADAC,KAAKG,KAAKJ,GAASK,SAASC,eACrBL,IACR,CAEDG,KAAKjB,EAAMoB,GACT,MAAML,EAAQD,KAAKC,MAEnB,OAAInB,EAASI,GAEPoB,GAAStB,EAAOiB,EAAOf,IAEzBe,EAAMf,GAAQoB,EACPN,MAIFC,EAAMf,GACJS,EAAST,ICvBRqB,EDyBHN,ECzBWO,EDyBJtB,ECxBLE,OAAOqB,KAAKD,GAEpBE,SAASxB,IACRF,EAAOwB,EAAQtB,KACjBqB,EAAOrB,GAAQsB,EAAOtB,GACvB,IDqBQc,MACuB,IAArBW,UAAUC,OAEZX,EAGFD,KCjCI,IAACO,EAAQC,CDkCrB,CAEDJ,SACE,OAAOJ,IACR,CAEDa,UAEE,OADAb,KAAKc,kBACEd,IACR,CAEDe,OAAOhB,GAEL,OADAC,KAAKa,UAAUX,WAAWF,KAAKG,KAAKJ,IAC7BC,IACR,CAEDK,eACE,OAAOL,IACR,CAEDc,kBACE,OAAOd,IACR,EExDH,MAAMgB,EAAapB,MACPD,EAASC,IAAMA,EAAEqB,UAAYrB,EAAEsB,SAA0B,IAAftB,EAAEuB,UCAlDC,EAAQ,CAACC,EAAIC,EAAQ,QACpB5B,EAAW2B,IAITE,YAAW,KAChBF,GAAI,GACHC,GCVCE,EAAcC,GACXA,EAAIA,ECGPC,EAAoB,CAACC,EAAgB,QACzC,IAAIC,EACAC,EAgBJ,OAdKF,EAOC7C,EAAS6C,GACXE,EAAiBC,SAASC,cAAcJ,GAC/BX,EAAUW,KACnBE,EAAiBF,IATnBC,EAAgBE,SAASE,iBAAiB,aAC1CH,EACED,EAAc,GAAGK,UAAYL,EAAc,GAAGK,WAAa,EACvDL,EAAc,GACdA,EAAc,IASfC,GCjBHK,EAAW,CAACP,EAAeQ,EAAKC,KACpC,MAAMP,EAAiBH,EAAkBC,GACzC,IAAIM,EAAYJ,EAAeI,UAC3BI,EAAO,EACX,MAAMC,EAAWH,EAAMF,EACjBM,EAAaV,EAAeW,aAC5BC,EAAUN,EAAMI,GAAc,EAAIJ,EAAMI,EACxCG,EAAQP,IACRzC,EAAW0C,IACbA,EAAUD,IAGL,GAEHQ,EAAO,KAIX,GAHAN,GAAQ,EAGJC,EAAW,GAIb,GAHAL,GAAaT,EAAWa,GACxBR,EAAeI,UAAYA,EAEvBA,GAAaE,EAEf,OADAN,EAAeI,UAAYE,EACpBO,EAAKP,QAMd,GAHAF,GAAaT,EAAWa,GACxBR,EAAeI,UAAYA,EAEvBA,GAAaQ,EAEf,OADAZ,EAAeI,UAAYQ,EACpBC,EAAKD,GAIhBG,sBAAsBD,EAAK,EAG7BC,sBAAsBD,EAAK,EC5CvBE,EAAaC,IACjB,IAAIX,EAAMW,EAAGD,UAMb,OAJwB,OAApBC,EAAGC,eACLZ,GAAOU,EAAUC,EAAGC,eAGfZ,GCDHa,EAAU,CAACF,EAAIG,EAAW,MAC9B,MAAMC,EAAMD,EAASE,QAAQ,MAAO,IAEpC,SAAKF,GAAaC,GAAQJ,KAKtBA,EAAGE,QACEF,EAAGE,QAAQE,KACTJ,EAAGM,mBACLN,EAAGM,kBAAkBF,GAG7B,ECpBGG,EAAmBP,GAChBA,EAAGQ,MAAQR,IAAOhB,UAAYgB,EAAGQ,KAAKnC,SACzC2B,EAAGQ,KACHR,EAAGS,WCVIC,EAAiB,CAC5B,WACA,OACA,UACA,QACA,OACA,SACA,aACA,cCMIC,EAAO,CAACX,EAAIY,EAAMrC,KACtB,MAAMsC,EAAUH,EAAeI,QAAQF,IAAS,EAG5CrC,EAAGwC,0BACLxC,EAAKA,EAAGwC,mBACEA,kBCZE,SAAUf,EAAIY,EAAMrC,GAClC,MAAMyC,EAAYhB,EAAGiB,WACrB,IAAIC,GAAS,EAEb,GAAIF,EAAUlD,OAAS,EACrB,OAAO,EAITkD,EAAUpD,SAAQ,CAACuD,EAAUC,KAC3B,MAAMC,EAAUF,EAAS5C,GAErBqC,IAASO,EAASP,OACpBM,EAAQE,EAEJC,IAAY9C,IACd2C,EAAQE,GAEX,IAICF,GAAS,GACXF,EAAUM,OAAOJ,EAAO,EAE5B,CDTEK,CAAQvB,EAAIY,EAAMrC,GAElByB,EAAGwB,oBAAoBZ,EAAMrC,EAAIsC,EAAQ,EEVrCY,EAAe,SAAUzB,EAAIY,EAAMc,GAAU,GACjD,MAAMC,EAAW3F,EAASgE,GAAMhB,SAASC,cAAce,GAAMA,EACvD4B,EAAYD,EAASE,WACrBb,ECPa,EAAChB,EAAIY,KACxB,IAAII,EAAYhB,EAAGiB,YAAc,GAQjC,OANIjF,EAAS4E,IAASA,IACpBI,EAAYA,EAAUc,QAAQX,GACrBA,EAASP,OAASA,KAItBI,GDFWe,CAAaJ,EAAUf,GAEzCI,EAAUpD,SAASuD,IACjBR,EAAKgB,EAAUR,EAASP,KAAMO,EAAS5C,GAAG,KAIzCmD,IAAoB,IAATd,GAAsC,IAArB/C,UAAUC,SACvC6D,GACAC,GAEAA,EAAUhE,SAASoE,IACb9D,EAAU8D,IACZP,EAAaO,EAAQpB,EAAMc,EAC5B,GAGP,EEtBMO,EAAM,CAACjC,EAAIY,EAAMrC,KAErB,IAAK3B,EAAW2B,GACd,OAAOkD,EAAazB,EAAIY,GAG1BD,EAAKX,EAAIY,EAAMrC,EAAG,ECDd2D,EAAK,CAAClC,EAAIG,EAAUS,EAAMrC,EAAI4D,EAAMC,EAASC,GAAO,KAExD,MAAMxB,EAAUH,EAAeI,QAAQF,IAAS,EAE1CO,EAAW,SAAUmB,GACzB,MAAMC,ECfQ,SAAUD,GAC1B,MAAMC,EAASD,EAAIC,OAEnB,OCJgCvC,EDITuC,ICHG,IAAhBvC,EAAG3B,SACJ2B,EAAGS,WAGLT,EALe,IAAUA,CDKlC,CDWmBwC,CAAUF,GAEnBG,EGbM,EAACzC,EAAIG,EAAUuC,EAAKC,KAClC,MAAMP,EAAUM,GAAO1D,SAEvB,IAAKgB,EACH,OAAO,KAGT,EAAG,CAED,GACe,MAAZG,IACEA,EAASyC,WAAW,KACjB5C,EAAGS,aAAe2B,GAAWlC,EAAQF,EAAIG,GACzCD,EAAQF,EAAIG,KACjBwC,GAAc3C,IAAOoC,EAEtB,OAAOpC,EAIT,GAAIA,IAAOoC,EACT,KAIN,OAAYpC,EAAKO,EAAgBP,GAAK,EHZX6C,CAAQN,EAAQpC,EAAUH,GACjD,IAAI8C,EAAkBV,GAAWpC,EAEjCsC,EAAIG,eAAiBA,GAIL,IAAZL,IACFU,EAAkBX,GAIhBM,KAGW,IAATJ,GACFJ,EAAIjC,EAAIY,EAAMO,GAGhB5C,EAAG/B,KAAKsG,EAAiBR,EAAKH,GAEjC,EAEInC,EAAGiB,aACNjB,EAAGiB,WAAa,IAIlBjB,EAAGiB,WAAW8B,KAAK,CACjB/C,KACAG,WACAS,OACArC,GAAI4C,EACJgB,OACAC,UACAvB,YAIFtC,EAAGwC,kBAAoBI,EAEvBnB,EAAGgD,iBAAiBpC,EAAMO,EAAUN,EAAQ,EIvCxCjB,EAAO,SAAU0C,GACrBA,EAAIW,kBACJX,EAAIY,gBACN,ECzBMC,EAAe,CAAA,ECIfC,EAA4BC,GACzBnH,EAAOiH,EAAcE,IAAUF,EAAaE,GAAOvF,OAAS,ECA/DwF,EAAM,CAACD,EAAOE,GAAW,IACtBA,EAAWH,EAAyBC,GCHrB,CAACA,IACvB,IAAIG,EAAQJ,EAAyBC,GACjCI,EAAWJ,EAAMK,YAAY,KAEjC,MAAQF,IAAuB,IAAdC,GAEfA,GADAJ,EAAQA,EAAMM,UAAU,EAAGF,IACVC,YAAY,KAC7BF,EAAQJ,EAAyBC,GAGnC,OAAOG,GDP6CI,CAAgBP,GEGhEQ,EAAO,CAACR,EAAOlB,EAAM2B,GAAQ,KACjC,MAAMC,EAAWV,IACf,IAAKD,EAAyBC,GAC5B,OAAO,EAGTF,EAAaE,GAAOzF,SAASoG,IAG3B,MAAMC,EChBI,CACZ,qBACA,sBACA,6BACA,sBACA,uBACA,sBACA,uBACA,wBACA,wBACA,yBACA,2BAGWnD,QAAQrE,EDEY0F,KCFM,EDEEA,EAAK1F,WAAa0F,EAEvD6B,EAAWE,SAAS1H,KAAKwH,EAAW5B,SAAW4B,EAAYC,EAAQ,GACnE,EAEEE,EAAU,KACd,IAAIH,EAAaX,EACbI,EAAWJ,EAAMK,YAAY,KAEjC,MAAqB,IAAdD,GACLO,EAAaA,EAAWL,UAAU,EAAGF,GACrCA,EAAWO,EAAWN,YAAY,KAElCK,EAAQC,GAIVD,EAAQV,GAERU,EAAQ,IAAI,EAGd,IAAKT,EAAID,GACP,OAAO,EAGLS,EACFrF,WAAW0F,EAAS,IAEpBA,GACD,EE7CGC,EAAWtH,GACXuH,MAAMD,QACDC,MAAMD,QAAQtH,GAEE,mBAAhBL,EAASK,GCXdwH,EAAU,CCDd,gbACA,2bACA,+MACA,yqBACA,4UACA,kqBACA,q4DACA,0wBACA,wvBCEIC,EAAa,CAACC,EAAMC,EAAU,SAC9BzI,EAASwI,GCJG,EAACA,EAAMC,EAAU,UACjC,MAAMC,EAAc,aACdC,EAAa,UAGnB,OAFgBL,EAEDM,MAAMC,IACnB,MACMC,EADQJ,EAAYK,KAAKF,GACR,GAMvB,OALaF,EAAWI,KAAKD,GACR,KAIFL,GAAWK,KAFhB,SAAZL,EAAqB,GAAGA,KAAWD,IAAS,GAAGC,UAAgBD,IAEtBQ,GAC5C,EDTQC,CAAUT,EAAMC,GAGlB,IAAIH,GEPPY,EAAQ,CAACL,EAAS,MACtB,MAAMM,EAAQnG,SAASoG,KACvB,IAAIC,EAASrG,SAASC,cAAc,kBAChCqG,EAAU,GCHJ,CAACA,IACX,IAAKA,EACH,OAAO,EAGLlB,EAAQkB,IAAYA,EAAQxH,OAAS,EACvCwH,EAAQ1H,SAASiH,KAEkB,IAA7BP,EAAQxD,QAAQ+D,IAAkB7I,EAAS6I,IAC7CP,EAAQvB,KAAK8B,EACd,IAIC7I,EAASsJ,IACXhB,EAAQvB,KAAKuC,EAEhB,EDZDC,CAAIV,GACJS,EAAUf,IAENc,EACFA,EAAOG,UAAYF,EAAQG,KAAK,KAEhCJ,EAASrG,SAAS0G,cAAc,OAChCL,EAAOG,UAEL,uHAAGF,EAAQG,KAAK,YAElBN,EAAMQ,aAAaN,EAAOO,WAAYT,EAAMS,YAC7C,EEjBGC,EAAQ5J,KACPD,EAASC,IAGPA,EAAIoE,QAAQ,iBAAkB,ICPjCyF,EAAS9F,IACb,SACEnD,EAASmD,MACR9B,EAAU8B,ICNU,CAACA,MACdnD,EAASmD,IAAwB,sBAAjBvD,EAASuD,IDKf+F,CAAiB/F,KENnBgG,EFMqChG,EEJrDnD,EAASmJ,IAAoC,8BAAvBvJ,EAASuJ,KCFhB,CAAChG,MAEhBnD,EAASmD,MACS,kBAAjBvD,EAASuD,IAA4BA,EAAG5B,SAA2B,IAAhB4B,EAAG3B,WHGK4H,CAAWjG,KENxD,IAACgG,CFOjB,EIFGE,EAAe,CAAClG,EAAI3C,EAAMG,KAC9B,IAAIY,EAAU4B,EAAG5B,QAAQ+H,cAEzB,OAAQ9I,GACN,IAAK,QACH2C,EAAGoG,MAAMC,QAAU7I,EACnB,MACF,IAAK,QACa,UAAZY,GAAmC,aAAZA,EACzB4B,EAAGxC,MAAQA,EAEXwC,EAAGkG,aAAa7I,EAAMG,GAExB,MACF,IAAK,YACHwC,EAAGsG,UAAY9I,EACf,MACF,QACEwC,EAAGkG,aAAa7I,EAAMG,GAEzB,ECZGkI,EAAgB,CAACtH,EAASjB,EAAOoJ,KACrC,MAAMC,EAAYxH,SAASyH,yBACrBC,EAAM1H,SAAS0G,cAActH,GAC7BuI,EAAgBC,GACbd,EAAMc,IAAU5K,EAAS4K,GAE5BC,EAAUD,IACd,IAAI5E,EAEJ,IAAK2E,EAAaC,GAChB,OAAO,EAGLd,EAAMc,GACR5E,EAAS4E,EACA5K,EAAS4K,KAClB5E,EAAShD,SAAS8H,eAAeF,IAGnCJ,EAAUO,YAAY/E,EAAO,EAyB/B,OAtBInF,EAASM,GACXb,OAAOqB,KAAKR,GAAOS,SAASP,IACtBnB,EAAOiB,EAAOE,IAChB6I,EAAaQ,EAAKrJ,EAAMF,EAAME,GAC/B,IAEM+G,EAAQjH,IAAUA,EAAM6J,OAAO3J,GAASsJ,EAAatJ,MAC9DF,EAAMS,SAASgJ,IACbC,EAAOD,EAAM,IAIbxC,EAAQmC,GACVA,EAAS3I,SAASgJ,IAChBC,EAAOD,EAAM,IAGfC,EAAON,GAGTG,EAAIK,YAAYP,GAETE,GC1DHO,EAAShL,IACb,MAKMiL,EAAU,IAAIC,OADR,uIACoB,KAEhC,OAAOnL,EAASC,IAAQiL,EAAQE,KAAKnL,EAAG,ECKpCoL,EAAO,CAAC7C,EAAMvH,EAAU,KCAR,EAACuH,EAAMvH,EAAU,MACrC,MAAMqK,EAAOrK,EAAQqK,MAAQ,EACvBC,EAAQtK,EAAQsK,OAAS,GACzB9C,EAAUxH,EAAQwH,SAAW,GAC7B+C,EAAQpD,EAAQkD,GAAQA,EAAK,GAAKA,EAClCG,EAASrD,EAAQkD,GAAQA,EAAK,GAAKA,EACnCI,EAAeJ,EAAO,SAASE,cAAkBC,OAAc,GAC/DE,EAAWJ,EAAQG,EAAe,SAASH,IAAUG,EACrDE,EAAQ5I,SAAS0G,cAAc,KACrC,IAEImC,EAFAC,EAAQ,GACRC,EAAM,GAGV,OAAK/L,EAASwI,IAIVyC,EAAMzC,GACRuD,EAAMvD,GAENsD,EACErD,GAAuB,SAAZA,EACP,gBAAgBA,UAAgBD,KAChC,qBAAqBA,KAC3BuD,EACE,4DAA4DJ,WACpDG,kBAIZF,EAAMtB,UAAY,eAClBsB,EAAMpC,UAAYuC,EAEdd,EAAMzC,KACRqD,EAAOD,EAAM3I,cAAc,OAC3B4I,EAAK3B,aAAa,cAAe,QACjC2B,EAAK3B,aAAa,QAAS,8BAC3B2B,EAAK3B,aAAa,QAAS,qBAC3B2B,EAAK3B,aAAa,QAAS,OAC3B2B,EAAK3B,aAAa,SAAU,OAC5B2B,EAAKzB,MAAQuB,GAGRC,GA7BE,IA6BFA,ED1CAlC,CAAclB,EAAMvH,GEPvB+K,EAAW,CAAChI,EAAIsG,KACpB,MAAMY,EAAU,IAAIC,OAAO,UAAYb,EAAY,WACnD,IAAI2B,EACAC,EAEJ,QAAKhK,EAAU8B,KAIfiI,EAAWjI,EAAGsG,YAET2B,IAILC,EAAYlI,EAAGkI,UAEXA,GAAWC,SACNnI,EAAGkI,UAAUC,SAAS7B,KAGtBY,EAAQnC,KAAKkD,IAAQ,ECnB1BG,EAAc,CAACpI,EAAIsG,KACvB,IACI4B,EADAD,EAAWjI,EAAGsG,UAGlB,IAAK2B,IAAaD,EAAShI,EAAIsG,GAC7B,OAAO,EAGT4B,EAAYlI,EAAGkI,UAEXA,GAAWG,OACbH,EAAUG,OAAO/B,IAEjB2B,EAAWpC,EAAKoC,EAAS5H,QAAQiG,EAAW,KAC5CtG,EAAGsG,UAAY2B,EAChB,ECtBGK,EAAgB,CAACC,EAAUC,GAAY,EAAMC,GAAY,KAC7D,MAAMC,EAAc,kBACdC,EAAOJ,EAAS/C,UAEtB,IAAIoD,EAQJ,GANAL,EAAS/C,UAAYmD,EAAKtI,QAHV,qBAG2B,IAC3CkI,EAASM,gBAAgB,MACzBN,EAASM,gBAAgB,WAEzBT,EAAYG,EAAUG,IAEjBF,EACH,OAAO,ECTK,IAACvM,EDYf2M,EAAUL,EAAStJ,cAAc,IAAIyJ,aAEjCD,GACFL,EAAYG,EAAU,GAAGG,WCfZzM,EDkBH4J,EAAK0C,EAASjC,WCjBnBtK,EAASC,IAAgB,KAARA,GDkBtBsM,EAASM,gBAAgB,SAG3BN,EAASO,YAAYF,EAAQ,EExBzBG,EAAc,CAACC,EAAUC,GAAW,KACxC,IAAIC,EAAW,EACXC,EAAQ,EACZ,MAAMC,EAAW,GAuEjB,OArEAJ,EAASpL,SAAQ,CAACyL,EAASjI,KACzB,MAAMkI,EAAeD,EAAQjL,QAAQiC,QAAQ,KAAM,IACnD,IAAIkJ,EAAUC,SAASF,EAAc,IACjCG,GAAO,ECLG,IAACxN,EDWXsN,EAAUL,GACZC,GAAS,EAIPM,EADY,IAAVN,GACK,EAED/H,EAAI,GAWLmI,IAAYL,GAAaK,EAAUL,GAAYK,EAAUJ,EAEhD,IAAZI,GACFJ,EAAQ,EACRM,GAAO,GAEPA,EAAML,EAAShI,EAAI,GAAGqI,IAIjBF,GAAWJ,IAEF,IAAZI,EACFJ,EAAQ,GAERA,GAAiBD,EAAWK,EAExBJ,GAAS,IACXA,EAAQ,IAMVM,EADY,IAAVN,GACK,EE9DqB,EAACC,EAAUM,EAAQxI,KACrD,IACIuI,EACArI,EAFA8H,EAAWE,EAASlI,EAAQ,GAIhC,IAAKE,EAAI,EAAGA,EAAIsI,EAAQtI,GAAK,EAC3BqI,EAAMP,EAASO,IACfP,EAAWE,EAASK,GAKtB,OAFAA,EAAMP,EAASO,IAERA,GFqDKE,CAA4BP,EAAUF,EAAWK,EAASnI,IAIpE8H,EAAWK,EAEXH,EAASrG,KAAK,CACZ6G,GAAIxI,EACJqI,IAAKA,EACLN,MAAOA,EACPU,IAAK,WAAWzI,IAChBuH,MCnEa1M,EDmEG4J,EAAKwD,EAAQ7D,WClE5BxJ,EAASC,GAGPA,EAAIoE,QAAQ,kBAAmB,IAF7B,KDkEL,IAGG4I,EGhFoB,CAACG,IAC5B,MAAMU,EAAS,CAAE,EA0BjB,OArBAV,EAASxL,SAASd,IAChB,MAAMiN,EAAQC,KAAKC,UALV,CAACnN,GACH,CAACA,EAAE2M,KAImBS,CAAGpN,IAEhCgN,EAAOC,GAASD,EAAOC,IAAU,GACjCD,EAAOC,GAAOhH,KAAKjG,GAEnBA,EAAEoE,MAAQ4I,EAAOC,GAAOjM,QACT,IAAXhB,EAAE2M,MACJ3M,EAAEqN,KAAOC,OAAOtN,EAAEoE,OACnB,IAGH5E,OAAOqB,KAAKmM,GAAQlM,SAASmM,IAC3BD,EAAOC,GAAOnM,SAASyM,IACJjB,EAAStH,QAAQwI,GAAMA,EAAEb,MAAQY,EAAET,KAC3ChM,SAASd,IAChBA,EAAEqN,KAAOE,EAAEF,KAAO,IAAMrN,EAAEoE,KAAK,GAC/B,GACF,IAGGkI,GHqDWmB,CAAqBnB,GAAYA,GI3DrD,MAAMoB,UAAgBzN,EACpBC,YAAYC,GACVwN,QAEAvN,KAAKC,MAAQqN,EAAQE,SACrBxN,KAAKyN,gBAAkB,KACvBzN,KAAK6B,eAAiB,KACtB7B,KAAK0N,UAAY,GAEjB1N,KAAKkM,SAAW,GAEZnM,GACFC,KAAKE,WAAWH,EAEnB,CAEDG,WAAWH,GACT,IAAI4N,EACAhM,EACAsB,EACAwK,EACAG,EAcJ,OAZA5N,KAAKG,KAAKJ,GACV6N,EAAiB5N,KAAKG,KAAK,kBAC3BwB,EAAgB3B,KAAKG,KAAK,iBAC1B8C,EAAWjD,KAAKG,KAAK,YACrBwN,EAAU3N,KAAKG,KAAK,WAEhBrB,EAAS8O,GACXH,EAAkB3L,SAASC,cAAc6L,GAChC5M,EAAU4M,KACnBH,EAAkBG,GAGfH,GAILzN,KAAKyN,gBAAkBA,EACvBzN,KAAK6B,eAAiBH,EAAkBC,GACxC3B,KAAK0N,UAAY,IAAID,EAAgBzL,iBAAiBiB,IAElDjD,KAAK0N,UAAU9M,OAAS,IAI5BZ,KAAKkM,SAAWL,EAAY7L,KAAK0N,WAE7BhO,EAAWiO,IACbA,EAAQrO,KAAKU,MAGfA,KAAKI,SAASC,gBATLL,MARAA,IAoBV,CAED6L,YAAYgC,GAAmB,GAC7B,MAAM3B,EAAWlM,KAAKkM,SACtB,OAAO2B,ECjFI,EAACC,EAAMC,EAASC,KAC7B,MAAMC,EAAM,CAAE,EACRC,EAAQ,GAoBd,OAlBAJ,EAAKpN,SAAQ,CAACyN,EAAMjK,KAElB+J,EAAIE,EAAKJ,IAAY7J,EAErBiK,EAAK9E,SAAW,EAAE,IAGpByE,EAAKpN,SAASyN,IACZ,MAAMC,EAAON,EAAKG,EAAIE,EAAKH,MAEF,IAArBG,EAAKH,GAEPI,EAAK/E,SAASxD,KAAKsI,GAEnBD,EAAMrI,KAAKsI,EACZ,IAGID,GD2DqBG,CAAOnC,EAAU,KAAM,OAASA,CAC3D,CAEDoC,QACE,OAAOtO,KAAKkM,SAAStL,MACtB,CAEDR,SACE,MAAMmO,EAAUvO,KAAKG,KAAK,WACpBmL,EAAYtL,KAAKG,KAAK,aACtBoL,EAAYvL,KAAKG,KAAK,aACtB4L,EAAW/L,KAAKG,KAAK,YACrBqO,EAAYxO,KAAKG,KAAK,aACtBuN,EAAY1N,KAAK0N,UACjBxB,EAAWlM,KAAK6L,cAmBtB,OAjBA7D,IAEA0F,EAAUhN,SAAQ,CAAC2K,EAAUnH,KAC3B,MAAMuK,EAAcvC,EAAShI,GAAG+I,KE9Ff,EAAC5B,EAAUnH,EAAGnE,KACnC,MAAMuJ,EAAYxH,SAASyH,yBACrBiC,EAAc,kBACdF,EAAYvL,EAAQuL,YAAa,EACjCC,EAAYxL,EAAQwL,YAAa,EACjCQ,EAAWhM,EAAQgM,WAAY,EAC/B0C,EAAc1O,EAAQ0O,aAAe,GACrCD,EAAYzO,EAAQyO,WAAa,GACjCE,EAAY,WAAWxK,IACvBjE,EAAQ,CACZyM,GAAIgC,EACJtF,UAAWmC,EAAY,GAAGC,KAAeA,UAAsBA,EAC/D,UAAWtH,GAEPzD,EAAOrB,OAAOqB,KAAKR,GACnBwL,EAAO9C,EAAK0C,EAAS/C,WAC3B,IAAIoD,EACAhB,EAUJ,GARAjK,EAAKC,SAASxB,IACZ8J,EAAaqC,EAAUnM,EAAMe,EAAMf,GAAM,IAGvC6M,IACFV,EAAS/C,UAAYmG,EAAc,IAAMhD,IAGtCH,EACH,OAAO,EAGTZ,EAAQP,EAAK,OAAQ,CAAE5C,QAAS,YAChCmE,EAAUlD,EACR,IACA,CACEkE,GAAI,UAAUxI,IACdkF,UAAW,GAAGoC,oBAA8BtH,IAC5CyK,KAAMH,GAAa,IAAIE,IACvBrJ,OAAQmJ,EAAY,SAAW,OAC/B,UAAWtK,GAEb,CAACwG,IAEHpB,EAAUO,YAAY6B,GACtBL,EAASxB,YAAYP,EAAU,EFmD3BsF,CAAevD,EAAUnH,EAAG,CAC1BoH,YACAC,YACAQ,WACA0C,cACAD,aACA,IAGA9O,EAAW6O,IACbA,EAAQjP,KAAKU,MAGRA,IACR,CAEDkC,SAASC,EAAK0M,GACZ,MAAM/L,EAAK9C,KAAK6B,eAIhB,OAFAK,EAASY,EAAIX,EAAK0M,GAEX7O,IACR,CAEDa,UACE,MAAMyK,EAAYtL,KAAKG,KAAK,aACtBoL,EAAYvL,KAAKG,KAAK,aACtB2O,EAAgB9O,KAAKG,KAAK,iBAC1B4O,EAAe/O,KAAKG,KAAK,gBACzBuN,EAAY1N,KAAK0N,UAqBvB,OAnBIhO,EAAWoP,IACbA,EAAcxP,KAAKU,MAGrBA,KAAKc,kBACL4M,EAAUhN,SAAS2K,IACjBD,EAAcC,EAAUC,EAAWC,EAAU,IAG/CvL,KAAKG,KAAKmN,EAAQE,UAClBxN,KAAKyN,gBAAkB,KACvBzN,KAAK6B,eAAiB,KACtB7B,KAAK0N,UAAY,GACjB1N,KAAKkM,SAAW,GAEZxM,EAAWqP,IACbA,EAAazP,KAAKU,MAGbA,IACR,CAEDgP,gBAAgB5J,GACd,MAAMoJ,EAAYxO,KAAKG,KAAK,aACtB8O,EAAcjP,KAAKG,KAAK,eACxB+O,EAAelP,KAAKG,KAAK,gBAEzBkL,EADUjG,EAAIG,eACKhC,WACnBpB,EAAMU,EAAUwI,IAAa6D,EAAe,IAC5CrN,EAAiB7B,KAAK6B,eAEtBsN,EAAMtN,EAAeW,aAAeX,EAAeuN,aAqBzD,OANApP,KAAKkC,SAASC,GAdA,KACRzC,EAAWuP,IACbA,EAAY3P,KAAKU,KAAM,UAGzBoB,GAAM,KACJiO,EAAQ,iBAAkB,CACxBlN,MACAmN,IAVM,EAWNH,OACA,GACF,IAKCX,GACH9L,EAAK0C,GAGApF,IACR,CAEDK,eACE,MAAMoN,EAAkBzN,KAAKyN,gBAW7B,OATAzI,EACEyI,EACA,2BACA,QACAzN,KAAKgP,gBACLhP,MACA,GAGKA,IACR,CAEDc,kBACE,MAAM2M,EAAkBzN,KAAKyN,gBAI7B,OAFA1I,EAAI0I,EAAiB,QAASzN,KAAKgP,iBAE5BhP,IACR,EAGHsN,EAAQE,SAAW,CACjB7L,cAAe,YACfiM,eAAgB,WAChB3K,SAAU,oBACViM,aAAc,EACdV,UAAW,GACXlD,WAAW,EACXC,WAAW,EACXQ,UAAU,EACV4B,QAAS,KACTY,QAAS,KACTU,YAAa,KACbH,cAAe,KACfC,aAAc,MGtNhB,MAAMQ,EAAW,CAACzM,EAAIsG,KACpB,IAAI4B,EACAD,EAEJ,GAAID,EAAShI,EAAIsG,GACf,OAAO,EAGT4B,EAAYlI,EAAGkI,UAEXA,GAAW3C,IACb2C,EAAU3C,IAAIe,IAEd2B,EAAWjI,EAAGsG,UACd2B,GAAYA,EAASnK,OAAS,EAAI,IAAMwI,EAAYA,EACpDtG,EAAGsG,UAAY2B,EAChB,EC1BGyE,EAAc,CAACtQ,EAAMoB,KACDwB,SAAS2N,gBACjBvG,MAAMsG,YAAYtQ,EAAMoB,EAAM,ECAhD,IAAI0D,EAAQ,IAEZ,MAAM0L,EAAUC,IACVA,EACF3L,EAAQ2L,EAER3L,GAAS,EAGXwL,EAAY,mBAAoB,GAAGxL,KAE5BA,GCCT,MAAM4L,UAAe/P,EACnBC,YAAYC,GACVwN,QAEAvN,KAAKC,MAAQ2P,EAAOpC,SACpBxN,KAAK6P,MAAQ,GACb7P,KAAK8P,QAAS,EACd9P,KAAKwJ,IAAM,KACXxJ,KAAK+P,OAAS,KACd/P,KAAKgQ,QAAU,KACfhQ,KAAKiQ,OAAS,KACdjQ,KAAKkQ,OAAS,KACdlQ,KAAKmQ,MAAQ,KACbnQ,KAAKoQ,QAAU,KACfpQ,KAAKqQ,SAAW,KAChBrQ,KAAK0P,OAAS,EAEV3P,GACFC,KAAKE,WAAWH,EAEnB,CAEDG,WAAWH,GACT,IAAI4N,EAYJ,OAVA3N,KAAKG,KAAKJ,GAEVC,KAAK6P,MAAQ7P,KAAKG,KAAK,SACvBwN,EAAU3N,KAAKG,KAAK,WAEhBT,EAAWiO,IACbA,EAAQrO,KAAKU,MAGfA,KAAKI,SAASC,eACPL,IACR,CAEDsQ,SAAST,GAKP,OAJA7P,KAAKG,KAAK,QAAS0P,GACnB7P,KAAK6P,MAAQA,EACb7P,KAAKiQ,OAAO3H,UAAYuH,EAEjB7P,IACR,CAEDuQ,WACE,OAAOvQ,KAAK8P,MACb,CAED1P,SACE,MAAMmO,EAAUvO,KAAKG,KAAK,WACpBiK,EAAOpK,KAAKG,KAAK,QACjBqQ,EAAYxQ,KAAKG,KAAK,aACtBsQ,EAAWzQ,KAAKG,KAAK,YACrBuQ,EAAa1Q,KAAKG,KAAK,cACvBwQ,EAAY3Q,KAAKG,KAAK,aACtByQ,EAAa5Q,KAAKG,KAAK,cACvB0Q,EAAa7Q,KAAKG,KAAK,cACvB2Q,EAAc9Q,KAAKG,KAAK,eAC9B,IAAIqJ,EACAuG,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAsGJ,OApGArI,IACAhI,KAAK0P,OAASA,IAEdO,EAASzH,EACP,KACA,CACEY,UAAW,yBAEb,CAACpJ,KAAK6P,QAER7P,KAAKiQ,OAASA,EAEVQ,IACFP,EAAS1H,EACP,MACA,CACEY,UAAW,yBAEb,CAACe,EAAK,QAAS,CAAEC,KAAM,OAEzBpK,KAAKkQ,OAASA,GAGhBF,EAAUxH,EACR,SACA,CACEY,UAAW,0BAEb,CAAC6G,EAAQC,IAEXlQ,KAAKgQ,QAAUA,EAEfG,EAAQ3H,EACN,MACA,CACEY,UAAW,wBAEb,CAAC,KAEHpJ,KAAKmQ,MAAQA,EAERS,GACHrB,EAASY,EAAO,uBAGlBC,EAAU5H,EACR,SACA,CACEY,UAAW,0BAEb,CAAC,KAEHpJ,KAAKoQ,QAAUA,EAEfL,EAASvH,EACP,MACA,CACEY,UAAW,wCAAwCoH,oBAA4BpG,2BAEjF,CAAC4F,EAASG,EAAOC,IAEnBpQ,KAAK+P,OAASA,EAEVY,GACFpB,EAASQ,EAAQ,yBAGfc,GACFtB,EAASQ,EAAQ,uBAGfe,GACFvB,EAASQ,EAAQe,GAGfJ,IACFL,EAAW7H,EACT,MACA,CACEY,UAAW,2BAEb,CAAC,KAEHpJ,KAAKqQ,SAAWA,GAGlB7G,EAAMhB,EACJ,MACA,CACEY,UAAW,kBAEb,CAAC2G,EAAQM,IAEXrQ,KAAKwJ,IAAMA,EACX1H,SAASoG,KAAK2B,YAAYL,GAEtB9J,EAAW6O,IACbA,EAAQjP,KAAKU,MAGRA,IACR,CAED+Q,OACE,MAAMC,EAAShR,KAAKG,KAAK,eACnB4P,EAAS/P,KAAK+P,OAcpB,OAZAR,EAASvP,KAAKwJ,IAAK,yBACnB0B,EAAY6E,EAAQ,yBACpBR,EAASQ,EAAQ,yBAEjB3O,GAAM,KACJpB,KAAK8P,QAAS,EAEVpQ,EAAWsR,IACbA,EAAO1R,KAAKU,KACb,IAGIA,IACR,CAEDiR,QACE,MAAMnB,EAAS9P,KAAKG,KAAK,eACnB4P,EAAS/P,KAAK+P,OAcpB,OAZA7E,EAAY6E,EAAQ,yBACpBR,EAASQ,EAAQ,yBAEjB3O,GAAM,KACJ8J,EAAYlL,KAAKwJ,IAAK,yBACtBxJ,KAAK8P,QAAS,EAEVpQ,EAAWoQ,IACbA,EAAOxQ,KAAKU,KACb,IAGIA,IACR,CAEDkR,SACE,MAAMC,EAAcnR,KAAKG,KAAK,eACxB2P,EAAS9P,KAAKuQ,WAcpB,OAZIT,EACF9P,KAAK+Q,OAEL/Q,KAAKiR,QAGHvR,EAAWyR,IACb/P,GAAM,KACJ+P,EAAY7R,KAAKU,KAAM8P,EAAO,IAI3B9P,IACR,CAEDa,UACE,MAAMkO,EAAe/O,KAAKG,KAAK,gBACzB2O,EAAgB9O,KAAKG,KAAK,iBAChC,IAAI6D,EAAQhE,KAAK0P,OA4BjB,OA1BIhQ,EAAWoP,IACbA,EAAcxP,KAAKU,MAGrBA,KAAKc,kBAELd,KAAKC,MAAQ2P,EAAOpC,SACpBxN,KAAK6P,MAAQ,GACb7P,KAAK8P,QAAS,EACd9P,KAAKwJ,IAAM,KACXxJ,KAAK+P,OAAS,KACd/P,KAAKgQ,QAAU,KACfhQ,KAAKiQ,OAAS,KACdjQ,KAAKkQ,OAAS,KACdlQ,KAAKmQ,MAAQ,KACbnQ,KAAKoQ,QAAU,KACfpQ,KAAKqQ,SAAW,KAEhBrM,GAAS,EACT0L,EAAO1L,GACPhE,KAAK0P,OAAS,EAEVhQ,EAAWqP,IACbA,EAAazP,KAAKU,MAGbA,IACR,CAEDK,eACE,MAAMoQ,EAAWzQ,KAAKG,KAAK,YACrBuQ,EAAa1Q,KAAKG,KAAK,cACvBqJ,EAAMxJ,KAAKwJ,IAUjB,OARIiH,GACFzL,EAAGwE,EAAK,yBAA0B,QAASxJ,KAAKoR,QAASpR,MAAM,GAG7D0Q,GACF1L,EAAGwE,EAAK,2BAA4B,QAASxJ,KAAKoR,QAASpR,MAAM,GAG5DA,IACR,CAEDc,kBACE,MAAM2P,EAAWzQ,KAAKG,KAAK,YACrBuQ,EAAa1Q,KAAKG,KAAK,cACvBqJ,EAAMxJ,KAAKwJ,IAEjB,OAAKiH,GAAaC,GAIlB3L,EAAIyE,EAAK,QAASxJ,KAAKoR,SAEhBpR,MALEA,IAMV,CAEDoR,UAEE,OADApR,KAAKiR,QACEjR,IACR,EAGH4P,EAAOpC,SAAW,CAChBgD,UAAW,MACXX,MAAO,KACPzF,KAAM,UACNqG,UAAU,EACVC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,YAAY,EACZlD,QAAS,KACTY,QAAS,KACT8C,YAAa,KACbC,YAAa,KACbrC,YAAa,KACbH,cAAe,KACfC,aAAc,KACdoC,YAAa,MCxTf,MAAMI,EAAK,CAACzO,EAAIY,EAAMrC,EAAI4D,EAAMC,EAASC,GAAO,KAE9C,MAAMxB,EAAUH,EAAeI,QAAQF,IAAS,EAC1CO,EAAW,SAAUmB,GACzB,IAAIQ,EAAkBV,GAAWpC,GAIjB,IAAZoC,IACFU,EAAkBX,IAKP,IAATE,GACFJ,EAAIjC,EAAIY,EAAMO,GAGhB5C,EAAG/B,KAAKsG,EAAiBR,EAAKH,EAC/B,EAED,IAAKvF,EAAW2B,GACd,OAAO,EAGJyB,EAAGiB,aACNjB,EAAGiB,WAAa,IAIlBjB,EAAGiB,WAAW8B,KAAK,CACjB/C,KACAY,OACArC,GAAI4C,EACJgB,OACAC,UACAvB,YAIFtC,EAAGwC,kBAAoBI,EAEvBnB,EAAGgD,iBAAiBpC,EAAMO,EAAUN,EAAQ,ECpDxC6N,EAAW,CAAC1O,EAAI2O,IACbC,iBAAiB5O,GAAI2O,GCe9B,MAAME,UAAiB9R,EACrBC,YAAYC,GACVwN,QAEAvN,KAAKC,MAAQ0R,EAASnE,SACtBxN,KAAKwJ,IAAM,KACXxJ,KAAKiQ,OAAS,KACdjQ,KAAKmQ,MAAQ,KACbnQ,KAAK4R,MAAQ,KACb5R,KAAK6R,aAAe,KACpB7R,KAAK8R,eAAiB,KACtB9R,KAAK6B,eAAiB,KACtB7B,KAAKkM,SAAW,GAChBlM,KAAK8P,QAAS,EACd9P,KAAK+R,OAAS,EACd/R,KAAK6C,UAAY,EACjB7C,KAAKgS,YAAc,EACnBhS,KAAKiS,QAAU,KACfjS,KAAKkS,YAAc,KACnBlS,KAAKmS,YAAc,KACnBnS,KAAKoS,SAAU,EACfpS,KAAKqS,SAAW,KAEZtS,GACFC,KAAKE,WAAWH,EAEnB,CAEDG,WAAWH,GACT,IAAI4N,EACA2E,EACA3Q,EACA4Q,EAuBJ,OArBAvS,KAAKG,KAAKJ,GACV4N,EAAU3N,KAAKG,KAAK,WACpBmS,EAAgBtS,KAAKG,KAAK,iBAC1BwB,EAAgB3B,KAAKG,KAAK,iBAEtBrB,EAASwT,GACXC,EAAUzQ,SAASC,cAAcuQ,GACxBtR,EAAUsR,KACnBC,EAAUD,GAEZtS,KAAK8R,eAAiBS,EACtBvS,KAAK6B,eAAiBH,EAAkBC,GAExC3B,KAAKkM,SAAWlM,KAAKG,KAAK,YAC1BH,KAAK8P,OAAS9P,KAAKG,KAAK,UACxBH,KAAK+R,OAAS/R,KAAKG,KAAK,UAEpBT,EAAWiO,IACbA,EAAQrO,KAAKU,MAGXA,KAAKkM,SAAStL,OAAS,IAI3BZ,KAAKI,SAASC,eAEdL,KAAKiS,QAAUnQ,SAASC,cAAc,YAAY/B,KAAK+R,WAL9C/R,IAQV,CAEDuQ,WACE,OAAOvQ,KAAK8P,MACb,CAED0C,WAEE,MAAoB,WADHxS,KAAKG,KAAK,WAE5B,CAEDsS,UAEE,MAAoB,UADHzS,KAAKG,KAAK,WAE5B,CAEDuS,WACE,OAAO1S,KAAKyS,WAAazS,KAAKwS,UAC/B,CAEDG,YACE,OAAQ3S,KAAK0S,UACd,CAEDE,aACE,MAAMtJ,EAAYxH,SAASyH,yBAGrBsG,EAAQ7P,KAAKG,KAAK,SAClB2Q,EAAc9Q,KAAKG,KAAK,eACxB2R,EAAiB9R,KAAK8R,eACtBe,EAAW,GACjB,IACIrJ,EACA2G,EACAyB,EACAC,EAJA5B,EAAS,KAMb,OAAK6B,GAID9R,KAAK0S,aACPzC,EAASzH,EACP,KACA,CACEY,UAAW,2BAEb,CAACyG,IAEH7P,KAAKiQ,OAASA,EACd4C,EAAShN,KAAKoK,IAGhB2B,EAAQpJ,EACN,KACA,CAIEY,UAAW,0BAEb,CAAC,KAEHpJ,KAAK4R,MAAQA,EAEbC,EAAerJ,EACb,MACA,CACEY,UAAW,iCAEb,CAAC,KAEHpJ,KAAK6R,aAAeA,EAEpB1B,EAAQ3H,EACN,MACA,CACEY,UAAW,0BAEb,CAACwI,EAAOC,IAEV7R,KAAKmQ,MAAQA,EACb0C,EAAShN,KAAKsK,GAEd3G,EAAMhB,EACJ,MACA,CACEkE,GAAI,mBACJtD,UAAW,4CAEbyJ,GAEF7S,KAAKwJ,IAAMA,EAEPxJ,KAAKwS,aACPxS,KAAK8S,wBACLvD,EAAS/F,EAvEI,4BA0EXsH,GACFvB,EAAS/F,EAAKsH,GAEhBxH,EAAUO,YAAYL,GACtBsI,EAAejI,YAAYP,GAEpBtJ,MAnEEA,IAoEV,CAEDI,SACE,MACM2L,EAAW/L,KAAKG,KAAK,YACrBoO,EAAUvO,KAAKG,KAAK,WACpB2R,EAAiB9R,KAAK8R,eACtB5F,EAAWlM,KAAKkM,SACtB,IAAI1C,EACAoI,EAEJ,OAAKE,GAAkB5F,EAAStL,OAAS,IAIzCZ,KAAK4S,aAELpJ,EAAMxJ,KAAKwJ,IACXoI,EAAQ5R,KAAK4R,MClNM,EAACA,EAAO1F,EAAUH,GAAW,KAClD,MAAMgH,EAAQrG,GAAO5K,SAASC,cAAc,IAAI2K,KAEhDR,EAASxL,SAASsS,IAChB,MAAMzG,EAAMyG,EAAQzG,IACdG,EAAKsG,EAAQtG,GACbC,EAAMqG,EAAQrG,IACdsG,EAAQzK,EACZ,OACA,CACEY,UAAW,0BAEb,CAAC4J,EAAQvH,OAELyH,EAAQ1K,EACZ,IACA,CACEkE,GAAI,mBAAmBA,IACvBtD,UAAW,2BACXuF,KAAM,IAAMhC,EACZA,IAAKA,EACL,UAAWD,GAEb,CAACuG,IAEH,IAAIE,EACAC,EACAC,EACAd,EAEAxG,IACFoH,EAAQ3K,EACN,OACA,CACEY,UAAW,yBACX,UAAWsD,GAEb,CAACsG,EAAQ/F,OAGXiG,EAAMzK,aAAa0K,EAAOD,EAAMxK,aAGlC0K,EAAM5K,EACJ,KACA,CACEkE,GAAI,WAAWA,IACftD,UAAW,yBACX,UAAWsD,GAEb,CAACwG,KAGU,IAAT3G,EACFqF,EAAM/H,YAAYuJ,IAElBb,EAAUQ,EAAK,WAAWxG,KAC1B8G,EAAMN,EAAK,WAAWxG,KAEjB8G,EAYHA,EAAIxJ,YAAYuJ,IAXhBC,EAAM7K,EACJ,KACA,CACEkE,GAAI,WAAaH,EACjBnD,UAAW,6BAEb,CAACgK,IAGHb,EAAQ1I,YAAYwJ,IAIvB,GACD,EDyIAC,CAAe1B,EAAO1F,EAAUH,GAChCb,EAAY1B,EAjBG,2BAkBfxJ,KAAKuT,oBAAoBvT,KAAK+R,QAE9B/R,KAAK6C,UAAYA,EAAU2G,GAC3BxJ,KAAKgS,YAAcxI,EAAIwI,YAEnBhS,KAAKyS,YACPzS,KAAKwT,SACLhE,EAAY,2BAA4B,GAAGxP,KAAKgS,kBAG9CtS,EAAW6O,IACbA,EAAQjP,KAAKU,MAGfA,KAAKyT,cAvBIzT,IA0BV,CAEDuT,oBAAoBvP,GAClB,MAAMmM,EAAQnQ,KAAKmQ,MACbyB,EAAQ5R,KAAK4R,MACbC,EAAe7R,KAAK6R,aACpBnG,EAAUkG,EAAM7P,cAAc,6BAC9B2R,EAAiBpH,SAASkF,EAASrB,EAAO,eAAgB,IAC1DwD,EAAgBrH,SAASkF,EAASrB,EAAO,oBAAqB,IAC9DyD,EAAwBtH,SAASkF,EAASI,EAAO,eAAgB,IACjEiC,EAAuBvH,SAASkF,EAASI,EAAO,cAAe,IAC/DkC,EAAuBxH,SAC3BkF,EAASI,EAAO,oBAChB,IAEF,IAEIzP,EAFAoI,EAASmB,EAAQqI,aACjBlR,EAAY,EA6BhB,OA1BI6Q,IACF7Q,GAAa6Q,GAGXE,IACF/Q,GAAa+Q,GAGXC,IACFhR,GAAagR,GAGXF,IACF9Q,GAAa8Q,GAGXG,IACFjR,GAAaiR,GAGf3R,EAAMoI,EAASvG,EAEf6N,EAAa3I,MAAMC,QAAU,yBAC3BtG,EAAYV,eACAoI,OAEPvK,IACR,CAEDgU,UAAUtH,GACR,MAAMhB,EAAU1L,KAAKwJ,IAAIzH,cAAc,oBAAoB2K,KACrDuH,EAAY,0BAElB,OAAKvI,GAID1L,KAAKiS,SACP/G,EAAYlL,KAAKiS,QAASgC,GAG5BjU,KAAK+R,OAASzF,SAASZ,EAAQwI,aAAa,WAAY,IACxDlU,KAAKiS,QAAUvG,EACf6D,EAASvP,KAAKiS,QAASgC,GAEvBjU,KAAKuT,oBAAoBvT,KAAK+R,QAEvB/R,MAbEA,IAcV,CAEDwT,SACE,MAAMW,EAAcnU,KAAKG,KAAK,eACxBiU,EAAQ,yBACR5K,EAAMxJ,KAAKwJ,IACXrH,EAAMnC,KAAK6C,UACXZ,EAAYjC,KAAK6B,eAAeI,UACtC,IAAIoS,EAEJ,OAAKrU,KAAKyS,WAIV4B,EAAcpS,GAAaE,EAEvBkS,EACF9E,EAAS/F,EAAK4K,GAEdlJ,EAAY1B,EAAK4K,GAGf1U,EAAWyU,IACbA,EAAY7U,KAAKU,KAAMA,KAAKuQ,WAAY8D,GAGnCrU,MAfEA,IAgBV,CAED8S,wBACE,MAAMrD,EAAkB3N,SAAS2N,gBAC3BlF,EAAS+J,KAAKnF,IAClBM,EAAgBL,cAAgB,EAChCmF,OAAOC,aAAe,GAGxB,OADAhF,EAAY,0BAA2B,GAAGjF,OACnCvK,IACR,CAEDkC,SAASC,EAAK0M,GACZ,MAAM/L,EAAK9C,KAAK6B,eAIhB,OAFAK,EAASY,EAAIX,EAAK0M,GAEX7O,IACR,CAEDyU,OACE,MAAMC,EAAS,0BACTC,EAAS,0BACT3D,EAAShR,KAAKG,KAAK,eACnBqJ,EAAMxJ,KAAKwJ,IACX+I,EAAUvS,KAAK8R,eAkBrB,OAhBI9R,KAAK0S,YACPxH,EAAYqH,EAASoC,GACrBzJ,EAAY1B,EAAKmL,GACjBvT,GAAM,KACJ8J,EAAYqH,EAASmC,GACrBxJ,EAAY1B,EAAKkL,EAAO,GACvB,KAEHxJ,EAAY1B,EAAKmL,GAEnB3U,KAAK8P,QAAS,EAEVpQ,EAAWsR,IACbA,EAAO1R,KAAKU,MAGPA,IACR,CAED4U,OACE,MAAMF,EAAS,0BACTC,EAAS,0BACT7E,EAAS9P,KAAKG,KAAK,eACnBqJ,EAAMxJ,KAAKwJ,IACX+I,EAAUvS,KAAK8R,eAkBrB,OAhBI9R,KAAK0S,YACPnD,EAASgD,EAASmC,GAClBnF,EAAS/F,EAAKkL,GACdtT,GAAM,KACJmO,EAASgD,EAASoC,GAClBpF,EAAS/F,EAAKmL,EAAO,KAGvBpF,EAAS/F,EAAKmL,GAEhB3U,KAAK8P,QAAS,EAEVpQ,EAAWoQ,IACbA,EAAOxQ,KAAKU,MAGPA,IACR,CAEDkR,SACE,MAAMC,EAAcnR,KAAKG,KAAK,eACxBgC,EAAMnC,KAAK6C,UACXZ,EAAYjC,KAAK6B,eAAeI,UACtC,IAAIoS,EAeJ,OAbIrU,KAAKuQ,WACPvQ,KAAKyU,OAELzU,KAAK4U,OAGHlV,EAAWyR,IACb/P,GAAM,KACJiT,EAAcpS,GAAaE,EAC3BgP,EAAY7R,KAAKU,KAAMA,KAAKuQ,WAAY8D,EAAY,IAIjDrU,IACR,CAEDa,UACE,MAAMiO,EAAgB9O,KAAKG,KAAK,iBAC1B4O,EAAe/O,KAAKG,KAAK,gBAyC/B,OAvCIT,EAAWoP,IACbA,EAAcxP,KAAKU,MAGrBA,KAAKc,kBACLd,KAAK8R,eAAelG,YAAY5L,KAAKwJ,KAErCxJ,KAAKG,KAAKwR,EAASnE,UACnBxN,KAAKwJ,IAAM,KACXxJ,KAAKiQ,OAAS,KACdjQ,KAAKmQ,MAAQ,KACbnQ,KAAK4R,MAAQ,KACb5R,KAAK6R,aAAe,KACpB7R,KAAK8R,eAAiB,KACtB9R,KAAK6B,eAAiB,KACtB7B,KAAKkM,SAAW,GAChBlM,KAAK+R,OAAS,EACd/R,KAAK6C,UAAY,EACjB7C,KAAKiS,QAAU,KACfjS,KAAK8P,QAAS,EAEV9P,KAAKkS,cACP2C,aAAa7U,KAAKkS,aAClBlS,KAAKkS,YAAc,MAGjBlS,KAAKmS,cACP0C,aAAa7U,KAAKmS,aAClBnS,KAAKmS,YAAc,MAGjBzS,EAAWqP,IACbA,EAAazP,KAAKU,MAGhBA,KAAKqS,WACPrS,KAAKqS,SAAW,MAGXrS,IACR,CAEDyT,aACE,MAAMxQ,EAAWjD,KAAKG,KAAK,YAC3B,IAAI2U,EAAQ,KAwBZ,OAtBA9U,KAAKqS,SEvcY,EAAChR,EAAI0T,EAAQ,MAChC,MAAMC,EAAOD,EAAMC,MAAQ,KACrB/R,EAAW8R,EAAM9R,UAAY,mBAC7BiC,EAAU6P,EAAM7P,SAAW,KAE3BnF,EAAU,CACdkV,WAFiBF,EAAME,YAAc,oBAIjC5C,EAAW,IAAI6C,sBAAsBC,IACzCA,EAAQzU,SAAS0U,IACXA,EAAMC,kBAAoB,GACxB3V,EAAW2B,IACbA,EAAG/B,KAAK4F,GAAWkQ,EAAM/P,OAAQ+P,EAAM/P,OAE1C,GACD,GACDtF,GACGuV,EAAQtU,EAAUgU,GAAQA,EAAOlT,SAUvC,OARIkT,IACFjV,EAAQiV,KAAOA,GAGjBM,EAAMtT,iBAAiBiB,GAAUvC,SAAS6U,IACxClD,EAASmD,QAAQD,EAAQ,IAGpBlD,GF4aWoD,EACbpK,IACC,MAAMqB,EAAKrB,EAAS6I,aAAa,WAEjC,GAAIlU,KAAKoS,QACP,OAAO,EAGL0C,GACFD,aAAaC,GAGfA,EAAQ1T,GAAM,KACZpB,KAAKgU,UAAUtH,EAAG,GACjB,IAAI,GAET,CACEzJ,WACAiC,QAASlF,OAINA,IACR,CAED0V,SAAStQ,GACP,MAAM8J,EAAelP,KAAKG,KAAK,gBACzBuL,EAAUtG,EAAIG,eACdmH,EAAKhB,EAAQwI,aAAa,WAC1BxF,EAAYhD,EAAQiD,KAAKgH,MAAM,KAAK,GACpCtK,EAAWvJ,SAASC,cAAc,IAAI2M,KACtCvM,EAAMU,EAAUwI,IAAa6D,EAAe,IAE5CC,EAAMnP,KAAK6B,eAAeW,aAC1ByM,EAAcjP,KAAKG,KAAK,eACxB0O,EAAQ,KACRnP,EAAWuP,IACbA,EAAY3P,KAAKU,KAAM,WAGzBoB,GAAM,KACJpB,KAAKoS,SAAU,EACf/C,EAAQ,iBAAkB,CACxBlN,MACAmN,IAZM,EAaNH,OACA,GACF,EAiBJ,OAdAnP,KAAKoS,SAAU,EACXpS,KAAKyS,WACPzS,KAAKwT,SACLpS,GAAM,KACJpB,KAAKkC,SAASC,EAAK0M,GACnB7O,KAAKgU,UAAUtH,EAAG,GACjB,MAEH1M,KAAKkC,SAASC,EAAK0M,GACnB7O,KAAKgU,UAAUtH,IAGjBhK,EAAK0C,GAEEpF,IACR,CAED4V,WACE,MAAM/T,EAAiB7B,KAAK6B,eAsB5B,OApBI7B,KAAKkS,aACP2C,aAAa7U,KAAKkS,aAGpBlS,KAAKkS,YAAc9Q,GAAM,KACvB,MAAMe,EAAMN,EAAeI,UAErBkN,EAAMtN,EAAeW,aAAeX,EAAeuN,aAErDpP,KAAKyS,WACPzS,KAAKwT,SAGPnE,EAAQ,iBAAkB,CACxBlN,MACAmN,IATU,EAUVH,OACA,GACD,KAEInP,IACR,CAED6V,WASE,OARI7V,KAAKmS,aACP0C,aAAa7U,KAAKmS,aAGpBnS,KAAKmS,YAAc/Q,GAAM,KACvBpB,KAAK8S,uBAAuB,IAGvB9S,IACR,CAEDK,eACE,MAAMmJ,EAAMxJ,KAAKwJ,IACX3H,EAAiB7B,KAAK6B,eACtBX,EAAUW,EAAeX,QAAQ+H,cACvC,IAAIxE,EAAW5C,EAYf,MAVgB,SAAZX,GAAkC,SAAZA,IACxBuD,EAAW8P,QAGbvP,EAAGwE,EAAK,4BAA6B,QAASxJ,KAAK0V,SAAU1V,MAAM,GACnEuR,EAAG9M,EAAU,SAAUzE,KAAK4V,SAAU5V,MAAM,GACxCA,KAAKwS,YACPjB,EAAG9M,EAAU,SAAUzE,KAAK6V,SAAU7V,MAAM,GAGvCA,IACR,CAEDc,kBACE,MAAMmC,EAAWjD,KAAKG,KAAK,YACrBqJ,EAAMxJ,KAAKwJ,IACX3H,EAAiB7B,KAAK6B,eACtBX,EAAUW,EAAeX,QAAQ+H,cACvC,IAAIxE,EAAW5C,EAmBf,MAjBgB,SAAZX,GAAkC,SAAZA,IACxBuD,EAAW8P,QAGbxP,EAAIyE,EAAK,QAASxJ,KAAK0V,UACvB3Q,EAAIN,EAAU,SAAUzE,KAAK4V,UAEzB5V,KAAKwS,YACPjB,EAAG9M,EAAU,SAAUzE,KAAK6V,UAG1B7V,KAAKqS,UACPvQ,SAASE,iBAAiBiB,GAAUvC,SAAS6U,IAC3CvV,KAAKqS,SAASyD,UAAUP,EAAQ,IAI7BvV,IACR,EAGH2R,EAASnE,SAAW,CAClB8E,cAAe,GACf3Q,cAAe,GACfsB,SAAU,mBACV8O,OAAQ,EACRjC,QAAQ,EACR/D,UAAU,EACVxF,SAAU,WACV2I,aAAc,EACdhD,SAAU,GACVyB,QAAS,KACTY,QAAS,KACT8C,YAAa,KACbC,YAAa,KACbrC,YAAa,KACbH,cAAe,KACfC,aAAc,KACdoF,YAAa,MG3nBf,MAAM4B,EAAgB,CAACC,EAAQC,GAAU,KACvC,MAAMvL,EAAQP,EAAK6L,EAAO7L,KAAM,CAC9B5C,QAASyO,EAAOzO,SAAW,UAC3B8C,MAAO2L,EAAO3L,OAAS,GACvBD,KAAM4L,EAAO5L,OAETsB,EAAUlD,EACd,IACA,CACEY,UAAW,0BACXuF,KAAMqH,EAAOE,MAEf,CAACxL,IAEGyL,EAAU3N,EACd,MACA,CACEY,UAAW,2BAA2B4M,EAAO1O,QAE/C,CAAC0O,EAAOE,KAAOxK,EAAUhB,IAa3B,OAVA6E,EAAS7E,EAAO,yBAEZuL,GACF1G,EAAS4G,EAAS,2BAGhBH,EAAOI,UACT7G,EAAS4G,EAAS,4BAGbA,GClBHE,EAAW,2BACX1B,EAAS,yBAEf,MAAM2B,UAAgBzW,EACpBC,YAAYC,GACVwN,QAEAvN,KAAKC,MAAQqW,EAAQ9I,SACrBxN,KAAKwJ,IAAM,KACXxJ,KAAKoW,UAAW,EAChBpW,KAAK8P,QAAS,EACd9P,KAAKuW,QAAU,GAEXxW,GACFC,KAAKE,WAAWH,EAEnB,CAEDG,WAAWH,GACT,IAAI4N,EAaJ,OAXA3N,KAAKG,KAAKJ,GACV4N,EAAU3N,KAAKG,KAAK,WACpBH,KAAKoW,SAAWpW,KAAKG,KAAK,YAC1BH,KAAK8P,OAAS9P,KAAKG,KAAK,UAEpBT,EAAWiO,IACbA,EAAQrO,KAAKU,MAGfA,KAAKI,SAASC,eAEPL,IACR,CAEDwW,WAAWlP,GACT,MAAMiP,EAAUvW,KAAKG,KAAK,WAC1B,IAAI6V,EAEJ,OAAI1O,GACF0O,EAASO,EAAQ7O,MAAM+O,GAAWA,EAAOnP,OAASA,IAE3C0O,GAAQI,UAGVpW,KAAKoW,QACb,CAED7F,WACE,OAAOvQ,KAAK8P,MACb,CAEDkE,UAAU1M,GACR,MAAM0O,EAAShW,KAAKuW,QAAQ7O,MAAMyG,GAASA,EAAK7G,OAASA,IACnDoP,EAAS,yBACf,IAAIP,EAEJ,OAAIA,IAIJA,EAAUH,EAAOxM,IAEbsB,EAASqL,EAASO,GACpBxL,EAAYiL,EAASO,GAErBnH,EAAS4G,EAASO,IARX1W,IAYV,CAEDI,SACE,MAAMmO,EAAUvO,KAAKG,KAAK,WACpBoW,EAAUvW,KAAKG,KAAK,YAAc,GAClC8V,EAAUjW,KAAKG,KAAK,WACpBqQ,EAAYxQ,KAAKG,KAAK,aACtBwW,EAAW7U,SAASyH,yBACpBD,EAAYxH,SAASyH,yBAqC3B,OAnCAvB,IAEAuO,EAAQ7V,SAASsV,IACf,MAAMG,EAAUJ,EAAcC,EAAQC,GAEtCU,EAAS9M,YAAYsM,GACrBnW,KAAKuW,QAAQ1Q,KAAK,CAChByB,KAAM0O,EAAO1O,KACbkC,IAAK2M,GACL,IAGJnW,KAAKwJ,IAAMhB,EACT,MACA,CACEkE,GAAI,kBACJtD,UAAW,mCAAmCoH,KAEhD,CAACmG,IAEHrN,EAAUO,YAAY7J,KAAKwJ,KAC3B1H,SAASoG,KAAK2B,YAAYP,GAEtBtJ,KAAK8P,QACP9P,KAAK4U,OAGH5U,KAAKoW,UACPpW,KAAK4W,UAGHlX,EAAW6O,IACbA,EAAQjP,KAAKU,MAGRA,IACR,CAEDqI,IAAI2N,GACF,MAAMxM,EAAMxJ,KAAKwJ,IACX+M,EAAUvW,KAAKG,KAAK,WACpB0W,EAASb,EAAOa,OAChBvN,EAAYxH,SAASyH,yBAC3B,IAAI7F,EAiBJ,OAfI/D,EAASqW,IACXO,EAAQ1Q,KAAKmQ,GACb1M,EAAUO,YAAYkM,EAAcC,KAC3B9O,EAAQ8O,IACjBA,EAAOtV,SAASyN,IACd7E,EAAUO,YAAYkM,EAAc5H,GAAM,IAG9C3E,EAAIK,YAAYP,GAEZuN,GAAUnX,EAAWmX,EAAO1S,WAC9BT,EAAOmT,EAAOnT,MAAQ,QACtBsB,EAAGwE,EAAK,IAAIwM,EAAO1O,OAAQ5D,EAAMmT,EAAO1S,UAGnCnE,IACR,CAEDmL,OAAO7D,GACL,MAAMkC,EAAMxJ,KAAKwJ,IACX+M,EAAUvW,KAAKG,KAAK,WACpB6V,EAASO,EAAQ7O,MAAM+O,GAAWA,EAAOnP,OAASA,IACxD,IACI6O,EADAnS,GAAS,EAGb,OAAKgS,GAILO,EAAQ7V,SAAQ,CAACsV,EAAQ9R,KACnB8R,EAAO1O,OAASA,IAClBtD,EAAQE,EACT,IAGCF,GAAS,GACXhE,KAAKG,OAAOoW,QAAQnS,OAAOJ,EAAO,GAGpCmS,EAAU3M,EAAIzH,cAAc,IAAIuF,KAChCtH,KAAK8W,OAAOxP,GAAM,GAClBkC,EAAIoC,YAAYuK,GAETnW,MAjBEA,IAkBV,CAED8W,OAAOxP,EAAMyP,GACX,MAAMvN,EAAMxJ,KAAKwJ,IACX+M,EAAUvW,KAAKG,KAAK,WACpB6V,EAASO,EAAQ7O,MAAM+O,GAAWA,EAAOnP,OAASA,IACxD,IAAIuP,EACAnT,EACAO,EACAkS,EAEJ,OAAKH,GAILO,EAAQ7V,SAAS+V,IACXA,EAAOnP,OAASA,IAClB0O,EAAOI,UAAYW,EACpB,IAGHF,EAASb,EAAOa,OAChBV,EAAU3M,EAAIzH,cAAc,IAAIuF,KAE5BuP,IACFnT,EAAOmT,EAAOnT,MAAQ,QACtBO,EAAW4S,EAAO1S,SAGhB4S,GACF7L,EAAYiL,EAASE,GAEjB3S,GAAQO,GACVe,EAAGwE,EAAK,IAAIlC,IAAQ5D,EAAMO,KAG5BsL,EAAS4G,EAASE,GAEd3S,GAAQO,GACVc,EAAIyE,EAAK9F,EAAMO,IAIZjE,MA/BEA,IAgCV,CAED4W,QAAQtP,GACN,MAAM8O,EAAWpW,KAAKG,KAAK,iBAc3B,OAZImH,EACFtH,KAAK8W,OAAOxP,GAAM,IAElBiI,EAASvP,KAAKwJ,IAAK6M,GACnBrW,KAAKc,kBACLd,KAAKoW,UAAW,EAEZ1W,EAAW0W,IACbA,EAAS9W,KAAKU,OAIXA,IACR,CAEDgX,OAAO1P,GACL,MAAMyP,EAAU/W,KAAKG,KAAK,gBAc1B,OAZImH,EACFtH,KAAK8W,OAAOxP,GAAM,IAElBtH,KAAKoW,UAAW,EAChBlL,EAAYlL,KAAKwJ,IAAK6M,GACtBrW,KAAKK,eAEDX,EAAWqX,IACbA,EAAQzX,KAAKU,OAIVA,IACR,CAEDyU,KAAKnN,GACH,MAAM0J,EAAShR,KAAKG,KAAK,eACnB6V,EAAShW,KAAKG,KAAK,WAAWuH,MAAM+O,GAAWA,EAAOnP,OAASA,IAC/DkC,EAAMxJ,KAAKwJ,IACjB,IAAI2M,EAEJ,GAAI7O,EAAM,CACR,IAAK0O,EACH,OAAOhW,KAGTmW,EAAU3M,EAAIzH,cAAc,IAAIuF,KAChC4D,EAAYiL,EAASxB,EAC3B,MACMzJ,EAAY1B,EAAKmL,GACjB3U,KAAK8P,QAAS,EAEVpQ,EAAWsR,IACb5P,GAAM,KACJ4P,EAAO1R,KAAKU,KAAK,GAChB,KAIP,OAAOA,IACR,CAED4U,KAAKtN,GACH,MAAMwI,EAAS9P,KAAKG,KAAK,eACnB6V,EAAShW,KAAKG,KAAK,WAAWuH,MAAM+O,GAAWA,EAAOnP,OAASA,IAC/DkC,EAAMxJ,KAAKwJ,IACjB,IAAI2M,EAEJ,GAAI7O,EAAM,CACR,IAAK0O,EACH,OAAOhW,KAETmW,EAAU3M,EAAIzH,cAAc,IAAIuF,KAChCiI,EAAS4G,EAASxB,EACxB,MACMpF,EAAS/F,EAAKmL,GACd3U,KAAK8P,QAAS,EAEVpQ,EAAWoQ,IACb1O,GAAM,KACJ0O,EAAOxQ,KAAKU,KAAK,GAChB,KAIP,OAAOA,IACR,CAEDkR,SAOE,OANIlR,KAAKuQ,WACPvQ,KAAKyU,OAELzU,KAAK4U,OAGA5U,IACR,CAEDa,UACE,MAAMiO,EAAgB9O,KAAKG,KAAK,iBAC1B4O,EAAe/O,KAAKG,KAAK,gBAC/B,IAAIqJ,EAAMxJ,KAAKwJ,IAmBf,OAjBI9J,EAAWoP,IACbA,EAAcxP,KAAKU,MAGrBA,KAAKc,kBACLgB,SAASoG,KAAK0D,YAAYpC,GAC1BA,EAAM,KAENxJ,KAAKG,KAAKmW,EAAQ9I,UAClBxN,KAAKoW,UAAW,EAChBpW,KAAK8P,QAAS,EACd9P,KAAKuW,QAAU,GAEX7W,EAAWqP,IACbA,EAAazP,KAAKU,MAGbA,IACR,CAEDiX,UACE,MAAMzN,EAAMxJ,KAAKwJ,IACX+M,EAAUvW,KAAKG,KAAK,YAAc,GAWxC,OATAH,KAAKc,kBACL0I,EAAIlB,UAAY,GAEhBiO,EAAQ7V,SAASsV,IACfhW,KAAKwJ,IAAIK,YAAYkM,EAAcC,GAAQ,IAG7ChW,KAAKK,eAEEL,IACR,CAEDK,eACE,MAAMkW,EAAUvW,KAAKG,KAAK,WACpBqJ,EAAMxJ,KAAKwJ,IAEjB,OAAK+M,GAAWA,EAAQ3V,OAAS,GAIjC2V,EAAQ7V,SAASsV,IACf,MAAMa,EAASb,EAAOa,OAEtB,IAAInT,EACAO,EACAiB,EACAgS,EAEJ,GANiBlX,KAAKoW,SAOpB,OAAO,EAGLS,IACF5S,EAAW4S,EAAO1S,QACdrF,EAASmF,KACXiT,EAAUjT,EACV4S,EAAO1S,QAAU,WACfkL,EAAQ6H,EAASlB,EAAO1O,KACzB,EACDrD,EAAW4S,EAAO1S,SAGpBT,EAAOmT,EAAOnT,MAAQ,QACtBwB,EAAU2R,EAAO3R,SAGfxF,EAAWuE,IACbe,EAAGwE,EAAK,IAAIwM,EAAO1O,OAAQ5D,EAAMO,EAAUiB,GAAWlF,MAAM,EAC7D,IA/BMA,IAmCV,CAEDc,kBACE,MAAMyV,EAAUvW,KAAKG,KAAK,WACpBqJ,EAAMxJ,KAAKwJ,IAEjB,OAAK+M,GAAWA,EAAQ3V,OAAS,GAIjC2V,EAAQ7V,SAASsV,IACf,MAAMa,EAASb,EAAOa,OAEtB,IAAInT,EACAO,EAEJ,GAJiBjE,KAAKoW,SAKpB,OAAO,EAGLS,IACF5S,EAAW4S,EAAO1S,QAClBT,EAAOmT,EAAOnT,MAAQ,SAGpBhE,EAAWuE,IACbc,EAAIyE,EAAK9F,EAAMO,EAChB,IApBMjE,IAwBV,EAGHsW,EAAQ9I,SAAW,CACjBgD,UAAW,MACXV,QAAQ,EACRsG,UAAU,EACVH,SAAS,EACTM,QAAS,GACT5I,QAAS,KACTY,QAAS,KACT8C,YAAa,KACbC,YAAa,KACb6F,cAAe,KACfC,aAAc,KACdtI,cAAe,KACfC,aAAc,MCrchB,MAAMsI,EAAO,MACX,IAAIC,EAAO,EAEX,OAAQC,IACND,GAAQ,EAEDC,EAASA,EAAS,IAAMD,EAAO,QAAUA,EAEnD,EARY,GCMPtS,EAAK,CAACmB,EAAOhC,EAASe,EAAU,QACpC,MAAMsS,EAAQH,IACd,IAAII,EAA2B,iBAAVtR,EAAqBA,EAAM5G,WAAa4G,EAE7D,OAAKzG,EAAWyE,IAKX8B,EAAawR,KAChBxR,EAAawR,GAAW,IAG1BxR,EAAawR,GAAS5R,KAAK,CACzBM,MAAOsR,EACPzQ,SAAU7C,EACVe,UACAsS,UAGKA,GAfE,EAeFA,ECvBHE,EAAqBvR,IACzB,IAAKnH,EAAOiH,EAAcE,GACxB,OAAO,SAGFF,EAAaE,EAAM,ECJtBpB,GAAM,CAACoB,EAAOqR,KAClB,IAAKpR,EAAID,GACP,OAAO,EAGLqR,ECL2B,CAACA,IAChC,MAAM/W,EAAOrB,OAAOqB,KAAKwF,GAGzB,IAAKuR,GAAS/W,EAAKG,OAAS,EAC1B,OAAO,EAGTH,EAAKC,SAAS+W,IACZ,MAAM3Q,EAAab,EAAawR,GAChC,IAAItR,EAEJW,EAAWpG,SAAQ,CAACiX,EAAWC,KACzBD,EAAU3Q,WAAawQ,GAASG,EAAUH,QAAUA,IACtDrR,EAAQwR,EAAUxR,MAClBW,EAAW1C,QAbL,EAamBwT,GAC1B,IAIC9Q,EAAWlG,OAAS,GACtB8W,EAAkBvR,EACnB,GACD,EDjBA0R,CAAyBL,GAEzBE,EAAkBvR,EACnB,EEPH,MAAM2R,WAAgBjY,EACpBC,YAAYC,GACVwN,QAEAvN,KAAKC,MAAQ6X,GAAQtK,SACrBxN,KAAK+X,QAAU,KACf/X,KAAKgY,OAAS,KACdhY,KAAKkM,SAAW,KAChBlM,KAAKiY,QAAU,KACfjY,KAAKuW,QAAU,GAEXxW,GACFC,KAAKE,WAAWH,EAEnB,CAEDG,WAAWH,GAET,OADAC,KAAKG,KAAKJ,GAASK,SAASC,eACrBL,IACR,CAED6L,YAAYgC,GAAmB,GAC7B,OAAO7N,KAAK+X,QAAQlM,YAAYgC,EACjC,CAEDS,QACE,OAAOtO,KAAK+X,QAAQzJ,OACrB,CAEDlO,SACE,MAAMuB,EAAgB3B,KAAKG,KAAK,iBAC1B0B,EAAiBC,SAASC,cAAcJ,IAAkBG,SAASoW,eAAevW,GAYxF,OAVA3B,KAAKmY,iBAAiBC,kBAAkBC,iBAEpCxW,GACF7B,KAAKsY,gBAAgB,CACnBnW,IAAKN,EAAeI,UACpBqN,IAAK,EACLH,IAAKtN,EAAeW,eAIjBxC,IACR,CAEDmY,iBACE,MAAMvK,EAAiB5N,KAAKG,KAAK,kBAC3B8C,EAAWjD,KAAKG,KAAK,YACrB+O,EAAelP,KAAKG,KAAK,gBACzBwB,EAAgB3B,KAAKG,KAAK,iBAC1B4L,EAAW/L,KAAKG,KAAK,YACrBqO,EAAYxO,KAAKG,KAAK,aACtB8O,EAAcjP,KAAKG,KAAK,eAY9B,OAVAH,KAAK+X,QAAU,IAAIzK,EAAQ,CACzBM,iBACAsB,eACAvN,gBACAsB,WACA8I,WACAyC,YACAS,gBAGKjP,IACR,CAEDoY,kBACE,MAAMvI,EAAQ7P,KAAKG,KAAK,SAClB+O,EAAelP,KAAKG,KAAK,gBACzBwB,EAAgB3B,KAAKG,KAAK,iBAC1B2Q,EAAc9Q,KAAKG,KAAK,eACxB4L,EAAW/L,KAAKG,KAAK,YACrBoG,EAAWvG,KAAKG,KAAK,YACrBqQ,EAAYxQ,KAAKG,KAAK,aACtBgU,EAAcnU,KAAKG,KAAK,eACxBgR,EAAcnR,KAAKG,KAAK,eACxB8O,EAAcjP,KAAKG,KAAK,eACxBmO,EAAQtO,KAAKsO,QACnB,IACIiK,EADAjG,EAAgBtS,KAAKG,KAAK,iBAG9B,OAAImO,EAAQ,IAIZiK,EAAmB,CACjB5W,gBACAoK,WACAxF,WACAsJ,QACAX,eACAhD,SAAUlM,KAAK6L,cACfsI,cACAhD,cACAlC,eAGe,aAAb1I,GACFvG,KAAKgY,OAAS,IAAIpI,EAAO,CACvBY,YACAX,QACAzF,KAAM,OACNuG,WAAW,EACXC,YAAY,EACZE,cACAO,YAAa,KACKrR,KAAKiY,QACb/G,QAAQ,IAGpBoB,EAAgBtS,KAAKgY,OAAO7H,OAE5BoI,EAAiBzH,YAAcA,EAGjCyH,EAAiBjG,cAAgBA,EACjCtS,KAAKkM,SAAW,IAAIyF,EAAS4G,IAlCpBvY,IAqCV,CAEDqY,iBACE,MAAM7H,EAAYxQ,KAAKG,KAAK,aACtBqY,EAAWxY,KAAKG,KAAK,YACrBsY,EAAMzY,KAAKG,KAAK,OAChBuY,EAAO1Y,KAAKG,KAAK,QACjBwY,EAAS3Y,KAAKG,KAAK,UACnByY,EAAQ5Y,KAAKG,KAAK,SAClBmO,EAAQtO,KAAKsO,QAUbuK,EAAO,CACXvR,KAAM,WACN6C,KAAM,WACNC,KAAM,GACN8L,KAAMsC,GAEFM,EAAM,CACVxR,KAAM,SACN6C,KAAM,SACNC,KAAM,GACN8L,KAAMuC,GAEFM,EAAO,CACXzR,KAAM,OACN6C,KAAM,OACNC,KAAM,GACN8L,KAAMwC,GAEFM,EAAS,CACb1R,KAAM,SACN6C,KAAM,SACNC,KAAM,GACN8L,KAAMyC,GAEFM,EAAO,CACX3R,KAAM,OACN6C,KAAM,OACNC,KAAM,GACNyM,OAAQ,CACNnT,KAAM,QACNS,QAAS,0BAYPoS,EAAU,GA6BhB,OA3BAA,EAAQ1Q,KArDG,CACTyB,KAAM,KACN6C,KAAM,KACNC,KAAM,GACNyM,OAAQ,CACNnT,KAAM,QACNS,QAAS,uBAgDTqU,GACFjC,EAAQ1Q,KAAKgT,GAEXvK,EAAQ,GACViI,EAAQ1Q,KAAKoT,GAEXR,GACFlC,EAAQ1Q,KAAKiT,GAEXJ,GACFnC,EAAQ1Q,KAAKkT,GAEXJ,GACFpC,EAAQ1Q,KAAKmT,GAEXJ,GAAOhY,OAAS,GAClB2V,EAAQ1Q,QAAQ+S,GAElBrC,EAAQ1Q,KA9BK,CACXyB,KAAM,OACN6C,KAAM,OACNC,KAAM,GACNyM,OAAQ,CACNnT,KAAM,QACNS,QAAS,yBAyBbnE,KAAKuW,QAAU,IAAIA,GAEnBvW,KAAKiY,QAAU,IAAI3B,EAAQ,CACzB9F,YACA+F,QAASA,IAGJvW,IACR,CAEDkZ,UAAUlD,GACR,MAAMiC,EAAUjY,KAAKiY,QACf1B,EAAUvW,KAAKuW,QAMrB,OALAA,EAAQnS,QAAQ,EAAG,EAAG4R,GACtBiC,EAAQ9X,KAAK,CACXoW,YAEF0B,EAAQhB,UACDjX,IACR,CAEDmZ,aAAa7R,GAEX,OADAtH,KAAKiY,QAAQ9M,OAAO7D,GACbtH,IACR,CAEDoZ,QACE,MAAMnK,EAAcjP,KAAKG,KAAK,eACxB8X,EAAUjY,KAAKiY,QACf/L,EAAWlM,KAAKkM,SAChBoC,EAAQtO,KAAKsO,QAoBnB,OALIA,EAAQ,IACVpC,EAASkG,SAAU,GAErBpS,KAAKkC,SAAS,GAjBG,KACf+V,EAAQrD,KAAK,MACbqD,EAAQxD,KAAK,QAETnG,EAAQ,IACVpC,EAAS8H,UAAU,GACnB9H,EAASkG,SAAU,GAGjB1S,EAAWuP,IACbA,EAAY3P,KAAK2Y,EAAS,KAC3B,IAQIjY,IACR,CAEDqZ,WACE,MAAMpK,EAAcjP,KAAKG,KAAK,eACxB0B,EAAiBH,EAAkB1B,KAAKG,KAAK,kBAC7C8X,EAAUjY,KAAKiY,QACf/L,EAAWlM,KAAKkM,SAChBoC,EAAQtO,KAAKsO,QACbnM,EAAMmS,KAAKgF,MACfzX,EAAeW,aAAeX,EAAeuN,cAqB/C,OALId,EAAQ,IACVpC,EAASkG,SAAU,GAErBpS,KAAKkC,SAASC,GAjBI,KAChB8V,EAAQrD,KAAK,QACbqD,EAAQxD,KAAK,MAETnG,EAAQ,IACVpC,EAAS8H,UAAU1F,EAAQ,GAC3BpC,EAASkG,SAAU,GAGjB1S,EAAWuP,IACbA,EAAY3P,KAAK2Y,EAAS,SAC3B,IAQIjY,IACR,CAEDkC,SAASC,EAAK8M,GACZ,MAAMtN,EAAgB3B,KAAKG,KAAK,iBAEhC,OADA+B,EAASP,EAAeQ,EAAK8M,GACtBjP,IACR,CAEDkR,SACE,MAAM3K,EAAWvG,KAAKG,KAAK,YACrB8X,EAAUjY,KAAKiY,QACfD,EAAShY,KAAKgY,OACd9L,EAAWlM,KAAKkM,SAGtB,OAFclM,KAAKsO,QAEP,IAIK,aAAb/H,GACF2F,EAASgF,SACT+G,EAAQjE,UAAU,UAElBiE,EAAQ/G,SAER9P,GAAM,KACA8K,EAASwG,WACXxG,EAASgF,SAET8G,EAAO9G,QACR,MAdIlR,IAmBV,CAEDa,UACE,IAAIkX,EAAU/X,KAAK+X,QACf7L,EAAWlM,KAAKkM,SAChB8L,EAAShY,KAAKgY,OACdC,EAAUjY,KAAKiY,QACftF,GAAY,EAChB,MAAMrE,EAAQtO,KAAKsO,QAwBnB,OAtBAtO,KAAKc,kBAEDwN,EAAQ,IACVqE,EAAYzG,EAASyG,YAErBzG,EAASrL,UACTqL,EAAW,KAEPyG,IACFqF,EAAOnX,UACPmX,EAAS,OAIbC,EAAQpX,UACRoX,EAAU,KAEVF,EAAQlX,UACRkX,EAAU,KAEV/X,KAAKG,KAAK2X,GAAQtK,UAEXxN,IACR,CAEDuZ,WAEE,OADAvZ,KAAKkR,SACElR,IACR,CAEDwZ,cAEE,OADAxZ,KAAKoZ,QACEpZ,IACR,CAEDyZ,iBAEE,OADAzZ,KAAKqZ,WACErZ,IACR,CAEDsY,iBAAgBnW,IAAEA,EAAGmN,IAAEA,EAAGH,IAAEA,IAC1B,MAAM8I,EAAUjY,KAAKiY,QACf5L,EAAUiI,KAAKoF,KAAKvX,GAa1B,OAXIkK,GAAWiD,GACb2I,EAAQrD,KAAK,MACbqD,EAAQxD,KAAK,SACJpI,GAAW8C,GACpB8I,EAAQrD,KAAK,QACbqD,EAAQxD,KAAK,OACJpI,EAAUiD,GAAOjD,EAAU8C,IACpC8I,EAAQxD,KAAK,MACbwD,EAAQxD,KAAK,SAGRzU,IACR,CAEDK,eAKE,OAJAsZ,EAAU,iBAAkB3Z,KAAKsY,gBAAiBtY,MAClD2Z,EAAU,oBAAqB3Z,KAAKwZ,YAAaxZ,MACjD2Z,EAAU,wBAAyB3Z,KAAKuZ,SAAUvZ,MAClD2Z,EAAU,sBAAuB3Z,KAAKyZ,eAAgBzZ,MAC/CA,IACR,CAEDc,kBAKE,OAJA8Y,GAAY,kBACZA,GAAY,qBACZA,GAAY,yBACZA,GAAY,uBACL5Z,IACR,SAGH8X,GAAQtK,SAAW,CACjBI,eAAgB,WAChB3K,SAAU,iBACV4M,MAAO,KACPlO,cAAe,YACf4E,SAAU,WACV+L,cAAe,SACf9B,UAAW,MACXzE,UAAU,EACVyC,UAAW,GACXU,aAAc,EACdsJ,SAAU,GACVC,IAAK,GACLC,KAAM,GACNC,OAAQ,GACRC,MAAO,GACP9H,YAAa,GACbqD,YAAa,KACbhD,YAAa,KACblC,YAAa,MAGXsF,OAAOsF,QAGTA,OAAOC,OAAOD,OAAOxY,GAAI,CACvB0Y,QAAS,SAAUha,GAEjB,IAAIia,EAAWH,OAAO7Z,MAEtB,OAAO,IAAI8X,GAET+B,OAAOC,OAAO,CAAE,EAAE/Z,EAAS,CACzB6N,eAAgBoM,IAGrB"} \ No newline at end of file diff --git a/drawer.css b/drawer.css index 114fcc1f..ebad37db 100644 --- a/drawer.css +++ b/drawer.css @@ -318,4 +318,4 @@ padding: 0; } -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZhcmlhYmxlcy5sZXNzIiwiLi4vLi4vPGlucHV0IGNzcyAzPiIsImRyYXdlci5sZXNzIiwic2hhZG93Lmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSx1QkFBQTtFQUNBLDhCQUFBO0VBQ0EsK0JBQUE7Q0NDRDtBQUNELG1EQUFtRDtBQUNuRDs7Ozs7R0FLRztBQUNILDRCQUE0QjtBQ1I1QjtFQUNFLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsK0JBQUE7VUFBQSx1QkFBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7Q0RVRDtBQ1JDO0VDTkEsd0NBQUE7VUFBQSxnQ0FBQTtFRFFFLHFCQUFBO0VBQUEscUJBQUE7RUFBQSxjQUFBO0VBQ0EsNkJBQUE7RUFBQSw4QkFBQTtNQUFBLDJCQUFBO1VBQUEsdUJBQUE7RUFDQSxzQkFBQTtNQUFBLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLHVCQUFBO0VBQ0Esa0NBQUE7VUFBQSwwQkFBQTtFQUNBLGlCQUFBO0NEVUg7QUNQQzs7O0VBR0UsWUFBQTtFQUNBLCtCQUFBO1VBQUEsdUJBQUE7Q0RTSDtBQ05DOztFQUVFLHFCQUFBO01BQUEsZUFBQTtDRFFIO0FDTEM7OztFQUdFLGdCQUFBO0NET0g7QUNKQzs7RUFFRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7Q0RNSDtBQ0hDO0VBQ0UsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7RUFDQSwrQkFBQTtVQUFBLHVCQUFBO0VBQ0EsaUNBQUE7Q0RLSDtBQ0ZDO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsU0FBQTtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLG9DQUFBO1VBQUEsNEJBQUE7RUFDQSxpQkFBQTtDRElIO0FDakJDO0VBZ0JJLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0NESUw7QUNERztFQUNFLFlBQUE7Q0RHTDtBQ0NDO0VBQ0Usb0JBQUE7TUFBQSxZQUFBO1VBQUEsUUFBQTtFQUNBLGVBQUE7Q0RDSDtBQ0VDO0VBQ0UsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7Q0RBSDtBQ0dDO0VBQ0UsWUFBQTtFQUNBLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxpQkFBQTtDRERIO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDU0M7RUFDRSwrQkFBQTtDRFBIO0FDV087RUFDRSxjQUFBO0NEVFQ7QUNjTztFQUNFLGNBQUE7Q0RaVDtBQ2lCTztFQUNFLGNBQUE7Q0RmVDtBQ29CTztFQUNFLGNBQUE7Q0RsQlQ7QUN1Qk87RUFDRSxjQUFBO0NEckJUO0FDMEJPO0VBQ0UsY0FBQTtDRHhCVDtBQzhCQztFQUNFLGdDQUFBO0NENUJIO0FDZ0NPO0VBQ0UsYUFBQTtDRDlCVDtBQ21DTztFQUNFLGFBQUE7Q0RqQ1Q7QUNzQ087RUFDRSxhQUFBO0NEcENUO0FDeUNPO0VBQ0UsYUFBQTtDRHZDVDtBQzRDTztFQUNFLGFBQUE7Q0QxQ1Q7QUMrQ087RUFDRSxhQUFBO0NEN0NUO0FDbURDOztFQUVFLFFBQUE7RUFDQSxZQUFBO0NEakRIO0FDb0RLOztFQUNFLGNBQUE7Q0RqRFA7QUNvREs7O0VBQ0UsY0FBQTtDRGpEUDtBQ29ESzs7RUFDRSxjQUFBO0NEakRQO0FDb0RLOztFQUNFLGNBQUE7Q0RqRFA7QUNvREs7O0VBQ0UsY0FBQTtDRGpEUDtBQ29ESzs7RUFDRSxjQUFBO0NEakRQO0FDc0RDO0VBQ0UsaUNBQUE7Q0RwREg7QUN3RE87RUFDRSxZQUFBO0NEdERUO0FDMkRPO0VBQ0UsWUFBQTtDRHpEVDtBQzhETztFQUNFLFlBQUE7Q0Q1RFQ7QUNpRU87RUFDRSxZQUFBO0NEL0RUO0FDb0VPO0VBQ0UsWUFBQTtDRGxFVDtBQ3VFTztFQUNFLFlBQUE7Q0RyRVQ7QUMyRUM7RUFDRSxhQUFBO0VBQ0EsOEJBQUE7Q0R6RUg7QUM2RU87RUFDRSxlQUFBO0NEM0VUO0FDZ0ZPO0VBQ0UsZUFBQTtDRDlFVDtBQ21GTztFQUNFLGVBQUE7Q0RqRlQ7QUNzRk87RUFDRSxlQUFBO0NEcEZUO0FDeUZPO0VBQ0UsZUFBQTtDRHZGVDtBQzRGTztFQUNFLGVBQUE7Q0QxRlQ7QUNnR0M7RUFDRSxvQkFBQTtFQUNBLCtCQUFBO0NEOUZIO0FDZ0dHO0VBQ0UsZ0JBQUE7Q0Q5Rkw7QUNnR0s7RUFDRSxTQUFBO0NEOUZQO0FDaUdLO0VBQ0UsUUFBQTtDRC9GUDtBQ2tHSztFQUNFLE9BQUE7Q0RoR1A7QUNtR0s7RUFDRSxVQUFBO0NEakdQO0FDd0dLOztFQUVFLHlCQUFBO0VBQ0EsU0FBQTtFQUNBLG9DQUFBO1VBQUEsNEJBQUE7Q0R0R1A7QUN5R0s7O0VBRUUsd0JBQUE7RUFDQSxVQUFBO0VBQ0Esb0NBQUE7VUFBQSw0QkFBQTtDRHZHUDtBQzRHUztFQUNFLFdBQUE7Q0QxR1g7QUM2R1M7RUFDRSxVQUFBO0NEM0dYO0FDOEdTO0VBQ0UsU0FBQTtDRDVHWDtBQytHUztFQUNFLFlBQUE7Q0Q3R1g7QUNzSEs7O0VBRUUsYUFBQTtFQUNBLDZCQUFBO0NEcEhQO0FDeUhDO0VBQ0UsV0FBQTtDRHZISCIsImZpbGUiOiJkcmF3ZXIuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOnJvb3Qge1xyXG4gIC0tb3V0bGluZS16SW5kZXg6IDIwMDA7XHJcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XHJcbiAgLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoOiAxMDAlO1xyXG59XHJcbiIsIjpyb290IHtcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcbn1cbi8qID09PT09PT09PT0gY29sb3JzLnRoZW1lIC0g5Z+656GA6aKc6Imy5Y+Y6YeP6ZuG5ZCIID09PT09PT09PT0gKi9cbi8qKlxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMjBcbiAqL1xuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cbi5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogLTE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX21vZGFsIHtcbiAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjE7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC40cztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9faGVhZGVyLFxuLm91dGxpbmUtZHJhd2VyX19tYWluLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICB3aWR0aDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9faGVhZGVyLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBmbGV4LXNocmluazogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUsXG4ub3V0bGluZS1kcmF3ZXJfX21haW4sXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIHBhZGRpbmc6IDAgMTZweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9faGVhZGVyLFxuLm91dGxpbmUtZHJhd2VyX190aXRsZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIGhlaWdodDogNTJweDtcbiAgbGluZS1oZWlnaHQ6IDUycHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBtYXJnaW46IDAgMTZweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDEycHg7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBjb2xvcjogIzk5OTtcbiAgZm9udC1zaXplOiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19jbG9zZSAub3V0bGluZS1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlOmhvdmVyIHtcbiAgY29sb3I6ICM2NjY7XG59XG4ub3V0bGluZS1kcmF3ZXJfX21haW4ge1xuICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19vdmVybGF5IHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAwLjE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICB3aWR0aDogMjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21pbmkge1xuICB3aWR0aDogNDgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3NtYWxsLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9zbWFsbCB7XG4gIHdpZHRoOiA1NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIHdpZHRoOiA2ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICB3aWR0aDogNzIwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX2xhcmdlLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9sYXJnZSB7XG4gIHdpZHRoOiA5NjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTczMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTI5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC02OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yixcbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueSB7XG4gIGhlaWdodDogMjQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21pbmkge1xuICBoZWlnaHQ6IDMyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICBoZWlnaHQ6IDM2MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyIHtcbiAgaGVpZ2h0OiA0MDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICBoZWlnaHQ6IDQ0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICBoZWlnaHQ6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB0b3A6IGluaXRpYWw7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0ZW0pO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIHJpZ2h0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBsZWZ0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl90dGIge1xuICB0b3A6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGJvdHRvbTogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfcnRsLFxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xufVxuLm91dGxpbmUtZHJhd2VyX2Z1bGwge1xuICBwYWRkaW5nOiAwO1xufVxuIiwiQGltcG9ydCAnLi92YXJpYWJsZXMnO1xyXG5AaW1wb3J0ICcuL2NvbG9ycyc7XHJcbkBpbXBvcnQgJy4vc2hhZG93JztcclxuXHJcbi5vdXRsaW5lLWRyYXdlciB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHotaW5kZXg6IC0xO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIG1hcmdpbjogMDtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgJl9fbW9kYWwge1xyXG4gICAgLnNoYWRvd19saWdodF9yZWd1bGFyKCk7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgIGZsZXgtd3JhcDogbm93cmFwO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgei1pbmRleDogMjE7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2hpdGU7XHJcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX2hlYWRlcixcclxuICAmX19tYWluLFxyXG4gICZfX2Zvb3RlciB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgfVxyXG5cclxuICAmX19oZWFkZXIsXHJcbiAgJl9fZm9vdGVyIHtcclxuICAgIGZsZXgtc2hyaW5rOiAwO1xyXG4gIH1cclxuXHJcbiAgJl9fdGl0bGUsXHJcbiAgJl9fbWFpbixcclxuICAmX19mb290ZXIge1xyXG4gICAgcGFkZGluZzogMCAxNnB4O1xyXG4gIH1cclxuXHJcbiAgJl9faGVhZGVyLFxyXG4gICZfX3RpdGxlIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHotaW5kZXg6IDE7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIGhlaWdodDogNTJweDtcclxuICAgIGxpbmUtaGVpZ2h0OiA1MnB4O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX3RpdGxlIHtcclxuICAgIGZvbnQtc2l6ZTogMTZweDtcclxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICBtYXJnaW46IDAgMTZweDtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG4gIH1cclxuXHJcbiAgJl9fY2xvc2Uge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgei1pbmRleDogMjtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgcmlnaHQ6IDEycHg7XHJcbiAgICB3aWR0aDogMjBweDtcclxuICAgIGhlaWdodDogMjBweDtcclxuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xyXG4gICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuICAgIGZvbnQtc2l6ZTogMjBweDtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICAgLm91dGxpbmUtaWNvbiB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgei1pbmRleDogMjtcclxuICAgICAgdG9wOiAwO1xyXG4gICAgICBsZWZ0OiAwO1xyXG4gICAgfVxyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQHRoaXJkX3RleHRfY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX19tYWluIHtcclxuICAgIGZsZXg6IDE7XHJcbiAgICBvdmVyZmxvdzogYXV0bztcclxuICB9XHJcblxyXG4gICZfX2Zvb3RlciB7XHJcbiAgICBtYXJnaW46IDAgYXV0bztcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfX292ZXJsYXkge1xyXG4gICAgY29udGVudDogJyc7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiAxO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xyXG4gICAgb3BhY2l0eTogMC4xO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcblxyXG4gICZfcnRsLFxyXG4gICZfbHRyIHtcclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAmX3Rpbnkge1xyXG4gICAgICAgIHdpZHRoOiAyODBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9taW5pIHtcclxuICAgICAgICB3aWR0aDogNDgwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfc21hbGwge1xyXG4gICAgICAgIHdpZHRoOiA1NDBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9yZWd1bGFyIHtcclxuICAgICAgICB3aWR0aDogNjgwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWVkaXVtIHtcclxuICAgICAgICB3aWR0aDogNzIwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbGFyZ2Uge1xyXG4gICAgICAgIHdpZHRoOiA5NjBweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9ydGwge1xyXG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XHJcblxyXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XHJcbiAgICAgICZfdGlueSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgcmlnaHQ6IC0yOTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgcmlnaHQ6IC00OTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfc21hbGwge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHJpZ2h0OiAtNTUwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3JlZ3VsYXIge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHJpZ2h0OiAtNjkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgcmlnaHQ6IC03MzBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbGFyZ2Uge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHJpZ2h0OiAtOTcwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX2x0ciB7XHJcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XHJcblxyXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XHJcbiAgICAgICZfdGlueSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgbGVmdDogLTI5MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9taW5pIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICBsZWZ0OiAtNDkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3NtYWxsIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICBsZWZ0OiAtNTUwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3JlZ3VsYXIge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIGxlZnQ6IC02OTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWVkaXVtIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICBsZWZ0OiAtNzMwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2xhcmdlIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICBsZWZ0OiAtOTcwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3R0YixcclxuICAmX2J0dCB7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcblxyXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XHJcbiAgICAgICZfdGlueSB7XHJcbiAgICAgICAgaGVpZ2h0OiAyNDBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9taW5pIHtcclxuICAgICAgICBoZWlnaHQ6IDMyMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3NtYWxsIHtcclxuICAgICAgICBoZWlnaHQ6IDM2MHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3JlZ3VsYXIge1xyXG4gICAgICAgIGhlaWdodDogNDAwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWVkaXVtIHtcclxuICAgICAgICBoZWlnaHQ6IDQ0MHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2xhcmdlIHtcclxuICAgICAgICBoZWlnaHQ6IDQ4MHB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3R0YiB7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG5cclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAmX3Rpbnkge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHRvcDogLTI1MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9taW5pIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICB0b3A6IC0zMzBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfc21hbGwge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHRvcDogLTM3MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9yZWd1bGFyIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICB0b3A6IC00MTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWVkaXVtIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICB0b3A6IC00NTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbGFyZ2Uge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHRvcDogLTQ5MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9idHQge1xyXG4gICAgdG9wOiBpbml0aWFsO1xyXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcclxuXHJcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgJl90aW55IHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICBib3R0b206IC0yNTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgYm90dG9tOiAtMzMwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3NtYWxsIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICBib3R0b206IC0zNzBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfcmVndWxhciB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgYm90dG9tOiAtNDEwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgYm90dG9tOiAtNDUwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2xhcmdlIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICBib3R0b206IC00OTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfb3BlbmVkIHtcclxuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XHJcbiAgICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XHJcblxyXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XHJcbiAgICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuXHJcbiAgICAgICZfcnRsIHtcclxuICAgICAgICByaWdodDogMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9sdHIge1xyXG4gICAgICAgIGxlZnQ6IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfdHRiIHtcclxuICAgICAgICB0b3A6IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfYnR0IHtcclxuICAgICAgICBib3R0b206IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfb2Zmc2V0IHtcclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAmX3J0bCxcclxuICAgICAgJl9sdHIge1xyXG4gICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcclxuICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfdHRiLFxyXG4gICAgICAmX2J0dCB7XHJcbiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDRlbSk7XHJcbiAgICAgICAgbGVmdDogNTAlO1xyXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9vcGVuZWQge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAgICAgJl9ydGwge1xyXG4gICAgICAgICAgICByaWdodDogMmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICZfbHRyIHtcclxuICAgICAgICAgICAgbGVmdDogMmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICZfdHRiIHtcclxuICAgICAgICAgICAgdG9wOiAyZW07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgJl9idHQge1xyXG4gICAgICAgICAgICBib3R0b206IDJlbTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfYXV0byB7XHJcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgJl9ydGwsXHJcbiAgICAgICZfbHRyIHtcclxuICAgICAgICBoZWlnaHQ6IGF1dG87XHJcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9mdWxsIHtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgfVxyXG59XHJcbiIsIi8qKlxyXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXHJcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xyXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxyXG4gKi9cclxuQGltcG9ydCAnLi9jb2xvcnMnO1xyXG5cclxuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cclxuLnNoYWRvdyhAb2Zmc2V0OiAwIDAgNnB4IDFweCwgQGNvbG9yOiBAcHJpbWFyeV9ib3JkZXJfY29sb3IpIHtcclxuICBib3gtc2hhZG93OiBAb2Zmc2V0IEBjb2xvcjtcclxufVxyXG5cclxuLnNoYWRvd19yZWd1bGFyKEBjb2xvcjogQHByaW1hcnlfYm9yZGVyX2NvbG9yKSB7XHJcbiAgLnNoYWRvdygwIDAgNnB4IDFweCwgQGNvbG9yKTtcclxufVxyXG5cclxuLnNoYWRvd19sYXJnZShAY29sb3I6IEBwcmltYXJ5X2JvcmRlcl9jb2xvcikge1xyXG4gIC5zaGFkb3coMCAwIDEycHggMXB4LCBAY29sb3IpO1xyXG59XHJcblxyXG4uc2hhZG93X2xpZ2h0X3JlZ3VsYXIoKSB7XHJcbiAgLnNoYWRvd19yZWd1bGFyKCk7XHJcbn1cclxuXHJcbi5zaGFkb3dfbGlnaHRfbGFyZ2UoKSB7XHJcbiAgLnNoYWRvd19sYXJnZSgpO1xyXG59XHJcblxyXG4uc2hhZG93X2RhcmtfcmVndWxhcigpIHtcclxuICAuc2hhZG93X3JlZ3VsYXIoQHNlY29uZGFyeV9ib3JkZXJfY29sb3IpO1xyXG59XHJcblxyXG4uc2hhZG93X2RhcmtfbGFyZ2UoKSB7XHJcbiAgLnNoYWRvd19sYXJnZShAc2Vjb25kYXJ5X2JvcmRlcl9jb2xvcik7XHJcbn1cclxuIl19 */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZhcmlhYmxlcy5sZXNzIiwiLi4vLi4vPGlucHV0IGNzcyAzPiIsImRyYXdlci5sZXNzIiwic2hhZG93Lmxlc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSx1QkFBQTtFQUNBLDhCQUFBO0VBQ0EsK0JBQUE7Q0NDRDtBQUNELG1EQUFtRDtBQUNuRDs7Ozs7R0FLRztBQUNILDRCQUE0QjtBQ1I1QjtFQUNFLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsK0JBQUE7VUFBQSx1QkFBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7Q0RVRDtBQ1JDO0VDTkEsd0NBQUE7VUFBQSxnQ0FBQTtFRFFFLHFCQUFBO0VBQUEscUJBQUE7RUFBQSxjQUFBO0VBQ0EsNkJBQUE7RUFBQSw4QkFBQTtNQUFBLDJCQUFBO1VBQUEsdUJBQUE7RUFDQSxzQkFBQTtNQUFBLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLHVCQUFBO0VBQ0Esa0NBQUE7VUFBQSwwQkFBQTtFQUNBLGlCQUFBO0NEVUg7QUNQQzs7O0VBR0UsWUFBQTtFQUNBLCtCQUFBO1VBQUEsdUJBQUE7Q0RTSDtBQ05DOztFQUVFLHFCQUFBO01BQUEsZUFBQTtDRFFIO0FDTEM7OztFQUdFLGdCQUFBO0NET0g7QUNKQzs7RUFFRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7Q0RNSDtBQ0hDO0VBQ0UsZ0JBQUE7RUFDQSxpQkFBQTtFQUNBLGVBQUE7RUFDQSwrQkFBQTtVQUFBLHVCQUFBO0VBQ0EsaUNBQUE7Q0RLSDtBQ0ZDO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsU0FBQTtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQkFBQTtFQUNBLG9DQUFBO1VBQUEsNEJBQUE7RUFDQSxpQkFBQTtDRElIO0FDakJDO0VBZ0JJLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0NESUw7QUNERztFQUNFLFlBQUE7Q0RHTDtBQ0NDO0VBQ0Usb0JBQUE7TUFBQSxZQUFBO1VBQUEsUUFBQTtFQUNBLGVBQUE7Q0RDSDtBQ0VDO0VBQ0UsZUFBQTtFQUNBLGtCQUFBO0VBQ0EsaUJBQUE7Q0RBSDtBQ0dDO0VBQ0UsWUFBQTtFQUNBLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxpQkFBQTtDRERIO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDT0s7O0VBQ0UsYUFBQTtDREpQO0FDU0M7RUFDRSwrQkFBQTtDRFBIO0FDV087RUFDRSxjQUFBO0NEVFQ7QUNjTztFQUNFLGNBQUE7Q0RaVDtBQ2lCTztFQUNFLGNBQUE7Q0RmVDtBQ29CTztFQUNFLGNBQUE7Q0RsQlQ7QUN1Qk87RUFDRSxjQUFBO0NEckJUO0FDMEJPO0VBQ0UsY0FBQTtDRHhCVDtBQzhCQztFQUNFLGdDQUFBO0NENUJIO0FDZ0NPO0VBQ0UsYUFBQTtDRDlCVDtBQ21DTztFQUNFLGFBQUE7Q0RqQ1Q7QUNzQ087RUFDRSxhQUFBO0NEcENUO0FDeUNPO0VBQ0UsYUFBQTtDRHZDVDtBQzRDTztFQUNFLGFBQUE7Q0QxQ1Q7QUMrQ087RUFDRSxhQUFBO0NEN0NUO0FDbURDOztFQUVFLFFBQUE7RUFDQSxZQUFBO0NEakRIO0FDb0RLOztFQUNFLGNBQUE7Q0RqRFA7QUNvREs7O0VBQ0UsY0FBQTtDRGpEUDtBQ29ESzs7RUFDRSxjQUFBO0NEakRQO0FDb0RLOztFQUNFLGNBQUE7Q0RqRFA7QUNvREs7O0VBQ0UsY0FBQTtDRGpEUDtBQ29ESzs7RUFDRSxjQUFBO0NEakRQO0FDc0RDO0VBQ0UsaUNBQUE7Q0RwREg7QUN3RE87RUFDRSxZQUFBO0NEdERUO0FDMkRPO0VBQ0UsWUFBQTtDRHpEVDtBQzhETztFQUNFLFlBQUE7Q0Q1RFQ7QUNpRU87RUFDRSxZQUFBO0NEL0RUO0FDb0VPO0VBQ0UsWUFBQTtDRGxFVDtBQ3VFTztFQUNFLFlBQUE7Q0RyRVQ7QUMyRUM7RUFDRSxhQUFBO0VBQ0EsOEJBQUE7Q0R6RUg7QUM2RU87RUFDRSxlQUFBO0NEM0VUO0FDZ0ZPO0VBQ0UsZUFBQTtDRDlFVDtBQ21GTztFQUNFLGVBQUE7Q0RqRlQ7QUNzRk87RUFDRSxlQUFBO0NEcEZUO0FDeUZPO0VBQ0UsZUFBQTtDRHZGVDtBQzRGTztFQUNFLGVBQUE7Q0QxRlQ7QUNnR0M7RUFDRSxvQkFBQTtFQUNBLCtCQUFBO0NEOUZIO0FDZ0dHO0VBQ0UsZ0JBQUE7Q0Q5Rkw7QUNnR0s7RUFDRSxTQUFBO0NEOUZQO0FDaUdLO0VBQ0UsUUFBQTtDRC9GUDtBQ2tHSztFQUNFLE9BQUE7Q0RoR1A7QUNtR0s7RUFDRSxVQUFBO0NEakdQO0FDd0dLOztFQUVFLHlCQUFBO0VBQ0EsU0FBQTtFQUNBLG9DQUFBO1VBQUEsNEJBQUE7Q0R0R1A7QUN5R0s7O0VBRUUsd0JBQUE7RUFDQSxVQUFBO0VBQ0Esb0NBQUE7VUFBQSw0QkFBQTtDRHZHUDtBQzRHUztFQUNFLFdBQUE7Q0QxR1g7QUM2R1M7RUFDRSxVQUFBO0NEM0dYO0FDOEdTO0VBQ0UsU0FBQTtDRDVHWDtBQytHUztFQUNFLFlBQUE7Q0Q3R1g7QUNzSEs7O0VBRUUsYUFBQTtFQUNBLDZCQUFBO0NEcEhQO0FDeUhDO0VBQ0UsV0FBQTtDRHZISCIsImZpbGUiOiJkcmF3ZXIuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiOnJvb3Qge1xuICAtLW91dGxpbmUtekluZGV4OiAyMDAwO1xuICAtLW91dGxpbmUtc3RpY2t5LWhlaWdodDogMTAwJTtcbiAgLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoOiAxMDAlO1xufVxuIiwiOnJvb3Qge1xuICAtLW91dGxpbmUtekluZGV4OiAyMDAwO1xuICAtLW91dGxpbmUtc3RpY2t5LWhlaWdodDogMTAwJTtcbiAgLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoOiAxMDAlO1xufVxuLyogPT09PT09PT09PSBjb2xvcnMudGhlbWUgLSDln7rnoYDpopzoibLlj5jph4/pm4blkIggPT09PT09PT09PSAqL1xuLyoqXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxuICovXG4vKiA9PT09PT0g6Zi05b2x5qC35byP6K6+572u5Ye95pWwID09PT09PSAqL1xuLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAtMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbW9kYWwge1xuICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyMTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX21haW4sXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSxcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgcGFkZGluZzogMCAxNnB4O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDAgYXV0bztcbiAgaGVpZ2h0OiA1MnB4O1xuICBsaW5lLWhlaWdodDogNTJweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMCAxNnB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXNpemU6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIC5vdXRsaW5lLWljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2U6aG92ZXIge1xuICBjb2xvcjogIzY2Njtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbWFpbiB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBtYXJnaW46IDAgYXV0bztcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX292ZXJsYXkge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG9wYWNpdHk6IDAuMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfdGlueSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfdGlueSB7XG4gIHdpZHRoOiAyODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWluaSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWluaSB7XG4gIHdpZHRoOiA0ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfc21hbGwsXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3NtYWxsIHtcbiAgd2lkdGg6IDU0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyIHtcbiAgd2lkdGg6IDY4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0sXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21lZGl1bSB7XG4gIHdpZHRoOiA3MjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbGFyZ2UsXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX2xhcmdlIHtcbiAgd2lkdGg6IDk2MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTI5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNTUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC02OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtOTcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtMjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNTUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTY5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTczMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtOTcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLFxuLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl90aW55LFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl90aW55IHtcbiAgaGVpZ2h0OiAyNDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWluaSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWluaSB7XG4gIGhlaWdodDogMzIwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3NtYWxsLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9zbWFsbCB7XG4gIGhlaWdodDogMzYwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIge1xuICBoZWlnaHQ6IDQwMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9tZWRpdW0sXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21lZGl1bSB7XG4gIGhlaWdodDogNDQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX2xhcmdlLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9sYXJnZSB7XG4gIGhlaWdodDogNDgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtMjUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtMzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTM3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQxMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIHRvcDogaW5pdGlhbDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtMjUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtMzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTM3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQxMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZCB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHotaW5kZXg6IHZhcigtLW91dGxpbmUtekluZGV4KTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIHJpZ2h0OiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBsZWZ0OiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl90dGIge1xuICB0b3A6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGJvdHRvbTogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfcnRsLFxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX3R0Yixcbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDRlbSk7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgcmlnaHQ6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGxlZnQ6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIHRvcDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgYm90dG9tOiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfYXV0by5vdXRsaW5lLWRyYXdlcl9ydGwsXG4ub3V0bGluZS1kcmF3ZXJfYXV0by5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XG59XG4ub3V0bGluZS1kcmF3ZXJfZnVsbCB7XG4gIHBhZGRpbmc6IDA7XG59XG4iLCJAaW1wb3J0ICcuL3ZhcmlhYmxlcyc7XG5AaW1wb3J0ICcuL2NvbG9ycyc7XG5AaW1wb3J0ICcuL3NoYWRvdyc7XG5cbi5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogLTE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJl9fbW9kYWwge1xuICAgIC5zaGFkb3dfbGlnaHRfcmVndWxhcigpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMjE7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19oZWFkZXIsXG4gICZfX21haW4sXG4gICZfX2Zvb3RlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuXG4gICZfX2hlYWRlcixcbiAgJl9fZm9vdGVyIHtcbiAgICBmbGV4LXNocmluazogMDtcbiAgfVxuXG4gICZfX3RpdGxlLFxuICAmX19tYWluLFxuICAmX19mb290ZXIge1xuICAgIHBhZGRpbmc6IDAgMTZweDtcbiAgfVxuXG4gICZfX2hlYWRlcixcbiAgJl9fdGl0bGUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIGhlaWdodDogNTJweDtcbiAgICBsaW5lLWhlaWdodDogNTJweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIG1hcmdpbjogMCAxNnB4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcbiAgfVxuXG4gICZfX2Nsb3NlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMjtcbiAgICB0b3A6IDUwJTtcbiAgICByaWdodDogMTJweDtcbiAgICB3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgIC5vdXRsaW5lLWljb24ge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIHRvcDogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQHRoaXJkX3RleHRfY29sb3I7XG4gICAgfVxuICB9XG5cbiAgJl9fbWFpbiB7XG4gICAgZmxleDogMTtcbiAgICBvdmVyZmxvdzogYXV0bztcbiAgfVxuXG4gICZfX2Zvb3RlciB7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX292ZXJsYXkge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAd2hpdGU7XG4gICAgb3BhY2l0eTogMC4xO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX3J0bCxcbiAgJl9sdHIge1xuICAgICYub3V0bGluZS1kcmF3ZXIge1xuICAgICAgJl90aW55IHtcbiAgICAgICAgd2lkdGg6IDI4MHB4O1xuICAgICAgfVxuXG4gICAgICAmX21pbmkge1xuICAgICAgICB3aWR0aDogNDgwcHg7XG4gICAgICB9XG5cbiAgICAgICZfc21hbGwge1xuICAgICAgICB3aWR0aDogNTQwcHg7XG4gICAgICB9XG5cbiAgICAgICZfcmVndWxhciB7XG4gICAgICAgIHdpZHRoOiA2ODBweDtcbiAgICAgIH1cblxuICAgICAgJl9tZWRpdW0ge1xuICAgICAgICB3aWR0aDogNzIwcHg7XG4gICAgICB9XG5cbiAgICAgICZfbGFyZ2Uge1xuICAgICAgICB3aWR0aDogOTYwcHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9ydGwge1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xuXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICAmX3Rpbnkge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgcmlnaHQ6IC0yOTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX21pbmkge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgcmlnaHQ6IC00OTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3NtYWxsIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIHJpZ2h0OiAtNTUwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9yZWd1bGFyIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIHJpZ2h0OiAtNjkwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9tZWRpdW0ge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgcmlnaHQ6IC03MzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX2xhcmdlIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIHJpZ2h0OiAtOTcwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX2x0ciB7XG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xuXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICAmX3Rpbnkge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgbGVmdDogLTI5MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbWluaSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBsZWZ0OiAtNDkwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9zbWFsbCB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBsZWZ0OiAtNTUwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9yZWd1bGFyIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGxlZnQ6IC02OTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX21lZGl1bSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBsZWZ0OiAtNzMwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9sYXJnZSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBsZWZ0OiAtOTcwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX3R0YixcbiAgJl9idHQge1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfdGlueSB7XG4gICAgICAgIGhlaWdodDogMjQwcHg7XG4gICAgICB9XG5cbiAgICAgICZfbWluaSB7XG4gICAgICAgIGhlaWdodDogMzIwcHg7XG4gICAgICB9XG5cbiAgICAgICZfc21hbGwge1xuICAgICAgICBoZWlnaHQ6IDM2MHB4O1xuICAgICAgfVxuXG4gICAgICAmX3JlZ3VsYXIge1xuICAgICAgICBoZWlnaHQ6IDQwMHB4O1xuICAgICAgfVxuXG4gICAgICAmX21lZGl1bSB7XG4gICAgICAgIGhlaWdodDogNDQwcHg7XG4gICAgICB9XG5cbiAgICAgICZfbGFyZ2Uge1xuICAgICAgICBoZWlnaHQ6IDQ4MHB4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfdHRiIHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xuXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICAmX3Rpbnkge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgdG9wOiAtMjUwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9taW5pIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIHRvcDogLTMzMHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfc21hbGwge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgdG9wOiAtMzcwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9yZWd1bGFyIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIHRvcDogLTQxMHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbWVkaXVtIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIHRvcDogLTQ1MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbGFyZ2Uge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgdG9wOiAtNDkwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX2J0dCB7XG4gICAgdG9wOiBpbml0aWFsO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XG5cbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfdGlueSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBib3R0b206IC0yNTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX21pbmkge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgYm90dG9tOiAtMzMwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9zbWFsbCB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBib3R0b206IC0zNzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3JlZ3VsYXIge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgYm90dG9tOiAtNDEwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9tZWRpdW0ge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgYm90dG9tOiAtNDUwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9sYXJnZSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBib3R0b206IC00OTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfb3BlbmVkIHtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIHotaW5kZXg6IHZhcigtLW91dGxpbmUtekluZGV4KTtcblxuICAgICYub3V0bGluZS1kcmF3ZXIge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuXG4gICAgICAmX3J0bCB7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgfVxuXG4gICAgICAmX2x0ciB7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICB9XG5cbiAgICAgICZfdHRiIHtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgfVxuXG4gICAgICAmX2J0dCB7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX29mZnNldCB7XG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICAmX3J0bCxcbiAgICAgICZfbHRyIHtcbiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgfVxuXG4gICAgICAmX3R0YixcbiAgICAgICZfYnR0IHtcbiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDRlbSk7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuXG4gICAgICAmX29wZW5lZCB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXIge1xuICAgICAgICAgICZfcnRsIHtcbiAgICAgICAgICAgIHJpZ2h0OiAyZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJl9sdHIge1xuICAgICAgICAgICAgbGVmdDogMmVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICZfdHRiIHtcbiAgICAgICAgICAgIHRvcDogMmVtO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICZfYnR0IHtcbiAgICAgICAgICAgIGJvdHRvbTogMmVtO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfYXV0byB7XG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICAmX3J0bCxcbiAgICAgICZfbHRyIHtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfZnVsbCB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuIiwiLyoqXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxuICovXG5AaW1wb3J0ICcuL2NvbG9ycyc7XG5cbi8qID09PT09PSDpmLTlvbHmoLflvI/orr7nva7lh73mlbAgPT09PT09ICovXG4uc2hhZG93KEBvZmZzZXQ6IDAgMCA2cHggMXB4LCBAY29sb3I6IEBwcmltYXJ5X2JvcmRlcl9jb2xvcikge1xuICBib3gtc2hhZG93OiBAb2Zmc2V0IEBjb2xvcjtcbn1cblxuLnNoYWRvd19yZWd1bGFyKEBjb2xvcjogQHByaW1hcnlfYm9yZGVyX2NvbG9yKSB7XG4gIC5zaGFkb3coMCAwIDZweCAxcHgsIEBjb2xvcik7XG59XG5cbi5zaGFkb3dfbGFyZ2UoQGNvbG9yOiBAcHJpbWFyeV9ib3JkZXJfY29sb3IpIHtcbiAgLnNoYWRvdygwIDAgMTJweCAxcHgsIEBjb2xvcik7XG59XG5cbi5zaGFkb3dfbGlnaHRfcmVndWxhcigpIHtcbiAgLnNoYWRvd19yZWd1bGFyKCk7XG59XG5cbi5zaGFkb3dfbGlnaHRfbGFyZ2UoKSB7XG4gIC5zaGFkb3dfbGFyZ2UoKTtcbn1cblxuLnNoYWRvd19kYXJrX3JlZ3VsYXIoKSB7XG4gIC5zaGFkb3dfcmVndWxhcihAc2Vjb25kYXJ5X2JvcmRlcl9jb2xvcik7XG59XG5cbi5zaGFkb3dfZGFya19sYXJnZSgpIHtcbiAgLnNoYWRvd19sYXJnZShAc2Vjb25kYXJ5X2JvcmRlcl9jb2xvcik7XG59XG4iXX0= */ diff --git a/drawer.min.css b/drawer.min.css index ba2a48f0..c1151e80 100644 --- a/drawer.min.css +++ b/drawer.min.css @@ -1,2 +1,2 @@ .outline-drawer__title,.outline-drawer_ttb{border-bottom:1px solid #dcdfe6}:root{--outline-zIndex:2000;--outline-sticky-height:100%;--outline-chapters-width:100%}.outline-drawer{position:relative;z-index:-1;top:0;left:0;margin:0;width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;visibility:hidden;overflow:hidden}.outline-drawer__modal{-webkit-box-shadow:0 0 6px 1px #dcdfe6;box-shadow:0 0 6px 1px #dcdfe6;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:absolute;z-index:21;height:100%;background-color:#fff;-webkit-transition-duration:.4s;transition-duration:.4s;overflow:hidden}.outline-drawer__footer,.outline-drawer__header,.outline-drawer__main{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.outline-drawer__footer,.outline-drawer__header{-ms-flex-negative:0;flex-shrink:0}.outline-drawer__footer,.outline-drawer__main,.outline-drawer__title{padding:0 16px}.outline-drawer__header,.outline-drawer__title{position:relative;z-index:1;margin:0 auto;height:52px;line-height:52px;overflow:hidden}.outline-drawer__title{font-size:16px;font-weight:400;margin:0 16px;-webkit-box-sizing:border-box;box-sizing:border-box}.outline-drawer__close{position:absolute;z-index:2;top:50%;right:12px;width:20px;height:20px;line-height:20px;color:#999;font-size:20px;text-align:center;cursor:pointer;-webkit-transform:translateY(-50%);transform:translateY(-50%);overflow:hidden}.outline-drawer__close .outline-icon{position:absolute;z-index:2;top:0;left:0}.outline-drawer__close:hover{color:#666}.outline-drawer__main{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.outline-drawer__footer{margin:0 auto;text-align:right;overflow:hidden}.outline-drawer__overlay{content:'';position:relative;z-index:1;top:0;left:0;width:100%;height:100%;background-color:#fff;opacity:.1;overflow:hidden}.outline-drawer_ltr.outline-drawer_tiny,.outline-drawer_rtl.outline-drawer_tiny{width:280px}.outline-drawer_ltr.outline-drawer_mini,.outline-drawer_rtl.outline-drawer_mini{width:480px}.outline-drawer_ltr.outline-drawer_small,.outline-drawer_rtl.outline-drawer_small{width:540px}.outline-drawer_ltr.outline-drawer_regular,.outline-drawer_rtl.outline-drawer_regular{width:680px}.outline-drawer_ltr.outline-drawer_medium,.outline-drawer_rtl.outline-drawer_medium{width:720px}.outline-drawer_ltr.outline-drawer_large,.outline-drawer_rtl.outline-drawer_large{width:960px}.outline-drawer_rtl{border-left:1px solid #dcdfe6}.outline-drawer_rtl.outline-drawer_tiny.outline-drawer_closed{right:-290px}.outline-drawer_rtl.outline-drawer_mini.outline-drawer_closed{right:-490px}.outline-drawer_rtl.outline-drawer_small.outline-drawer_closed{right:-550px}.outline-drawer_rtl.outline-drawer_regular.outline-drawer_closed{right:-690px}.outline-drawer_rtl.outline-drawer_medium.outline-drawer_closed{right:-730px}.outline-drawer_rtl.outline-drawer_large.outline-drawer_closed{right:-970px}.outline-drawer_ltr{border-right:1px solid #dcdfe6}.outline-drawer_ltr.outline-drawer_tiny.outline-drawer_closed{left:-290px}.outline-drawer_ltr.outline-drawer_mini.outline-drawer_closed{left:-490px}.outline-drawer_ltr.outline-drawer_small.outline-drawer_closed{left:-550px}.outline-drawer_ltr.outline-drawer_regular.outline-drawer_closed{left:-690px}.outline-drawer_ltr.outline-drawer_medium.outline-drawer_closed{left:-730px}.outline-drawer_ltr.outline-drawer_large.outline-drawer_closed{left:-970px}.outline-drawer_btt,.outline-drawer_ttb{left:0;width:100%}.outline-drawer_btt.outline-drawer_tiny,.outline-drawer_ttb.outline-drawer_tiny{height:240px}.outline-drawer_btt.outline-drawer_mini,.outline-drawer_ttb.outline-drawer_mini{height:320px}.outline-drawer_btt.outline-drawer_small,.outline-drawer_ttb.outline-drawer_small{height:360px}.outline-drawer_btt.outline-drawer_regular,.outline-drawer_ttb.outline-drawer_regular{height:400px}.outline-drawer_btt.outline-drawer_medium,.outline-drawer_ttb.outline-drawer_medium{height:440px}.outline-drawer_btt.outline-drawer_large,.outline-drawer_ttb.outline-drawer_large{height:480px}.outline-drawer_ttb.outline-drawer_tiny.outline-drawer_closed{top:-250px}.outline-drawer_ttb.outline-drawer_mini.outline-drawer_closed{top:-330px}.outline-drawer_ttb.outline-drawer_small.outline-drawer_closed{top:-370px}.outline-drawer_ttb.outline-drawer_regular.outline-drawer_closed{top:-410px}.outline-drawer_ttb.outline-drawer_medium.outline-drawer_closed{top:-450px}.outline-drawer_ttb.outline-drawer_large.outline-drawer_closed{top:-490px}.outline-drawer_btt{top:initial;border-top:1px solid #dcdfe6}.outline-drawer_btt.outline-drawer_tiny.outline-drawer_closed{bottom:-250px}.outline-drawer_btt.outline-drawer_mini.outline-drawer_closed{bottom:-330px}.outline-drawer_btt.outline-drawer_small.outline-drawer_closed{bottom:-370px}.outline-drawer_btt.outline-drawer_regular.outline-drawer_closed{bottom:-410px}.outline-drawer_btt.outline-drawer_medium.outline-drawer_closed{bottom:-450px}.outline-drawer_btt.outline-drawer_large.outline-drawer_closed{bottom:-490px}.outline-drawer_opened{visibility:visible;z-index:var(--outline-zIndex)}.outline-drawer_opened.outline-drawer{position:fixed}.outline-drawer_opened.outline-drawer_rtl{right:0}.outline-drawer_opened.outline-drawer_ltr{left:0}.outline-drawer_opened.outline-drawer_ttb{top:0}.outline-drawer_opened.outline-drawer_btt{bottom:0}.outline-drawer_offset.outline-drawer_ltr,.outline-drawer_offset.outline-drawer_rtl{height:calc(100% - 4em);top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.outline-drawer_offset.outline-drawer_btt,.outline-drawer_offset.outline-drawer_ttb{width:calc(100% - 4em);left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.outline-drawer_offset.outline-drawer_opened.outline-drawer_rtl{right:2em}.outline-drawer_offset.outline-drawer_opened.outline-drawer_ltr{left:2em}.outline-drawer_offset.outline-drawer_opened.outline-drawer_ttb{top:2em}.outline-drawer_offset.outline-drawer_opened.outline-drawer_btt{bottom:2em}.outline-drawer_auto.outline-drawer_ltr,.outline-drawer_auto.outline-drawer_rtl{height:auto;max-height:calc(100% - 4em)}.outline-drawer_full{padding:0} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJkcmF3ZXIuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIjpyb290IHtcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcbn1cbi8qID09PT09PT09PT0gY29sb3JzLnRoZW1lIC0g5Z+656GA6aKc6Imy5Y+Y6YeP6ZuG5ZCIID09PT09PT09PT0gKi9cbi8qKlxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMjBcbiAqL1xuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cbi5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogLTE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19tb2RhbCB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjE7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlLFxuLm91dGxpbmUtZHJhd2VyX19tYWluLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDUycHg7XG4gIGxpbmUtaGVpZ2h0OiA1MnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXNpemU6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIC5vdXRsaW5lLWljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2U6aG92ZXIge1xuICBjb2xvcjogIzY2Njtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbWFpbiB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19vdmVybGF5IHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAwLjE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICB3aWR0aDogMjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21pbmkge1xuICB3aWR0aDogNDgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3NtYWxsLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9zbWFsbCB7XG4gIHdpZHRoOiA1NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIHdpZHRoOiA2ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICB3aWR0aDogNzIwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX2xhcmdlLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9sYXJnZSB7XG4gIHdpZHRoOiA5NjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTczMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTI5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC02OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yixcbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueSB7XG4gIGhlaWdodDogMjQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21pbmkge1xuICBoZWlnaHQ6IDMyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICBoZWlnaHQ6IDM2MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyIHtcbiAgaGVpZ2h0OiA0MDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICBoZWlnaHQ6IDQ0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICBoZWlnaHQ6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB0b3A6IGluaXRpYWw7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xuICB0b3A6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0ZW0pO1xuICBsZWZ0OiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIHJpZ2h0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBsZWZ0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl90dGIge1xuICB0b3A6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGJvdHRvbTogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfcnRsLFxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xufVxuLm91dGxpbmUtZHJhd2VyX2Z1bGwge1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGY4O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkluWmhjbWxoWW14bGN5NXNaWE56SWl3aUxpNHZMaTR2UEdsdWNIVjBJR056Y3lBelBpSXNJbVJ5WVhkbGNpNXNaWE56SWl3aWMyaGhaRzkzTG14bGMzTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUU3UlVGRFJTeDFRa0ZCUVR0RlFVTkJMRGhDUVVGQk8wVkJRMEVzSzBKQlFVRTdRME5EUkR0QlFVTkVMRzFFUVVGdFJEdEJRVU51UkRzN096czdSMEZMUnp0QlFVTklMRFJDUVVFMFFqdEJRMUkxUWp0RlFVTkZMRzFDUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEU5QlFVRTdSVUZEUVN4UlFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNLMEpCUVVFN1ZVRkJRU3gxUWtGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UTBSVlJEdEJRMUpETzBWRFRrRXNkME5CUVVFN1ZVRkJRU3huUTBGQlFUdEZSRkZGTEhGQ1FVRkJPMFZCUVVFc2NVSkJRVUU3UlVGQlFTeGpRVUZCTzBWQlEwRXNOa0pCUVVFN1JVRkJRU3c0UWtGQlFUdE5RVUZCTERKQ1FVRkJPMVZCUVVFc2RVSkJRVUU3UlVGRFFTeHpRa0ZCUVR0TlFVRkJMR3RDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4WlFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxIVkNRVUZCTzBWQlEwRXNhME5CUVVFN1ZVRkJRU3d3UWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5FVlVnN1FVTlFRenM3TzBWQlIwVXNXVUZCUVR0RlFVTkJMQ3RDUVVGQk8xVkJRVUVzZFVKQlFVRTdRMFJUU0R0QlEwNURPenRGUVVWRkxIRkNRVUZCTzAxQlFVRXNaVUZCUVR0RFJGRklPMEZEVEVNN096dEZRVWRGTEdkQ1FVRkJPME5FVDBnN1FVTktRenM3UlVGRlJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hsUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEd0Q1FVRkJPMFZCUTBFc2FVSkJRVUU3UTBSTlNEdEJRMGhETzBWQlEwVXNaMEpCUVVFN1JVRkRRU3hwUWtGQlFUdEZRVU5CTEdWQlFVRTdSVUZEUVN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWQlEwRXNhVU5CUVVFN1EwUkxTRHRCUTBaRE8wVkJRMFVzYlVKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1UwRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2JVSkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMRzlEUVVGQk8xVkJRVUVzTkVKQlFVRTdSVUZEUVN4cFFrRkJRVHREUkVsSU8wRkRha0pETzBWQlowSkpMRzFDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEU5QlFVRTdSVUZEUVN4UlFVRkJPME5FU1V3N1FVTkVSenRGUVVORkxGbEJRVUU3UTBSSFREdEJRME5ETzBWQlEwVXNiMEpCUVVFN1RVRkJRU3haUVVGQk8xVkJRVUVzVVVGQlFUdEZRVU5CTEdWQlFVRTdRMFJEU0R0QlEwVkRPMFZCUTBVc1pVRkJRVHRGUVVOQkxHdENRVUZCTzBWQlEwRXNhVUpCUVVFN1EwUkJTRHRCUTBkRE8wVkJRMFVzV1VGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxFOUJRVUU3UlVGRFFTeFJRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3gxUWtGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4cFFrRkJRVHREUkVSSU8wRkRUMHM3TzBWQlEwVXNZVUZCUVR0RFJFcFFPMEZEVDBzN08wVkJRMFVzWVVGQlFUdERSRXBRTzBGRFQwczdPMFZCUTBVc1lVRkJRVHREUkVwUU8wRkRUMHM3TzBWQlEwVXNZVUZCUVR0RFJFcFFPMEZEVDBzN08wVkJRMFVzWVVGQlFUdERSRXBRTzBGRFQwczdPMFZCUTBVc1lVRkJRVHREUkVwUU8wRkRVME03UlVGRFJTd3JRa0ZCUVR0RFJGQklPMEZEVjA4N1JVRkRSU3hqUVVGQk8wTkVWRlE3UVVOalR6dEZRVU5GTEdOQlFVRTdRMFJhVkR0QlEybENUenRGUVVORkxHTkJRVUU3UTBSbVZEdEJRMjlDVHp0RlFVTkZMR05CUVVFN1EwUnNRbFE3UVVOMVFrODdSVUZEUlN4alFVRkJPME5FY2tKVU8wRkRNRUpQTzBWQlEwVXNZMEZCUVR0RFJIaENWRHRCUXpoQ1F6dEZRVU5GTEdkRFFVRkJPME5FTlVKSU8wRkRaME5QTzBWQlEwVXNZVUZCUVR0RFJEbENWRHRCUTIxRFR6dEZRVU5GTEdGQlFVRTdRMFJxUTFRN1FVTnpRMDg3UlVGRFJTeGhRVUZCTzBORWNFTlVPMEZEZVVOUE8wVkJRMFVzWVVGQlFUdERSSFpEVkR0QlF6UkRUenRGUVVORkxHRkJRVUU3UTBReFExUTdRVU1yUTA4N1JVRkRSU3hoUVVGQk8wTkVOME5VTzBGRGJVUkRPenRGUVVWRkxGRkJRVUU3UlVGRFFTeFpRVUZCTzBORWFrUklPMEZEYjBSTE96dEZRVU5GTEdOQlFVRTdRMFJxUkZBN1FVTnZSRXM3TzBWQlEwVXNZMEZCUVR0RFJHcEVVRHRCUTI5RVN6czdSVUZEUlN4alFVRkJPME5FYWtSUU8wRkRiMFJMT3p0RlFVTkZMR05CUVVFN1EwUnFSRkE3UVVOdlJFczdPMFZCUTBVc1kwRkJRVHREUkdwRVVEdEJRMjlFU3pzN1JVRkRSU3hqUVVGQk8wTkVha1JRTzBGRGMwUkRPMFZCUTBVc2FVTkJRVUU3UTBSd1JFZzdRVU4zUkU4N1JVRkRSU3haUVVGQk8wTkVkRVJVTzBGRE1rUlBPMFZCUTBVc1dVRkJRVHREUkhwRVZEdEJRemhFVHp0RlFVTkZMRmxCUVVFN1EwUTFSRlE3UVVOcFJVODdSVUZEUlN4WlFVRkJPME5FTDBSVU8wRkRiMFZQTzBWQlEwVXNXVUZCUVR0RFJHeEZWRHRCUTNWRlR6dEZRVU5GTEZsQlFVRTdRMFJ5UlZRN1FVTXlSVU03UlVGRFJTeGhRVUZCTzBWQlEwRXNPRUpCUVVFN1EwUjZSVWc3UVVNMlJVODdSVUZEUlN4bFFVRkJPME5FTTBWVU8wRkRaMFpQTzBWQlEwVXNaVUZCUVR0RFJEbEZWRHRCUTIxR1R6dEZRVU5GTEdWQlFVRTdRMFJxUmxRN1FVTnpSazg3UlVGRFJTeGxRVUZCTzBORWNFWlVPMEZEZVVaUE8wVkJRMFVzWlVGQlFUdERSSFpHVkR0QlF6UkdUenRGUVVORkxHVkJRVUU3UTBReFJsUTdRVU5uUjBNN1JVRkRSU3h2UWtGQlFUdEZRVU5CTEN0Q1FVRkJPME5FT1VaSU8wRkRaMGRITzBWQlEwVXNaMEpCUVVFN1EwUTVSa3c3UVVOblIwczdSVUZEUlN4VFFVRkJPME5FT1VaUU8wRkRhVWRMTzBWQlEwVXNVVUZCUVR0RFJDOUdVRHRCUTJ0SFN6dEZRVU5GTEU5QlFVRTdRMFJvUjFBN1FVTnRSMHM3UlVGRFJTeFZRVUZCTzBORWFrZFFPMEZEZDBkTE96dEZRVVZGTEhsQ1FVRkJPMFZCUTBFc1UwRkJRVHRGUVVOQkxHOURRVUZCTzFWQlFVRXNORUpCUVVFN1EwUjBSMUE3UVVONVIwczdPMFZCUlVVc2QwSkJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNiME5CUVVFN1ZVRkJRU3cwUWtGQlFUdERSSFpIVUR0QlF6UkhVenRGUVVORkxGZEJRVUU3UTBReFIxZzdRVU0yUjFNN1JVRkRSU3hWUVVGQk8wTkVNMGRZTzBGRE9FZFRPMFZCUTBVc1UwRkJRVHREUkRWSFdEdEJReXRIVXp0RlFVTkZMRmxCUVVFN1EwUTNSMWc3UVVOelNFczdPMFZCUlVVc1lVRkJRVHRGUVVOQkxEWkNRVUZCTzBORWNFaFFPMEZEZVVoRE8wVkJRMFVzVjBGQlFUdERSSFpJU0NJc0ltWnBiR1VpT2lKa2NtRjNaWEl1WTNOeklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lPbkp2YjNRZ2UxeHlYRzRnSUMwdGIzVjBiR2x1WlMxNlNXNWtaWGc2SURJd01EQTdYSEpjYmlBZ0xTMXZkWFJzYVc1bExYTjBhV05yZVMxb1pXbG5hSFE2SURFd01DVTdYSEpjYmlBZ0xTMXZkWFJzYVc1bExXTm9ZWEIwWlhKekxYZHBaSFJvT2lBeE1EQWxPMXh5WEc1OVhISmNiaUlzSWpweWIyOTBJSHRjYmlBZ0xTMXZkWFJzYVc1bExYcEpibVJsZURvZ01qQXdNRHRjYmlBZ0xTMXZkWFJzYVc1bExYTjBhV05yZVMxb1pXbG5hSFE2SURFd01DVTdYRzRnSUMwdGIzVjBiR2x1WlMxamFHRndkR1Z5Y3kxM2FXUjBhRG9nTVRBd0pUdGNibjFjYmk4cUlEMDlQVDA5UFQwOVBUMGdZMjlzYjNKekxuUm9aVzFsSUMwZzVaKzY1NkdBNmFLYzZJbXk1WStZNlllUDZadUc1WkNJSUQwOVBUMDlQVDA5UFQwZ0tpOWNiaThxS2x4dUlDb2djMmhoWkc5M0xteGxjM01nTFNEcG1MVGx2Ykhtb0xmbHZJL29ycjdudmE0Z2JXbDRhVzU0SU9XSHZlYVZzRnh1SUNvZ1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUlDb2dRM0psWVhSbFpDQkNlVG9nV1dGdmFHRnBlR2xoYjF4dUlDb2dWWEJrWVhSbE9pQXlNREl5TGpNdU1qQmNiaUFxTDF4dUx5b2dQVDA5UFQwOUlPbVl0T1c5c2VhZ3QrVzhqK2l1dnVlOXJ1V0h2ZWFWc0NBOVBUMDlQVDBnS2k5Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2VpMXBibVJsZURvZ0xURTdYRzRnSUhSdmNEb2dNRHRjYmlBZ2JHVm1kRG9nTUR0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1SUNCM2FXUjBhRG9nTVRBd0pUdGNiaUFnYUdWcFoyaDBPaUF4TURBbE8xeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0IyYVhOcFltbHNhWFI1T2lCb2FXUmtaVzQ3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMjF2WkdGc0lIdGNiaUFnWW05NExYTm9ZV1J2ZHpvZ01DQXdJRFp3ZUNBeGNIZ2dJMlJqWkdabE5qdGNiaUFnWkdsemNHeGhlVG9nWm14bGVEdGNiaUFnWm14bGVDMWthWEpsWTNScGIyNDZJR052YkhWdGJqdGNiaUFnWm14bGVDMTNjbUZ3T2lCdWIzZHlZWEE3WEc0Z0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnZWkxcGJtUmxlRG9nTWpFN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWmp0Y2JpQWdkSEpoYm5OcGRHbHZiaTFrZFhKaGRHbHZiam9nTUM0MGN6dGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmFHVmhaR1Z5TEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5dFlXbHVMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTltYjI5MFpYSWdlMXh1SUNCM2FXUjBhRG9nTVRBd0pUdGNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmYUdWaFpHVnlMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTltYjI5MFpYSWdlMXh1SUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmRHbDBiR1VzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDIxaGFXNHNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMlp2YjNSbGNpQjdYRzRnSUhCaFpHUnBibWM2SURBZ01UWndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmFHVmhaR1Z5TEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5MGFYUnNaU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnZWkxcGJtUmxlRG9nTVR0Y2JpQWdiV0Z5WjJsdU9pQXdJR0YxZEc4N1hHNGdJR2hsYVdkb2REb2dOVEp3ZUR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURVeWNIZzdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgzUnBkR3hsSUh0Y2JpQWdabTl1ZEMxemFYcGxPaUF4Tm5CNE8xeHVJQ0JtYjI1MExYZGxhV2RvZERvZ05EQXdPMXh1SUNCdFlYSm5hVzQ2SURBZ01UWndlRHRjYmlBZ1ltOTRMWE5wZW1sdVp6b2dZbTl5WkdWeUxXSnZlRHRjYmlBZ1ltOXlaR1Z5TFdKdmRIUnZiVG9nTVhCNElITnZiR2xrSUNOa1kyUm1aVFk3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyTnNiM05sSUh0Y2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0IwYjNBNklEVXdKVHRjYmlBZ2NtbG5hSFE2SURFeWNIZzdYRzRnSUhkcFpIUm9PaUF5TUhCNE8xeHVJQ0JvWldsbmFIUTZJREl3Y0hnN1hHNGdJR3hwYm1VdGFHVnBaMmgwT2lBeU1IQjRPMXh1SUNCamIyeHZjam9nSXprNU9UdGNiaUFnWm05dWRDMXphWHBsT2lBeU1IQjRPMXh1SUNCMFpYaDBMV0ZzYVdkdU9pQmpaVzUwWlhJN1hHNGdJR04xY25OdmNqb2djRzlwYm5SbGNqdGNiaUFnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWktDMDFNQ1VwTzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTlqYkc5elpTQXViM1YwYkdsdVpTMXBZMjl1SUh0Y2JpQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0IwYjNBNklEQTdYRzRnSUd4bFpuUTZJREE3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyTnNiM05sT21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNMk5qWTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDIxaGFXNGdlMXh1SUNCbWJHVjRPaUF4TzF4dUlDQnZkbVZ5Wm14dmR6b2dZWFYwYnp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZabTl2ZEdWeUlIdGNiaUFnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUhSbGVIUXRZV3hwWjI0NklISnBaMmgwTzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTl2ZG1WeWJHRjVJSHRjYmlBZ1kyOXVkR1Z1ZERvZ0p5YzdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ2RHOXdPaUF3TzF4dUlDQnNaV1owT2lBd08xeHVJQ0IzYVdSMGFEb2dNVEF3SlR0Y2JpQWdhR1ZwWjJoME9pQXhNREFsTzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpabVptTzF4dUlDQnZjR0ZqYVhSNU9pQXdMakU3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTG05MWRHeHBibVV0WkhKaGQyVnlYM1JwYm5rc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUnBibmtnZTF4dUlDQjNhV1IwYURvZ01qZ3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMXBibWtzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDIxcGJta2dlMXh1SUNCM2FXUjBhRG9nTkRnd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0xtOTFkR3hwYm1VdFpISmhkMlZ5WDNOdFlXeHNMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMngwY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDl6YldGc2JDQjdYRzRnSUhkcFpIUm9PaUExTkRCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl5ZEd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmY21WbmRXeGhjaXhjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmY21WbmRXeGhjaUI3WEc0Z0lIZHBaSFJvT2lBMk9EQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZmJXVmthWFZ0TEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5dFpXUnBkVzBnZTF4dUlDQjNhV1IwYURvZ056SXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeGhjbWRsTEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5c1lYSm5aU0I3WEc0Z0lIZHBaSFJvT2lBNU5qQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd2dlMXh1SUNCaWIzSmtaWEl0YkdWbWREb2dNWEI0SUhOdmJHbGtJQ05rWTJSbVpUWTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0xtOTFkR3hwYm1VdFpISmhkMlZ5WDNScGJua3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdjbWxuYUhRNklDMHlPVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3d1YjNWMGJHbHVaUzFrY21GM1pYSmZiV2x1YVM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCeWFXZG9kRG9nTFRRNU1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDNXZkWFJzYVc1bExXUnlZWGRsY2w5emJXRnNiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0J5YVdkb2REb2dMVFUxTUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkM1dmRYUnNhVzVsTFdSeVlYZGxjbDl5WldkMWJHRnlMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSEpwWjJoME9pQXROamt3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTG05MWRHeHBibVV0WkhKaGQyVnlYMjFsWkdsMWJTNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQnlhV2RvZERvZ0xUY3pNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNZWEpuWlM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCeWFXZG9kRG9nTFRrM01IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpQjdYRzRnSUdKdmNtUmxjaTF5YVdkb2REb2dNWEI0SUhOdmJHbGtJQ05rWTJSbVpUWTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNScGJua3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdiR1ZtZERvZ0xUSTVNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRhVzVwTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUd4bFpuUTZJQzAwT1RCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYzIxaGJHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdiR1ZtZERvZ0xUVTFNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlaV2QxYkdGeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lHeGxablE2SUMwMk9UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISXViM1YwYkdsdVpTMWtjbUYzWlhKZmJXVmthWFZ0TG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUd4bFpuUTZJQzAzTXpCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYkdGeVoyVXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdiR1ZtZERvZ0xUazNNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaXhjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRZ2UxeHVJQ0JzWldaME9pQXdPMXh1SUNCM2FXUjBhRG9nTVRBd0pUdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJdWIzVjBiR2x1WlMxa2NtRjNaWEpmZEdsdWVTeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZkR2x1ZVNCN1hHNGdJR2hsYVdkb2REb2dNalF3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpTG05MWRHeHBibVV0WkhKaGQyVnlYMjFwYm1rc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMXBibWtnZTF4dUlDQm9aV2xuYUhRNklETXlNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXpiV0ZzYkN4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5aWRIUXViM1YwYkdsdVpTMWtjbUYzWlhKZmMyMWhiR3dnZTF4dUlDQm9aV2xuYUhRNklETTJNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlaV2QxYkdGeUxGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlaV2QxYkdGeUlIdGNiaUFnYUdWcFoyaDBPaUEwTURCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYldWa2FYVnRMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMkowZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDl0WldScGRXMGdlMXh1SUNCb1pXbG5hSFE2SURRME1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNSMFlpNXZkWFJzYVc1bExXUnlZWGRsY2w5c1lYSm5aU3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRdWIzVjBiR2x1WlMxa2NtRjNaWEpmYkdGeVoyVWdlMXh1SUNCb1pXbG5hSFE2SURRNE1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNSMFlpQjdYRzRnSUdKdmNtUmxjaTFpYjNSMGIyMDZJREZ3ZUNCemIyeHBaQ0FqWkdOa1ptVTJPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNSMFlpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGFXNTVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSFJ2Y0RvZ0xUSTFNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRhVzVwTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUhSdmNEb2dMVE16TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM1IwWWk1dmRYUnNhVzVsTFdSeVlYZGxjbDl6YldGc2JDNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQjBiM0E2SUMwek56QndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXViM1YwYkdsdVpTMWtjbUYzWlhKZmNtVm5kV3hoY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCMGIzQTZJQzAwTVRCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYldWa2FYVnRMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSFJ2Y0RvZ0xUUTFNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNZWEpuWlM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCMGIzQTZJQzAwT1RCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRZ2UxeHVJQ0IwYjNBNklHbHVhWFJwWVd3N1hHNGdJR0p2Y21SbGNpMTBiM0E2SURGd2VDQnpiMnhwWkNBalpHTmtabVUyTzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBhVzU1TG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUdKdmRIUnZiVG9nTFRJMU1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJKMGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5dGFXNXBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJR0p2ZEhSdmJUb2dMVE16TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMkowZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDl6YldGc2JDNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQmliM1IwYjIwNklDMHpOekJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZjbVZuZFd4aGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQmliM1IwYjIwNklDMDBNVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZiV1ZrYVhWdExtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lHSnZkSFJ2YlRvZ0xUUTFNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNZWEpuWlM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCaWIzUjBiMjA2SUMwME9UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5dmNHVnVaV1FnZTF4dUlDQjJhWE5wWW1sc2FYUjVPaUIyYVhOcFlteGxPMXh1SUNCNkxXbHVaR1Y0T2lCMllYSW9MUzF2ZFhSc2FXNWxMWHBKYm1SbGVDazdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjNCbGJtVmtMbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNiaUFnY0c5emFYUnBiMjQ2SUdacGVHVmtPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3dnZTF4dUlDQnlhV2RvZERvZ01EdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Y0dWdVpXUXViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlJSHRjYmlBZ2JHVm1kRG9nTUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXZjR1Z1WldRdWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUlIdGNiaUFnZEc5d09pQXdPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFFnZTF4dUlDQmliM1IwYjIwNklEQTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjJabWMyVjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQ3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Wm1aelpYUXViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlJSHRjYmlBZ2FHVnBaMmgwT2lCallXeGpLREV3TUNVZ0xTQTBaVzBwTzF4dUlDQjBiM0E2SURVd0pUdGNiaUFnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWktDMDFNQ1VwTzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOW1abk5sZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmIyWm1jMlYwTG05MWRHeHBibVV0WkhKaGQyVnlYMkowZENCN1hHNGdJSGRwWkhSb09pQmpZV3hqS0RFd01DVWdMU0EwWlcwcE8xeHVJQ0JzWldaME9pQTFNQ1U3WEc0Z0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxXQ2d0TlRBbEtUdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Wm1aelpYUXViM1YwYkdsdVpTMWtjbUYzWlhKZmIzQmxibVZrTG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkNCN1hHNGdJSEpwWjJoME9pQXlaVzA3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmIyWm1jMlYwTG05MWRHeHBibVV0WkhKaGQyVnlYMjl3Wlc1bFpDNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISWdlMXh1SUNCc1pXWjBPaUF5WlcwN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiMlptYzJWMExtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0lnZTF4dUlDQjBiM0E2SURKbGJUdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Wm1aelpYUXViM1YwYkdsdVpTMWtjbUYzWlhKZmIzQmxibVZrTG05MWRHeHBibVV0WkhKaGQyVnlYMkowZENCN1hHNGdJR0p2ZEhSdmJUb2dNbVZ0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyRjFkRzh1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJGMWRHOHViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlJSHRjYmlBZ2FHVnBaMmgwT2lCaGRYUnZPMXh1SUNCdFlYZ3RhR1ZwWjJoME9pQmpZV3hqS0RFd01DVWdMU0EwWlcwcE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMloxYkd3Z2UxeHVJQ0J3WVdSa2FXNW5PaUF3TzF4dWZWeHVJaXdpUUdsdGNHOXlkQ0FuTGk5MllYSnBZV0pzWlhNbk8xeHlYRzVBYVcxd2IzSjBJQ2N1TDJOdmJHOXljeWM3WEhKY2JrQnBiWEJ2Y25RZ0p5NHZjMmhoWkc5M0p6dGNjbHh1WEhKY2JpNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hISmNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4eVhHNGdJSG90YVc1a1pYZzZJQzB4TzF4eVhHNGdJSFJ2Y0RvZ01EdGNjbHh1SUNCc1pXWjBPaUF3TzF4eVhHNGdJRzFoY21kcGJqb2dNRHRjY2x4dUlDQjNhV1IwYURvZ01UQXdKVHRjY2x4dUlDQm9aV2xuYUhRNklERXdNQ1U3WEhKY2JpQWdZbTk0TFhOcGVtbHVaem9nWW05eVpHVnlMV0p2ZUR0Y2NseHVJQ0IyYVhOcFltbHNhWFI1T2lCb2FXUmtaVzQ3WEhKY2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNjbHh1WEhKY2JpQWdKbDlmYlc5a1lXd2dlMXh5WEc0Z0lDQWdMbk5vWVdSdmQxOXNhV2RvZEY5eVpXZDFiR0Z5S0NrN1hISmNiaUFnSUNCa2FYTndiR0Y1T2lCbWJHVjRPMXh5WEc0Z0lDQWdabXhsZUMxa2FYSmxZM1JwYjI0NklHTnZiSFZ0Ymp0Y2NseHVJQ0FnSUdac1pYZ3RkM0poY0RvZ2JtOTNjbUZ3TzF4eVhHNGdJQ0FnY0c5emFYUnBiMjQ2SUdGaWMyOXNkWFJsTzF4eVhHNGdJQ0FnZWkxcGJtUmxlRG9nTWpFN1hISmNiaUFnSUNCb1pXbG5hSFE2SURFd01DVTdYSEpjYmlBZ0lDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQkFkMmhwZEdVN1hISmNiaUFnSUNCMGNtRnVjMmwwYVc5dUxXUjFjbUYwYVc5dU9pQXdMalJ6TzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDJobFlXUmxjaXhjY2x4dUlDQW1YMTl0WVdsdUxGeHlYRzRnSUNaZlgyWnZiM1JsY2lCN1hISmNiaUFnSUNCM2FXUjBhRG9nTVRBd0pUdGNjbHh1SUNBZ0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5b1pXRmtaWElzWEhKY2JpQWdKbDlmWm05dmRHVnlJSHRjY2x4dUlDQWdJR1pzWlhndGMyaHlhVzVyT2lBd08xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZkR2wwYkdVc1hISmNiaUFnSmw5ZmJXRnBiaXhjY2x4dUlDQW1YMTltYjI5MFpYSWdlMXh5WEc0Z0lDQWdjR0ZrWkdsdVp6b2dNQ0F4Tm5CNE8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZhR1ZoWkdWeUxGeHlYRzRnSUNaZlgzUnBkR3hsSUh0Y2NseHVJQ0FnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2NseHVJQ0FnSUhvdGFXNWtaWGc2SURFN1hISmNiaUFnSUNCdFlYSm5hVzQ2SURBZ1lYVjBienRjY2x4dUlDQWdJR2hsYVdkb2REb2dOVEp3ZUR0Y2NseHVJQ0FnSUd4cGJtVXRhR1ZwWjJoME9pQTFNbkI0TzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDNScGRHeGxJSHRjY2x4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVRad2VEdGNjbHh1SUNBZ0lHWnZiblF0ZDJWcFoyaDBPaUEwTURBN1hISmNiaUFnSUNCdFlYSm5hVzQ2SURBZ01UWndlRHRjY2x4dUlDQWdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hISmNiaUFnSUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eU8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZZMnh2YzJVZ2UxeHlYRzRnSUNBZ2NHOXphWFJwYjI0NklHRmljMjlzZFhSbE8xeHlYRzRnSUNBZ2VpMXBibVJsZURvZ01qdGNjbHh1SUNBZ0lIUnZjRG9nTlRBbE8xeHlYRzRnSUNBZ2NtbG5hSFE2SURFeWNIZzdYSEpjYmlBZ0lDQjNhV1IwYURvZ01qQndlRHRjY2x4dUlDQWdJR2hsYVdkb2REb2dNakJ3ZUR0Y2NseHVJQ0FnSUd4cGJtVXRhR1ZwWjJoME9pQXlNSEI0TzF4eVhHNGdJQ0FnWTI5c2IzSTZJRUJtYjNWeWRHaGZkR1Y0ZEY5amIyeHZjanRjY2x4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTWpCd2VEdGNjbHh1SUNBZ0lIUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdGNjbHh1SUNBZ0lHTjFjbk52Y2pvZ2NHOXBiblJsY2p0Y2NseHVJQ0FnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JseHlYRzRnSUNBZ0xtOTFkR3hwYm1VdGFXTnZiaUI3WEhKY2JpQWdJQ0FnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2NseHVJQ0FnSUNBZ2VpMXBibVJsZURvZ01qdGNjbHh1SUNBZ0lDQWdkRzl3T2lBd08xeHlYRzRnSUNBZ0lDQnNaV1owT2lBd08xeHlYRzRnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ1k2YUc5MlpYSWdlMXh5WEc0Z0lDQWdJQ0JqYjJ4dmNqb2dRSFJvYVhKa1gzUmxlSFJmWTI5c2IzSTdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTl0WVdsdUlIdGNjbHh1SUNBZ0lHWnNaWGc2SURFN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWDJadmIzUmxjaUI3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNjbHh1SUNBZ0lIUmxlSFF0WVd4cFoyNDZJSEpwWjJoME8xeHlYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgyOTJaWEpzWVhrZ2UxeHlYRzRnSUNBZ1kyOXVkR1Z1ZERvZ0p5YzdYSEpjYmlBZ0lDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYSEpjYmlBZ0lDQjZMV2x1WkdWNE9pQXhPMXh5WEc0Z0lDQWdkRzl3T2lBd08xeHlYRzRnSUNBZ2JHVm1kRG9nTUR0Y2NseHVJQ0FnSUhkcFpIUm9PaUF4TURBbE8xeHlYRzRnSUNBZ2FHVnBaMmgwT2lBeE1EQWxPMXh5WEc0Z0lDQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dRSGRvYVhSbE8xeHlYRzRnSUNBZ2IzQmhZMmwwZVRvZ01DNHhPMXh5WEc0Z0lDQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZjblJzTEZ4eVhHNGdJQ1pmYkhSeUlIdGNjbHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHlYRzRnSUNBZ0lDQW1YM1JwYm5rZ2UxeHlYRzRnSUNBZ0lDQWdJSGRwWkhSb09pQXlPREJ3ZUR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5dGFXNXBJSHRjY2x4dUlDQWdJQ0FnSUNCM2FXUjBhRG9nTkRnd2NIZzdYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZjMjFoYkd3Z2UxeHlYRzRnSUNBZ0lDQWdJSGRwWkhSb09pQTFOREJ3ZUR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5eVpXZDFiR0Z5SUh0Y2NseHVJQ0FnSUNBZ0lDQjNhV1IwYURvZ05qZ3djSGc3WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYldWa2FYVnRJSHRjY2x4dUlDQWdJQ0FnSUNCM2FXUjBhRG9nTnpJd2NIZzdYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZiR0Z5WjJVZ2UxeHlYRzRnSUNBZ0lDQWdJSGRwWkhSb09pQTVOakJ3ZUR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOXlkR3dnZTF4eVhHNGdJQ0FnWW05eVpHVnlMV3hsWm5RNklERndlQ0J6YjJ4cFpDQkFjSEpwYldGeWVWOWliM0prWlhKZlkyOXNiM0k3WEhKY2JseHlYRzRnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hISmNiaUFnSUNBZ0lDWmZkR2x1ZVNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnY21sbmFIUTZJQzB5T1RCd2VEdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYldsdWFTQjdYSEpjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ2NtbG5hSFE2SUMwME9UQndlRHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmMyMWhiR3dnZTF4eVhHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJSEpwWjJoME9pQXROVFV3Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YM0psWjNWc1lYSWdlMXh5WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lISnBaMmgwT2lBdE5qa3djSGc3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgyMWxaR2wxYlNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnY21sbmFIUTZJQzAzTXpCd2VEdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYkdGeVoyVWdlMXh5WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lISnBaMmgwT2lBdE9UY3djSGc3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMngwY2lCN1hISmNiaUFnSUNCaWIzSmtaWEl0Y21sbmFIUTZJREZ3ZUNCemIyeHBaQ0JBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJN1hISmNibHh5WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNpQjdYSEpjYmlBZ0lDQWdJQ1pmZEdsdWVTQjdYSEpjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ2JHVm1kRG9nTFRJNU1IQjRPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5dGFXNXBJSHRjY2x4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQnNaV1owT2lBdE5Ea3djSGc3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgzTnRZV3hzSUh0Y2NseHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hISmNiaUFnSUNBZ0lDQWdJQ0JzWldaME9pQXROVFV3Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YM0psWjNWc1lYSWdlMXh5WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lHeGxablE2SUMwMk9UQndlRHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmJXVmthWFZ0SUh0Y2NseHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hISmNiaUFnSUNBZ0lDQWdJQ0JzWldaME9pQXROek13Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMnhoY21kbElIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCc1pXWjBPaUF0T1Rjd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgzUjBZaXhjY2x4dUlDQW1YMkowZENCN1hISmNiaUFnSUNCc1pXWjBPaUF3TzF4eVhHNGdJQ0FnZDJsa2RHZzZJREV3TUNVN1hISmNibHh5WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNpQjdYSEpjYmlBZ0lDQWdJQ1pmZEdsdWVTQjdYSEpjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBPaUF5TkRCd2VEdGNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXRhVzVwSUh0Y2NseHVJQ0FnSUNBZ0lDQm9aV2xuYUhRNklETXlNSEI0TzF4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDNOdFlXeHNJSHRjY2x4dUlDQWdJQ0FnSUNCb1pXbG5hSFE2SURNMk1IQjRPMXh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YM0psWjNWc1lYSWdlMXh5WEc0Z0lDQWdJQ0FnSUdobGFXZG9kRG9nTkRBd2NIZzdYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZiV1ZrYVhWdElIdGNjbHh1SUNBZ0lDQWdJQ0JvWldsbmFIUTZJRFEwTUhCNE8xeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgyeGhjbWRsSUh0Y2NseHVJQ0FnSUNBZ0lDQm9aV2xuYUhRNklEUTRNSEI0TzF4eVhHNGdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgzUjBZaUI3WEhKY2JpQWdJQ0JpYjNKa1pYSXRZbTkwZEc5dE9pQXhjSGdnYzI5c2FXUWdRSEJ5YVcxaGNubGZZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNWNjbHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHlYRzRnSUNBZ0lDQW1YM1JwYm5rZ2UxeHlYRzRnSUNBZ0lDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUhSdmNEb2dMVEkxTUhCNE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDl0YVc1cElIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCMGIzQTZJQzB6TXpCd2VEdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYzIxaGJHd2dlMXh5WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lIUnZjRG9nTFRNM01IQjRPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5eVpXZDFiR0Z5SUh0Y2NseHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hISmNiaUFnSUNBZ0lDQWdJQ0IwYjNBNklDMDBNVEJ3ZUR0Y2NseHVJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZiV1ZrYVhWdElIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCMGIzQTZJQzAwTlRCd2VEdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYkdGeVoyVWdlMXh5WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lIUnZjRG9nTFRRNU1IQjRPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWlkSFFnZTF4eVhHNGdJQ0FnZEc5d09pQnBibWwwYVdGc08xeHlYRzRnSUNBZ1ltOXlaR1Z5TFhSdmNEb2dNWEI0SUhOdmJHbGtJRUJ3Y21sdFlYSjVYMkp2Y21SbGNsOWpiMnh2Y2p0Y2NseHVYSEpjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNjbHh1SUNBZ0lDQWdKbDkwYVc1NUlIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCaWIzUjBiMjA2SUMweU5UQndlRHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmJXbHVhU0I3WEhKY2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdZbTkwZEc5dE9pQXRNek13Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YM050WVd4c0lIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCaWIzUjBiMjA2SUMwek56QndlRHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmNtVm5kV3hoY2lCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnWW05MGRHOXRPaUF0TkRFd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDIxbFpHbDFiU0I3WEhKY2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdZbTkwZEc5dE9pQXRORFV3Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMnhoY21kbElIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCaWIzUjBiMjA2SUMwME9UQndlRHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lIMWNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZiM0JsYm1Wa0lIdGNjbHh1SUNBZ0lIWnBjMmxpYVd4cGRIazZJSFpwYzJsaWJHVTdYSEpjYmlBZ0lDQjZMV2x1WkdWNE9pQjJZWElvTFMxdmRYUnNhVzVsTFhwSmJtUmxlQ2s3WEhKY2JseHlYRzRnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hISmNiaUFnSUNBZ0lIQnZjMmwwYVc5dU9pQm1hWGhsWkR0Y2NseHVYSEpjYmlBZ0lDQWdJQ1pmY25Sc0lIdGNjbHh1SUNBZ0lDQWdJQ0J5YVdkb2REb2dNRHRjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDlzZEhJZ2UxeHlYRzRnSUNBZ0lDQWdJR3hsWm5RNklEQTdYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZkSFJpSUh0Y2NseHVJQ0FnSUNBZ0lDQjBiM0E2SURBN1hISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZlluUjBJSHRjY2x4dUlDQWdJQ0FnSUNCaWIzUjBiMjA2SURBN1hISmNiaUFnSUNBZ0lIMWNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZiMlptYzJWMElIdGNjbHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHlYRzRnSUNBZ0lDQW1YM0owYkN4Y2NseHVJQ0FnSUNBZ0psOXNkSElnZTF4eVhHNGdJQ0FnSUNBZ0lHaGxhV2RvZERvZ1kyRnNZeWd4TURBbElDMGdOR1Z0S1R0Y2NseHVJQ0FnSUNBZ0lDQjBiM0E2SURVd0pUdGNjbHh1SUNBZ0lDQWdJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZrb0xUVXdKU2s3WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmZEhSaUxGeHlYRzRnSUNBZ0lDQW1YMkowZENCN1hISmNiaUFnSUNBZ0lDQWdkMmxrZEdnNklHTmhiR01vTVRBd0pTQXRJRFJsYlNrN1hISmNiaUFnSUNBZ0lDQWdiR1ZtZERvZ05UQWxPMXh5WEc0Z0lDQWdJQ0FnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdDZ3ROVEFsS1R0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5dmNHVnVaV1FnZTF4eVhHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnSmw5eWRHd2dlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlhV2RvZERvZ01tVnRPMXh5WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSUNBZ0lDWmZiSFJ5SUh0Y2NseHVJQ0FnSUNBZ0lDQWdJQ0FnYkdWbWREb2dNbVZ0TzF4eVhHNGdJQ0FnSUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0lDQWdJQ1pmZEhSaUlIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNBZ2RHOXdPaUF5WlcwN1hISmNiaUFnSUNBZ0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQWdJQ0FnSmw5aWRIUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmliM1IwYjIwNklESmxiVHRjY2x4dUlDQWdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUgxY2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZllYVjBieUI3WEhKY2JpQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlJSHRjY2x4dUlDQWdJQ0FnSmw5eWRHd3NYSEpjYmlBZ0lDQWdJQ1pmYkhSeUlIdGNjbHh1SUNBZ0lDQWdJQ0JvWldsbmFIUTZJR0YxZEc4N1hISmNiaUFnSUNBZ0lDQWdiV0Y0TFdobGFXZG9kRG9nWTJGc1l5Z3hNREFsSUMwZ05HVnRLVHRjY2x4dUlDQWdJQ0FnZlZ4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5bWRXeHNJSHRjY2x4dUlDQWdJSEJoWkdScGJtYzZJREE3WEhKY2JpQWdmVnh5WEc1OVhISmNiaUlzSWk4cUtseHlYRzRnS2lCemFHRmtiM2N1YkdWemN5QXRJT21ZdE9XOXNlYWd0K1c4aitpdXZ1ZTlyaUJ0YVhocGJuZ2c1WWU5NXBXd1hISmNiaUFxSUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDFjY2x4dUlDb2dRM0psWVhSbFpDQkNlVG9nV1dGdmFHRnBlR2xoYjF4eVhHNGdLaUJWY0dSaGRHVTZJREl3TWpJdU15NHlNRnh5WEc0Z0tpOWNjbHh1UUdsdGNHOXlkQ0FuTGk5amIyeHZjbk1uTzF4eVhHNWNjbHh1THlvZ1BUMDlQVDA5SU9tWXRPVzlzZWFndCtXOGoraXV2dWU5cnVXSHZlYVZzQ0E5UFQwOVBUMGdLaTljY2x4dUxuTm9ZV1J2ZHloQWIyWm1jMlYwT2lBd0lEQWdObkI0SURGd2VDd2dRR052Ykc5eU9pQkFjSEpwYldGeWVWOWliM0prWlhKZlkyOXNiM0lwSUh0Y2NseHVJQ0JpYjNndGMyaGhaRzkzT2lCQWIyWm1jMlYwSUVCamIyeHZjanRjY2x4dWZWeHlYRzVjY2x4dUxuTm9ZV1J2ZDE5eVpXZDFiR0Z5S0VCamIyeHZjam9nUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eUtTQjdYSEpjYmlBZ0xuTm9ZV1J2ZHlnd0lEQWdObkI0SURGd2VDd2dRR052Ykc5eUtUdGNjbHh1ZlZ4eVhHNWNjbHh1TG5Ob1lXUnZkMTlzWVhKblpTaEFZMjlzYjNJNklFQndjbWx0WVhKNVgySnZjbVJsY2w5amIyeHZjaWtnZTF4eVhHNGdJQzV6YUdGa2IzY29NQ0F3SURFeWNIZ2dNWEI0TENCQVkyOXNiM0lwTzF4eVhHNTlYSEpjYmx4eVhHNHVjMmhoWkc5M1gyeHBaMmgwWDNKbFozVnNZWElvS1NCN1hISmNiaUFnTG5Ob1lXUnZkMTl5WldkMWJHRnlLQ2s3WEhKY2JuMWNjbHh1WEhKY2JpNXphR0ZrYjNkZmJHbG5hSFJmYkdGeVoyVW9LU0I3WEhKY2JpQWdMbk5vWVdSdmQxOXNZWEpuWlNncE8xeHlYRzU5WEhKY2JseHlYRzR1YzJoaFpHOTNYMlJoY210ZmNtVm5kV3hoY2lncElIdGNjbHh1SUNBdWMyaGhaRzkzWDNKbFozVnNZWElvUUhObFkyOXVaR0Z5ZVY5aWIzSmtaWEpmWTI5c2IzSXBPMXh5WEc1OVhISmNibHh5WEc0dWMyaGhaRzkzWDJSaGNtdGZiR0Z5WjJVb0tTQjdYSEpjYmlBZ0xuTm9ZV1J2ZDE5c1lYSm5aU2hBYzJWamIyNWtZWEo1WDJKdmNtUmxjbDlqYjJ4dmNpazdYSEpjYm4xY2NseHVJbDE5ICovXG4iXSwiZmlsZSI6ImRyYXdlci5taW4uY3NzIn0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJkcmF3ZXIuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIjpyb290IHtcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcbn1cbi8qID09PT09PT09PT0gY29sb3JzLnRoZW1lIC0g5Z+656GA6aKc6Imy5Y+Y6YeP6ZuG5ZCIID09PT09PT09PT0gKi9cbi8qKlxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMjBcbiAqL1xuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cbi5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogLTE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19tb2RhbCB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIC13ZWJraXQtYm94LWRpcmVjdGlvbjogbm9ybWFsO1xuICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgLW1zLWZsZXgtd3JhcDogbm93cmFwO1xuICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjE7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlLFxuLm91dGxpbmUtZHJhd2VyX19tYWluLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDUycHg7XG4gIGxpbmUtaGVpZ2h0OiA1MnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXNpemU6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIC5vdXRsaW5lLWljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2U6aG92ZXIge1xuICBjb2xvcjogIzY2Njtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbWFpbiB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19vdmVybGF5IHtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAwLjE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICB3aWR0aDogMjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21pbmkge1xuICB3aWR0aDogNDgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3NtYWxsLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9zbWFsbCB7XG4gIHdpZHRoOiA1NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIHdpZHRoOiA2ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICB3aWR0aDogNzIwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX2xhcmdlLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9sYXJnZSB7XG4gIHdpZHRoOiA5NjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTczMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTI5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTU1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC02OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTk3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yixcbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueSB7XG4gIGhlaWdodDogMjQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21pbmksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21pbmkge1xuICBoZWlnaHQ6IDMyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICBoZWlnaHQ6IDM2MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyIHtcbiAgaGVpZ2h0OiA0MDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ge1xuICBoZWlnaHQ6IDQ0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICBoZWlnaHQ6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB0b3A6IGluaXRpYWw7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTI1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTMzMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zNzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00MTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQ1MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQge1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xuICB0b3A6IDUwJTtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0ZW0pO1xuICBsZWZ0OiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIHJpZ2h0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBsZWZ0OiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl90dGIge1xuICB0b3A6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGJvdHRvbTogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfcnRsLFxuLm91dGxpbmUtZHJhd2VyX2F1dG8ub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA0ZW0pO1xufVxuLm91dGxpbmUtZHJhd2VyX2Z1bGwge1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGY4O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkluWmhjbWxoWW14bGN5NXNaWE56SWl3aUxpNHZMaTR2UEdsdWNIVjBJR056Y3lBelBpSXNJbVJ5WVhkbGNpNXNaWE56SWl3aWMyaGhaRzkzTG14bGMzTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUU3UlVGRFJTeDFRa0ZCUVR0RlFVTkJMRGhDUVVGQk8wVkJRMEVzSzBKQlFVRTdRME5EUkR0QlFVTkVMRzFFUVVGdFJEdEJRVU51UkRzN096czdSMEZMUnp0QlFVTklMRFJDUVVFMFFqdEJRMUkxUWp0RlFVTkZMRzFDUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEU5QlFVRTdSVUZEUVN4UlFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNLMEpCUVVFN1ZVRkJRU3gxUWtGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UTBSVlJEdEJRMUpETzBWRFRrRXNkME5CUVVFN1ZVRkJRU3huUTBGQlFUdEZSRkZGTEhGQ1FVRkJPMFZCUVVFc2NVSkJRVUU3UlVGQlFTeGpRVUZCTzBWQlEwRXNOa0pCUVVFN1JVRkJRU3c0UWtGQlFUdE5RVUZCTERKQ1FVRkJPMVZCUVVFc2RVSkJRVUU3UlVGRFFTeHpRa0ZCUVR0TlFVRkJMR3RDUVVGQk8wVkJRMEVzYlVKQlFVRTdSVUZEUVN4WlFVRkJPMFZCUTBFc1lVRkJRVHRGUVVOQkxIVkNRVUZCTzBWQlEwRXNhME5CUVVFN1ZVRkJRU3d3UWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5FVlVnN1FVTlFRenM3TzBWQlIwVXNXVUZCUVR0RlFVTkJMQ3RDUVVGQk8xVkJRVUVzZFVKQlFVRTdRMFJUU0R0QlEwNURPenRGUVVWRkxIRkNRVUZCTzAxQlFVRXNaVUZCUVR0RFJGRklPMEZEVEVNN096dEZRVWRGTEdkQ1FVRkJPME5FVDBnN1FVTktRenM3UlVGRlJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hsUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEd0Q1FVRkJPMFZCUTBFc2FVSkJRVUU3UTBSTlNEdEJRMGhETzBWQlEwVXNaMEpCUVVFN1JVRkRRU3hwUWtGQlFUdEZRVU5CTEdWQlFVRTdSVUZEUVN3clFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWQlEwRXNhVU5CUVVFN1EwUkxTRHRCUTBaRE8wVkJRMFVzYlVKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1UwRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2JVSkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMRzlEUVVGQk8xVkJRVUVzTkVKQlFVRTdSVUZEUVN4cFFrRkJRVHREUkVsSU8wRkRha0pETzBWQlowSkpMRzFDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEU5QlFVRTdSVUZEUVN4UlFVRkJPME5FU1V3N1FVTkVSenRGUVVORkxGbEJRVUU3UTBSSFREdEJRME5ETzBWQlEwVXNiMEpCUVVFN1RVRkJRU3haUVVGQk8xVkJRVUVzVVVGQlFUdEZRVU5CTEdWQlFVRTdRMFJEU0R0QlEwVkRPMFZCUTBVc1pVRkJRVHRGUVVOQkxHdENRVUZCTzBWQlEwRXNhVUpCUVVFN1EwUkJTRHRCUTBkRE8wVkJRMFVzV1VGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxFOUJRVUU3UlVGRFFTeFJRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3gxUWtGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4cFFrRkJRVHREUkVSSU8wRkRUMHM3TzBWQlEwVXNZVUZCUVR0RFJFcFFPMEZEVDBzN08wVkJRMFVzWVVGQlFUdERSRXBRTzBGRFQwczdPMFZCUTBVc1lVRkJRVHREUkVwUU8wRkRUMHM3TzBWQlEwVXNZVUZCUVR0RFJFcFFPMEZEVDBzN08wVkJRMFVzWVVGQlFUdERSRXBRTzBGRFQwczdPMFZCUTBVc1lVRkJRVHREUkVwUU8wRkRVME03UlVGRFJTd3JRa0ZCUVR0RFJGQklPMEZEVjA4N1JVRkRSU3hqUVVGQk8wTkVWRlE3UVVOalR6dEZRVU5GTEdOQlFVRTdRMFJhVkR0QlEybENUenRGUVVORkxHTkJRVUU3UTBSbVZEdEJRMjlDVHp0RlFVTkZMR05CUVVFN1EwUnNRbFE3UVVOMVFrODdSVUZEUlN4alFVRkJPME5FY2tKVU8wRkRNRUpQTzBWQlEwVXNZMEZCUVR0RFJIaENWRHRCUXpoQ1F6dEZRVU5GTEdkRFFVRkJPME5FTlVKSU8wRkRaME5QTzBWQlEwVXNZVUZCUVR0RFJEbENWRHRCUTIxRFR6dEZRVU5GTEdGQlFVRTdRMFJxUTFRN1FVTnpRMDg3UlVGRFJTeGhRVUZCTzBORWNFTlVPMEZEZVVOUE8wVkJRMFVzWVVGQlFUdERSSFpEVkR0QlF6UkRUenRGUVVORkxHRkJRVUU3UTBReFExUTdRVU1yUTA4N1JVRkRSU3hoUVVGQk8wTkVOME5VTzBGRGJVUkRPenRGUVVWRkxGRkJRVUU3UlVGRFFTeFpRVUZCTzBORWFrUklPMEZEYjBSTE96dEZRVU5GTEdOQlFVRTdRMFJxUkZBN1FVTnZSRXM3TzBWQlEwVXNZMEZCUVR0RFJHcEVVRHRCUTI5RVN6czdSVUZEUlN4alFVRkJPME5FYWtSUU8wRkRiMFJMT3p0RlFVTkZMR05CUVVFN1EwUnFSRkE3UVVOdlJFczdPMFZCUTBVc1kwRkJRVHREUkdwRVVEdEJRMjlFU3pzN1JVRkRSU3hqUVVGQk8wTkVha1JRTzBGRGMwUkRPMFZCUTBVc2FVTkJRVUU3UTBSd1JFZzdRVU4zUkU4N1JVRkRSU3haUVVGQk8wTkVkRVJVTzBGRE1rUlBPMFZCUTBVc1dVRkJRVHREUkhwRVZEdEJRemhFVHp0RlFVTkZMRmxCUVVFN1EwUTFSRlE3UVVOcFJVODdSVUZEUlN4WlFVRkJPME5FTDBSVU8wRkRiMFZQTzBWQlEwVXNXVUZCUVR0RFJHeEZWRHRCUTNWRlR6dEZRVU5GTEZsQlFVRTdRMFJ5UlZRN1FVTXlSVU03UlVGRFJTeGhRVUZCTzBWQlEwRXNPRUpCUVVFN1EwUjZSVWc3UVVNMlJVODdSVUZEUlN4bFFVRkJPME5FTTBWVU8wRkRaMFpQTzBWQlEwVXNaVUZCUVR0RFJEbEZWRHRCUTIxR1R6dEZRVU5GTEdWQlFVRTdRMFJxUmxRN1FVTnpSazg3UlVGRFJTeGxRVUZCTzBORWNFWlVPMEZEZVVaUE8wVkJRMFVzWlVGQlFUdERSSFpHVkR0QlF6UkdUenRGUVVORkxHVkJRVUU3UTBReFJsUTdRVU5uUjBNN1JVRkRSU3h2UWtGQlFUdEZRVU5CTEN0Q1FVRkJPME5FT1VaSU8wRkRaMGRITzBWQlEwVXNaMEpCUVVFN1EwUTVSa3c3UVVOblIwczdSVUZEUlN4VFFVRkJPME5FT1VaUU8wRkRhVWRMTzBWQlEwVXNVVUZCUVR0RFJDOUdVRHRCUTJ0SFN6dEZRVU5GTEU5QlFVRTdRMFJvUjFBN1FVTnRSMHM3UlVGRFJTeFZRVUZCTzBORWFrZFFPMEZEZDBkTE96dEZRVVZGTEhsQ1FVRkJPMFZCUTBFc1UwRkJRVHRGUVVOQkxHOURRVUZCTzFWQlFVRXNORUpCUVVFN1EwUjBSMUE3UVVONVIwczdPMFZCUlVVc2QwSkJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNiME5CUVVFN1ZVRkJRU3cwUWtGQlFUdERSSFpIVUR0QlF6UkhVenRGUVVORkxGZEJRVUU3UTBReFIxZzdRVU0yUjFNN1JVRkRSU3hWUVVGQk8wTkVNMGRZTzBGRE9FZFRPMFZCUTBVc1UwRkJRVHREUkRWSFdEdEJReXRIVXp0RlFVTkZMRmxCUVVFN1EwUTNSMWc3UVVOelNFczdPMFZCUlVVc1lVRkJRVHRGUVVOQkxEWkNRVUZCTzBORWNFaFFPMEZEZVVoRE8wVkJRMFVzVjBGQlFUdERSSFpJU0NJc0ltWnBiR1VpT2lKa2NtRjNaWEl1WTNOeklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lPbkp2YjNRZ2UxeHVJQ0F0TFc5MWRHeHBibVV0ZWtsdVpHVjRPaUF5TURBd08xeHVJQ0F0TFc5MWRHeHBibVV0YzNScFkydDVMV2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdMUzF2ZFhSc2FXNWxMV05vWVhCMFpYSnpMWGRwWkhSb09pQXhNREFsTzF4dWZWeHVJaXdpT25KdmIzUWdlMXh1SUNBdExXOTFkR3hwYm1VdGVrbHVaR1Y0T2lBeU1EQXdPMXh1SUNBdExXOTFkR3hwYm1VdGMzUnBZMnQ1TFdobGFXZG9kRG9nTVRBd0pUdGNiaUFnTFMxdmRYUnNhVzVsTFdOb1lYQjBaWEp6TFhkcFpIUm9PaUF4TURBbE8xeHVmVnh1THlvZ1BUMDlQVDA5UFQwOVBTQmpiMnh2Y25NdWRHaGxiV1VnTFNEbG43cm5vWURwb3B6b2liTGxqNWpwaDQvcG00YmxrSWdnUFQwOVBUMDlQVDA5UFNBcUwxeHVMeW9xWEc0Z0tpQnphR0ZrYjNjdWJHVnpjeUF0SU9tWXRPVzlzZWFndCtXOGoraXV2dWU5cmlCdGFYaHBibmdnNVllOTVwV3dYRzRnS2lBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEc0Z0tpQkRjbVZoZEdWa0lFSjVPaUJaWVc5b1lXbDRhV0Z2WEc0Z0tpQlZjR1JoZEdVNklESXdNakl1TXk0eU1GeHVJQ292WEc0dktpQTlQVDA5UFQwZzZaaTA1YjJ4NXFDMzVieVA2SzYrNTcydTVZZTk1cFd3SUQwOVBUMDlQU0FxTDF4dUxtOTFkR3hwYm1VdFpISmhkMlZ5SUh0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBdE1UdGNiaUFnZEc5d09pQXdPMXh1SUNCc1pXWjBPaUF3TzF4dUlDQnRZWEpuYVc0NklEQTdYRzRnSUhkcFpIUm9PaUF4TURBbE8xeHVJQ0JvWldsbmFIUTZJREV3TUNVN1hHNGdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hHNGdJSFpwYzJsaWFXeHBkSGs2SUdocFpHUmxianRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZiVzlrWVd3Z2UxeHVJQ0JpYjNndGMyaGhaRzkzT2lBd0lEQWdObkI0SURGd2VDQWpaR05rWm1VMk8xeHVJQ0JrYVhOd2JHRjVPaUJtYkdWNE8xeHVJQ0JtYkdWNExXUnBjbVZqZEdsdmJqb2dZMjlzZFcxdU8xeHVJQ0JtYkdWNExYZHlZWEE2SUc1dmQzSmhjRHRjYmlBZ2NHOXphWFJwYjI0NklHRmljMjlzZFhSbE8xeHVJQ0I2TFdsdVpHVjRPaUF5TVR0Y2JpQWdhR1ZwWjJoME9pQXhNREFsTzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpabVptTzF4dUlDQjBjbUZ1YzJsMGFXOXVMV1IxY21GMGFXOXVPaUF3TGpSek8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5b1pXRmtaWElzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDIxaGFXNHNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMlp2YjNSbGNpQjdYRzRnSUhkcFpIUm9PaUF4TURBbE8xeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTlvWldGa1pYSXNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMlp2YjNSbGNpQjdYRzRnSUdac1pYZ3RjMmh5YVc1ck9pQXdPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5MGFYUnNaU3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmYldGcGJpeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZabTl2ZEdWeUlIdGNiaUFnY0dGa1pHbHVaem9nTUNBeE5uQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5b1pXRmtaWElzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDNScGRHeGxJSHRjYmlBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHVJQ0I2TFdsdVpHVjRPaUF4TzF4dUlDQnRZWEpuYVc0NklEQWdZWFYwYnp0Y2JpQWdhR1ZwWjJoME9pQTFNbkI0TzF4dUlDQnNhVzVsTFdobGFXZG9kRG9nTlRKd2VEdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmRHbDBiR1VnZTF4dUlDQm1iMjUwTFhOcGVtVTZJREUyY0hnN1hHNGdJR1p2Ym5RdGQyVnBaMmgwT2lBME1EQTdYRzRnSUcxaGNtZHBiam9nTUNBeE5uQjRPMXh1SUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh1SUNCaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnSTJSalpHWmxOanRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZlkyeHZjMlVnZTF4dUlDQndiM05wZEdsdmJqb2dZV0p6YjJ4MWRHVTdYRzRnSUhvdGFXNWtaWGc2SURJN1hHNGdJSFJ2Y0RvZ05UQWxPMXh1SUNCeWFXZG9kRG9nTVRKd2VEdGNiaUFnZDJsa2RHZzZJREl3Y0hnN1hHNGdJR2hsYVdkb2REb2dNakJ3ZUR0Y2JpQWdiR2x1WlMxb1pXbG5hSFE2SURJd2NIZzdYRzRnSUdOdmJHOXlPaUFqT1RrNU8xeHVJQ0JtYjI1MExYTnBlbVU2SURJd2NIZzdYRzRnSUhSbGVIUXRZV3hwWjI0NklHTmxiblJsY2p0Y2JpQWdZM1Z5YzI5eU9pQndiMmx1ZEdWeU8xeHVJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZrb0xUVXdKU2s3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMk5zYjNObElDNXZkWFJzYVc1bExXbGpiMjRnZTF4dUlDQndiM05wZEdsdmJqb2dZV0p6YjJ4MWRHVTdYRzRnSUhvdGFXNWtaWGc2SURJN1hHNGdJSFJ2Y0RvZ01EdGNiaUFnYkdWbWREb2dNRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZlkyeHZjMlU2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXpZMk5qdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmYldGcGJpQjdYRzRnSUdac1pYZzZJREU3WEc0Z0lHOTJaWEptYkc5M09pQmhkWFJ2TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgxOW1iMjkwWlhJZ2UxeHVJQ0J0WVhKbmFXNDZJREFnWVhWMGJ6dGNiaUFnZEdWNGRDMWhiR2xuYmpvZ2NtbG5hSFE3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMjkyWlhKc1lYa2dlMXh1SUNCamIyNTBaVzUwT2lBbkp6dGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCMGIzQTZJREE3WEc0Z0lHeGxablE2SURBN1hHNGdJSGRwWkhSb09pQXhNREFsTzF4dUlDQm9aV2xuYUhRNklERXdNQ1U3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3WEc0Z0lHOXdZV05wZEhrNklEQXVNVHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3d1YjNWMGJHbHVaUzFrY21GM1pYSmZkR2x1ZVN4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISXViM1YwYkdsdVpTMWtjbUYzWlhKZmRHbHVlU0I3WEc0Z0lIZHBaSFJvT2lBeU9EQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZmJXbHVhU3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYldsdWFTQjdYRzRnSUhkcFpIUm9PaUEwT0RCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl5ZEd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmYzIxaGJHd3NYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiSFJ5TG05MWRHeHBibVV0WkhKaGQyVnlYM050WVd4c0lIdGNiaUFnZDJsa2RHZzZJRFUwTUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkM1dmRYUnNhVzVsTFdSeVlYZGxjbDl5WldkMWJHRnlMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMngwY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDl5WldkMWJHRnlJSHRjYmlBZ2QybGtkR2c2SURZNE1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDNXZkWFJzYVc1bExXUnlZWGRsY2w5dFpXUnBkVzBzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDIxbFpHbDFiU0I3WEc0Z0lIZHBaSFJvT2lBM01qQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZmJHRnlaMlVzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4aGNtZGxJSHRjYmlBZ2QybGtkR2c2SURrMk1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDQjdYRzRnSUdKdmNtUmxjaTFzWldaME9pQXhjSGdnYzI5c2FXUWdJMlJqWkdabE5qdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl5ZEd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEdsdWVTNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQnlhV2RvZERvZ0xUSTVNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRhVzVwTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUhKcFoyaDBPaUF0TkRrd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0xtOTFkR3hwYm1VdFpISmhkMlZ5WDNOdFlXeHNMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSEpwWjJoME9pQXROVFV3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTG05MWRHeHBibVV0WkhKaGQyVnlYM0psWjNWc1lYSXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdjbWxuYUhRNklDMDJPVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3d1YjNWMGJHbHVaUzFrY21GM1pYSmZiV1ZrYVhWdExtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lISnBaMmgwT2lBdE56TXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeGhjbWRsTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUhKcFoyaDBPaUF0T1Rjd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUlIdGNiaUFnWW05eVpHVnlMWEpwWjJoME9pQXhjSGdnYzI5c2FXUWdJMlJqWkdabE5qdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmZEdsdWVTNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQnNaV1owT2lBdE1qa3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMXBibWt1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnYkdWbWREb2dMVFE1TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMngwY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDl6YldGc2JDNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQnNaV1owT2lBdE5UVXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSmxaM1ZzWVhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2JHVm1kRG9nTFRZNU1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5dFpXUnBkVzB1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnYkdWbWREb2dMVGN6TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMngwY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDlzWVhKblpTNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQnNaV1owT2lBdE9UY3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmRIUmlMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMkowZENCN1hHNGdJR3hsWm5RNklEQTdYRzRnSUhkcFpIUm9PaUF4TURBbE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM1IwWWk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwYVc1NUxGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBhVzU1SUh0Y2JpQWdhR1ZwWjJoME9pQXlOREJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0l1YjNWMGJHbHVaUzFrY21GM1pYSmZiV2x1YVN4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5aWRIUXViM1YwYkdsdVpTMWtjbUYzWlhKZmJXbHVhU0I3WEc0Z0lHaGxhV2RvZERvZ016SXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmRIUmlMbTkxZEd4cGJtVXRaSEpoZDJWeVgzTnRZV3hzTEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJKMGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5emJXRnNiQ0I3WEc0Z0lHaGxhV2RvZERvZ016WXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmRIUmlMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSmxaM1ZzWVhJc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSmxaM1ZzWVhJZ2UxeHVJQ0JvWldsbmFIUTZJRFF3TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM1IwWWk1dmRYUnNhVzVsTFdSeVlYZGxjbDl0WldScGRXMHNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwTG05MWRHeHBibVV0WkhKaGQyVnlYMjFsWkdsMWJTQjdYRzRnSUdobGFXZG9kRG9nTkRRd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4aGNtZGxMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMkowZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDlzWVhKblpTQjdYRzRnSUdobGFXZG9kRG9nTkRnd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUlIdGNiaUFnWW05eVpHVnlMV0p2ZEhSdmJUb2dNWEI0SUhOdmJHbGtJQ05rWTJSbVpUWTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNScGJua3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdkRzl3T2lBdE1qVXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmRIUmlMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMXBibWt1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnZEc5d09pQXRNek13Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpTG05MWRHeHBibVV0WkhKaGQyVnlYM050WVd4c0xtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lIUnZjRG9nTFRNM01IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNSMFlpNXZkWFJzYVc1bExXUnlZWGRsY2w5eVpXZDFiR0Z5TG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUhSdmNEb2dMVFF4TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM1IwWWk1dmRYUnNhVzVsTFdSeVlYZGxjbDl0WldScGRXMHViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdkRzl3T2lBdE5EVXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmRIUmlMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeGhjbWRsTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUhSdmNEb2dMVFE1TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMkowZENCN1hHNGdJSFJ2Y0RvZ2FXNXBkR2xoYkR0Y2JpQWdZbTl5WkdWeUxYUnZjRG9nTVhCNElITnZiR2xrSUNOa1kyUm1aVFk3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUnBibmt1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnWW05MGRHOXRPaUF0TWpVd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWW5SMExtOTFkR3hwYm1VdFpISmhkMlZ5WDIxcGJta3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdZbTkwZEc5dE9pQXRNek13Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwTG05MWRHeHBibVV0WkhKaGQyVnlYM050WVd4c0xtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lHSnZkSFJ2YlRvZ0xUTTNNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlaV2QxYkdGeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lHSnZkSFJ2YlRvZ0xUUXhNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRaV1JwZFcwdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ1ltOTBkRzl0T2lBdE5EVXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeGhjbWRsTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUdKdmRIUnZiVG9nTFRRNU1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQ0I3WEc0Z0lIWnBjMmxpYVd4cGRIazZJSFpwYzJsaWJHVTdYRzRnSUhvdGFXNWtaWGc2SUhaaGNpZ3RMVzkxZEd4cGJtVXRla2x1WkdWNEtUdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Y0dWdVpXUXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHVJQ0J3YjNOcGRHbHZiam9nWm1sNFpXUTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjNCbGJtVmtMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQ0I3WEc0Z0lISnBaMmgwT2lBd08xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMjl3Wlc1bFpDNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISWdlMXh1SUNCc1pXWjBPaUF3TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOXdaVzVsWkM1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJZ2UxeHVJQ0IwYjNBNklEQTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjNCbGJtVmtMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQ0I3WEc0Z0lHSnZkSFJ2YlRvZ01EdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Wm1aelpYUXViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMjltWm5ObGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISWdlMXh1SUNCb1pXbG5hSFE2SUdOaGJHTW9NVEF3SlNBdElEUmxiU2s3WEc0Z0lIUnZjRG9nTlRBbE8xeHVJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZrb0xUVXdKU2s3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmIyWm1jMlYwTG05MWRHeHBibVV0WkhKaGQyVnlYM1IwWWl4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5dlptWnpaWFF1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwSUh0Y2JpQWdkMmxrZEdnNklHTmhiR01vTVRBd0pTQXRJRFJsYlNrN1hHNGdJR3hsWm5RNklEVXdKVHRjYmlBZ2RISmhibk5tYjNKdE9pQjBjbUZ1YzJ4aGRHVllLQzAxTUNVcE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMjltWm5ObGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5dmNHVnVaV1F1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzSUh0Y2JpQWdjbWxuYUhRNklESmxiVHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5dlptWnpaWFF1YjNWMGJHbHVaUzFrY21GM1pYSmZiM0JsYm1Wa0xtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpQjdYRzRnSUd4bFpuUTZJREpsYlR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXZabVp6WlhRdWIzVjBiR2x1WlMxa2NtRjNaWEpmYjNCbGJtVmtMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaUI3WEc0Z0lIUnZjRG9nTW1WdE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMjltWm5ObGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5dmNHVnVaV1F1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwSUh0Y2JpQWdZbTkwZEc5dE9pQXlaVzA3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZllYVjBieTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3dzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWVhWMGJ5NXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISWdlMXh1SUNCb1pXbG5hSFE2SUdGMWRHODdYRzRnSUcxaGVDMW9aV2xuYUhRNklHTmhiR01vTVRBd0pTQXRJRFJsYlNrN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZablZzYkNCN1hHNGdJSEJoWkdScGJtYzZJREE3WEc1OVhHNGlMQ0pBYVcxd2IzSjBJQ2N1TDNaaGNtbGhZbXhsY3ljN1hHNUFhVzF3YjNKMElDY3VMMk52Ykc5eWN5YzdYRzVBYVcxd2IzSjBJQ2N1TDNOb1lXUnZkeWM3WEc1Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2VpMXBibVJsZURvZ0xURTdYRzRnSUhSdmNEb2dNRHRjYmlBZ2JHVm1kRG9nTUR0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1SUNCM2FXUjBhRG9nTVRBd0pUdGNiaUFnYUdWcFoyaDBPaUF4TURBbE8xeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0IyYVhOcFltbHNhWFI1T2lCb2FXUmtaVzQ3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNWNiaUFnSmw5ZmJXOWtZV3dnZTF4dUlDQWdJQzV6YUdGa2IzZGZiR2xuYUhSZmNtVm5kV3hoY2lncE8xeHVJQ0FnSUdScGMzQnNZWGs2SUdac1pYZzdYRzRnSUNBZ1pteGxlQzFrYVhKbFkzUnBiMjQ2SUdOdmJIVnRianRjYmlBZ0lDQm1iR1Y0TFhkeVlYQTZJRzV2ZDNKaGNEdGNiaUFnSUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJQ0FnZWkxcGJtUmxlRG9nTWpFN1hHNGdJQ0FnYUdWcFoyaDBPaUF4TURBbE8xeHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCM2FHbDBaVHRjYmlBZ0lDQjBjbUZ1YzJsMGFXOXVMV1IxY21GMGFXOXVPaUF3TGpSek8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc0Z0lIMWNibHh1SUNBbVgxOW9aV0ZrWlhJc1hHNGdJQ1pmWDIxaGFXNHNYRzRnSUNaZlgyWnZiM1JsY2lCN1hHNGdJQ0FnZDJsa2RHZzZJREV3TUNVN1hHNGdJQ0FnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNiaUFnZlZ4dVhHNGdJQ1pmWDJobFlXUmxjaXhjYmlBZ0psOWZabTl2ZEdWeUlIdGNiaUFnSUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjYmlBZ2ZWeHVYRzRnSUNaZlgzUnBkR3hsTEZ4dUlDQW1YMTl0WVdsdUxGeHVJQ0FtWDE5bWIyOTBaWElnZTF4dUlDQWdJSEJoWkdScGJtYzZJREFnTVRad2VEdGNiaUFnZlZ4dVhHNGdJQ1pmWDJobFlXUmxjaXhjYmlBZ0psOWZkR2wwYkdVZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdJQ0I2TFdsdVpHVjRPaUF4TzF4dUlDQWdJRzFoY21kcGJqb2dNQ0JoZFhSdk8xeHVJQ0FnSUdobGFXZG9kRG9nTlRKd2VEdGNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dOVEp3ZUR0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1SUNCOVhHNWNiaUFnSmw5ZmRHbDBiR1VnZTF4dUlDQWdJR1p2Ym5RdGMybDZaVG9nTVRad2VEdGNiaUFnSUNCbWIyNTBMWGRsYVdkb2REb2dOREF3TzF4dUlDQWdJRzFoY21kcGJqb2dNQ0F4Tm5CNE8xeHVJQ0FnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzRnSUNBZ1ltOXlaR1Z5TFdKdmRIUnZiVG9nTVhCNElITnZiR2xrSUVCd2NtbHRZWEo1WDJKdmNtUmxjbDlqYjJ4dmNqdGNiaUFnZlZ4dVhHNGdJQ1pmWDJOc2IzTmxJSHRjYmlBZ0lDQndiM05wZEdsdmJqb2dZV0p6YjJ4MWRHVTdYRzRnSUNBZ2VpMXBibVJsZURvZ01qdGNiaUFnSUNCMGIzQTZJRFV3SlR0Y2JpQWdJQ0J5YVdkb2REb2dNVEp3ZUR0Y2JpQWdJQ0IzYVdSMGFEb2dNakJ3ZUR0Y2JpQWdJQ0JvWldsbmFIUTZJREl3Y0hnN1hHNGdJQ0FnYkdsdVpTMW9aV2xuYUhRNklESXdjSGc3WEc0Z0lDQWdZMjlzYjNJNklFQm1iM1Z5ZEdoZmRHVjRkRjlqYjJ4dmNqdGNiaUFnSUNCbWIyNTBMWE5wZW1VNklESXdjSGc3WEc0Z0lDQWdkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPMXh1SUNBZ0lHTjFjbk52Y2pvZ2NHOXBiblJsY2p0Y2JpQWdJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZrb0xUVXdKU2s3WEc0Z0lDQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibHh1SUNBZ0lDNXZkWFJzYVc1bExXbGpiMjRnZTF4dUlDQWdJQ0FnY0c5emFYUnBiMjQ2SUdGaWMyOXNkWFJsTzF4dUlDQWdJQ0FnZWkxcGJtUmxlRG9nTWp0Y2JpQWdJQ0FnSUhSdmNEb2dNRHRjYmlBZ0lDQWdJR3hsWm5RNklEQTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0pqcG9iM1psY2lCN1hHNGdJQ0FnSUNCamIyeHZjam9nUUhSb2FYSmtYM1JsZUhSZlkyOXNiM0k3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnSmw5ZmJXRnBiaUI3WEc0Z0lDQWdabXhsZURvZ01UdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ1lYVjBienRjYmlBZ2ZWeHVYRzRnSUNaZlgyWnZiM1JsY2lCN1hHNGdJQ0FnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUNBZ2RHVjRkQzFoYkdsbmJqb2djbWxuYUhRN1hHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYmlBZ2ZWeHVYRzRnSUNaZlgyOTJaWEpzWVhrZ2UxeHVJQ0FnSUdOdmJuUmxiblE2SUNjbk8xeHVJQ0FnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdJQ0I2TFdsdVpHVjRPaUF4TzF4dUlDQWdJSFJ2Y0RvZ01EdGNiaUFnSUNCc1pXWjBPaUF3TzF4dUlDQWdJSGRwWkhSb09pQXhNREFsTzF4dUlDQWdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUJBZDJocGRHVTdYRzRnSUNBZ2IzQmhZMmwwZVRvZ01DNHhPMXh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNGdJSDFjYmx4dUlDQW1YM0owYkN4Y2JpQWdKbDlzZEhJZ2UxeHVJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWElnZTF4dUlDQWdJQ0FnSmw5MGFXNTVJSHRjYmlBZ0lDQWdJQ0FnZDJsa2RHZzZJREk0TUhCNE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YMjFwYm1rZ2UxeHVJQ0FnSUNBZ0lDQjNhV1IwYURvZ05EZ3djSGc3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmMyMWhiR3dnZTF4dUlDQWdJQ0FnSUNCM2FXUjBhRG9nTlRRd2NIZzdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmY21WbmRXeGhjaUI3WEc0Z0lDQWdJQ0FnSUhkcFpIUm9PaUEyT0RCd2VEdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdKbDl0WldScGRXMGdlMXh1SUNBZ0lDQWdJQ0IzYVdSMGFEb2dOekl3Y0hnN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZiR0Z5WjJVZ2UxeHVJQ0FnSUNBZ0lDQjNhV1IwYURvZ09UWXdjSGc3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnSmw5eWRHd2dlMXh1SUNBZ0lHSnZjbVJsY2kxc1pXWjBPaUF4Y0hnZ2MyOXNhV1FnUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eU8xeHVYRzRnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hHNGdJQ0FnSUNBbVgzUnBibmtnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtbG5hSFE2SUMweU9UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgyMXBibWtnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtbG5hSFE2SUMwME9UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgzTnRZV3hzSUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lISnBaMmgwT2lBdE5UVXdjSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXlaV2QxYkdGeUlIdGNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpwWjJoME9pQXROamt3Y0hnN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdKbDl0WldScGRXMGdlMXh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUNBZ0lDQWdJQ0FnY21sbmFIUTZJQzAzTXpCd2VEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FtWDJ4aGNtZGxJSHRjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNBZ0lDQWdJQ0FnSUhKcFoyaDBPaUF0T1Rjd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0FtWDJ4MGNpQjdYRzRnSUNBZ1ltOXlaR1Z5TFhKcFoyaDBPaUF4Y0hnZ2MyOXNhV1FnUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eU8xeHVYRzRnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hHNGdJQ0FnSUNBbVgzUnBibmtnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2JHVm1kRG9nTFRJNU1IQjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmJXbHVhU0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCc1pXWjBPaUF0TkRrd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5emJXRnNiQ0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCc1pXWjBPaUF0TlRVd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5eVpXZDFiR0Z5SUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lHeGxablE2SUMwMk9UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgyMWxaR2wxYlNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNaV1owT2lBdE56TXdjSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXNZWEpuWlNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNaV1owT2lBdE9UY3djSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgzUjBZaXhjYmlBZ0psOWlkSFFnZTF4dUlDQWdJR3hsWm5RNklEQTdYRzRnSUNBZ2QybGtkR2c2SURFd01DVTdYRzVjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNiaUFnSUNBZ0lDWmZkR2x1ZVNCN1hHNGdJQ0FnSUNBZ0lHaGxhV2RvZERvZ01qUXdjSGc3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmJXbHVhU0I3WEc0Z0lDQWdJQ0FnSUdobGFXZG9kRG9nTXpJd2NIZzdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmYzIxaGJHd2dlMXh1SUNBZ0lDQWdJQ0JvWldsbmFIUTZJRE0yTUhCNE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YM0psWjNWc1lYSWdlMXh1SUNBZ0lDQWdJQ0JvWldsbmFIUTZJRFF3TUhCNE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YMjFsWkdsMWJTQjdYRzRnSUNBZ0lDQWdJR2hsYVdkb2REb2dORFF3Y0hnN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZiR0Z5WjJVZ2UxeHVJQ0FnSUNBZ0lDQm9aV2xuYUhRNklEUTRNSEI0TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZmRIUmlJSHRjYmlBZ0lDQmliM0prWlhJdFltOTBkRzl0T2lBeGNIZ2djMjlzYVdRZ1FIQnlhVzFoY25sZlltOXlaR1Z5WDJOdmJHOXlPMXh1WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNpQjdYRzRnSUNBZ0lDQW1YM1JwYm5rZ2UxeHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJQ0FnSUNBZ0lDQWdkRzl3T2lBdE1qVXdjSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXRhVzVwSUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lIUnZjRG9nTFRNek1IQjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmMyMWhiR3dnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHOXdPaUF0TXpjd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5eVpXZDFiR0Z5SUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lIUnZjRG9nTFRReE1IQjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmJXVmthWFZ0SUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lIUnZjRG9nTFRRMU1IQjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmJHRnlaMlVnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2RHOXdPaUF0TkRrd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0FtWDJKMGRDQjdYRzRnSUNBZ2RHOXdPaUJwYm1sMGFXRnNPMXh1SUNBZ0lHSnZjbVJsY2kxMGIzQTZJREZ3ZUNCemIyeHBaQ0JBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJN1hHNWNiaUFnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5SUh0Y2JpQWdJQ0FnSUNaZmRHbHVlU0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCaWIzUjBiMjA2SUMweU5UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgyMXBibWtnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ1ltOTBkRzl0T2lBdE16TXdjSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXpiV0ZzYkNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQmliM1IwYjIwNklDMHpOekJ3ZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YM0psWjNWc1lYSWdlMXh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUNBZ0lDQWdJQ0FnWW05MGRHOXRPaUF0TkRFd2NIZzdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5dFpXUnBkVzBnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ1ltOTBkRzl0T2lBdE5EVXdjSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXNZWEpuWlNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQmliM1IwYjIwNklDMDBPVEJ3ZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDWmZiM0JsYm1Wa0lIdGNiaUFnSUNCMmFYTnBZbWxzYVhSNU9pQjJhWE5wWW14bE8xeHVJQ0FnSUhvdGFXNWtaWGc2SUhaaGNpZ3RMVzkxZEd4cGJtVXRla2x1WkdWNEtUdGNibHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHVJQ0FnSUNBZ2NHOXphWFJwYjI0NklHWnBlR1ZrTzF4dVhHNGdJQ0FnSUNBbVgzSjBiQ0I3WEc0Z0lDQWdJQ0FnSUhKcFoyaDBPaUF3TzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgyeDBjaUI3WEc0Z0lDQWdJQ0FnSUd4bFpuUTZJREE3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmRIUmlJSHRjYmlBZ0lDQWdJQ0FnZEc5d09pQXdPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FtWDJKMGRDQjdYRzRnSUNBZ0lDQWdJR0p2ZEhSdmJUb2dNRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0FtWDI5bVpuTmxkQ0I3WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNpQjdYRzRnSUNBZ0lDQW1YM0owYkN4Y2JpQWdJQ0FnSUNaZmJIUnlJSHRjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBPaUJqWVd4aktERXdNQ1VnTFNBMFpXMHBPMXh1SUNBZ0lDQWdJQ0IwYjNBNklEVXdKVHRjYmlBZ0lDQWdJQ0FnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWktDMDFNQ1VwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgzUjBZaXhjYmlBZ0lDQWdJQ1pmWW5SMElIdGNiaUFnSUNBZ0lDQWdkMmxrZEdnNklHTmhiR01vTVRBd0pTQXRJRFJsYlNrN1hHNGdJQ0FnSUNBZ0lHeGxablE2SURVd0pUdGNiaUFnSUNBZ0lDQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZZS0MwMU1DVXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FtWDI5d1pXNWxaQ0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWElnZTF4dUlDQWdJQ0FnSUNBZ0lDWmZjblJzSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpwWjJoME9pQXlaVzA3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSmw5c2RISWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JHVm1kRG9nTW1WdE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDWmZkSFJpSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ2Y0RvZ01tVnRPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ1pmWW5SMElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdKdmRIUnZiVG9nTW1WdE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZllYVjBieUI3WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNpQjdYRzRnSUNBZ0lDQW1YM0owYkN4Y2JpQWdJQ0FnSUNaZmJIUnlJSHRjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBPaUJoZFhSdk8xeHVJQ0FnSUNBZ0lDQnRZWGd0YUdWcFoyaDBPaUJqWVd4aktERXdNQ1VnTFNBMFpXMHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQ1pmWm5Wc2JDQjdYRzRnSUNBZ2NHRmtaR2x1WnpvZ01EdGNiaUFnZlZ4dWZWeHVJaXdpTHlvcVhHNGdLaUJ6YUdGa2IzY3ViR1Z6Y3lBdElPbVl0T1c5c2VhZ3QrVzhqK2l1dnVlOXJpQnRhWGhwYm5nZzVZZTk1cFd3WEc0Z0tpQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNGdLaUJEY21WaGRHVmtJRUo1T2lCWllXOW9ZV2w0YVdGdlhHNGdLaUJWY0dSaGRHVTZJREl3TWpJdU15NHlNRnh1SUNvdlhHNUFhVzF3YjNKMElDY3VMMk52Ykc5eWN5YzdYRzVjYmk4cUlEMDlQVDA5UFNEcG1MVGx2Ykhtb0xmbHZJL29ycjdudmE3bGg3M21sYkFnUFQwOVBUMDlJQ292WEc0dWMyaGhaRzkzS0VCdlptWnpaWFE2SURBZ01DQTJjSGdnTVhCNExDQkFZMjlzYjNJNklFQndjbWx0WVhKNVgySnZjbVJsY2w5amIyeHZjaWtnZTF4dUlDQmliM2d0YzJoaFpHOTNPaUJBYjJabWMyVjBJRUJqYjJ4dmNqdGNibjFjYmx4dUxuTm9ZV1J2ZDE5eVpXZDFiR0Z5S0VCamIyeHZjam9nUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eUtTQjdYRzRnSUM1emFHRmtiM2NvTUNBd0lEWndlQ0F4Y0hnc0lFQmpiMnh2Y2lrN1hHNTlYRzVjYmk1emFHRmtiM2RmYkdGeVoyVW9RR052Ykc5eU9pQkFjSEpwYldGeWVWOWliM0prWlhKZlkyOXNiM0lwSUh0Y2JpQWdMbk5vWVdSdmR5Z3dJREFnTVRKd2VDQXhjSGdzSUVCamIyeHZjaWs3WEc1OVhHNWNiaTV6YUdGa2IzZGZiR2xuYUhSZmNtVm5kV3hoY2lncElIdGNiaUFnTG5Ob1lXUnZkMTl5WldkMWJHRnlLQ2s3WEc1OVhHNWNiaTV6YUdGa2IzZGZiR2xuYUhSZmJHRnlaMlVvS1NCN1hHNGdJQzV6YUdGa2IzZGZiR0Z5WjJVb0tUdGNibjFjYmx4dUxuTm9ZV1J2ZDE5a1lYSnJYM0psWjNWc1lYSW9LU0I3WEc0Z0lDNXphR0ZrYjNkZmNtVm5kV3hoY2loQWMyVmpiMjVrWVhKNVgySnZjbVJsY2w5amIyeHZjaWs3WEc1OVhHNWNiaTV6YUdGa2IzZGZaR0Z5YTE5c1lYSm5aU2dwSUh0Y2JpQWdMbk5vWVdSdmQxOXNZWEpuWlNoQWMyVmpiMjVrWVhKNVgySnZjbVJsY2w5amIyeHZjaWs3WEc1OVhHNGlYWDA9ICovXG4iXSwiZmlsZSI6ImRyYXdlci5taW4uY3NzIn0= */ diff --git a/drawer.min.js.map b/drawer.min.js.map index d767191b..b0be34b8 100644 --- a/drawer.min.js.map +++ b/drawer.min.js.map @@ -1 +1 @@ -{"version":3,"file":"drawer.min.js","sources":["src/utils/types/isString.js","src/utils/lang/hasOwn.js","src/utils/lang/toString.js","src/utils/types/isFunction.js","src/utils/types/isObject.js","src/base.js","src/utils/lang/extend.js","src/utils/lang/later.js","src/utils/types/isElement.js","src/utils/dom/hasClass.js","src/utils/dom/addClass.js","src/utils/dom/removeClass.js","src/utils/lang/trim.js","src/utils/types/isArray.js","src/utils/types/isDOM.js","src/utils/types/isHTMLCollection.js","src/utils/types/isFragment.js","src/utils/types/isTextNode.js","src/utils/dom/createElement.js","src/utils/dom/setAttribute.js","src/utils/dom/matches.js","src/utils/dom/getParentOrHost.js","src/utils/event/enum.js","src/utils/event/_off.js","src/utils/event/_delete.js","src/utils/event/purgeElement.js","src/utils/event/getListeners.js","src/utils/event/off.js","src/utils/event/on.js","src/utils/event/getTarget.js","src/utils/dom/resolveTextNode.js","src/utils/dom/closest.js","src/utils/icons/symbols.js","src/utils/icons/defaults.js","src/utils/icons/getSymbols.js","src/utils/icons/getSymbol.js","src/utils/icons/paint.js","src/utils/icons/add.js","src/utils/types/isSVG.js","src/utils/icons/icon.js","src/utils/icons/createElement.js","src/zIndex.js","src/utils/dom/setProperty.js","src/drawer.js"],"sourcesContent":["/**\r\n * 检测数据是否为 String 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} str\r\n * @returns {boolean}\r\n */\r\nconst isString = (str) => {\r\n return typeof str === 'string'\r\n}\r\n\r\nexport default isString\r\n","/**\r\n * 检测对象自身属性中是否具有指定的属性。\r\n * ========================================================================\r\n * @method hasOwn\r\n * @param {Object} obj - (必须)检测的目标对象\r\n * @param {String} prop - (必须)属性名\r\n * @returns {Boolean}\r\n */\r\nconst hasOwn = (obj, prop) => {\r\n const hasOwnProperty = Object.prototype.hasOwnProperty\r\n return obj && hasOwnProperty.call(obj, prop)\r\n}\r\n\r\nexport default hasOwn\r\n","/**\r\n * Object 对象原型上的 toString 方法\r\n * ========================================================================\r\n * @method toString\r\n * @param {*} val\r\n * @returns {string}\r\n */\r\nconst toString = (val) => {\r\n return Object.prototype.toString.apply(val)\r\n}\r\n\r\nexport default toString\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测测试数据是否为 Function 类型\r\n * ========================================================================\r\n * @method isFunction\r\n * @param {*} val - (必须)待检测的数据\r\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\r\n */\r\nconst isFunction = (val) => {\r\n return typeof val === 'function' || toString(val) === '[object Function]'\r\n}\r\n\r\nexport default isFunction\r\n","import toString from '../lang/toString'\r\nimport isFunction from '../types/isFunction'\r\n\r\n/**\r\n * 检测数据是否为 Object 类型\r\n * ========================================================================\r\n * @method isObject\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isObject = (o) => {\r\n return (\r\n (toString(o) === '[object Object]' ||\r\n typeof o === 'object' ||\r\n isFunction(o)) &&\r\n o !== null\r\n )\r\n}\r\n\r\nexport default isObject\r\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\r\n\r\n/**\r\n * 扩展对象\r\n * ========================================================================\r\n * @method extend\r\n * @param {Object} origin\r\n * @param {Object} source\r\n */\r\nconst extend = (origin, source) => {\r\n const keys = Object.keys(source)\r\n\r\n keys.forEach((prop) => {\r\n if (hasOwn(source, prop)) {\r\n origin[prop] = source[prop]\r\n }\r\n })\r\n}\r\n\r\nexport default extend\r\n","import isFunction from '../types/isFunction'\r\n\r\n/**\r\n * later - 延迟执行方法\r\n * ========================================================================\r\n * @method later\r\n * @param {Function} fn\r\n * @param {Number} [delay]\r\n * @returns {number|boolean}\r\n */\r\nconst later = (fn, delay = 300) => {\r\n if (!isFunction(fn)) {\r\n return false\r\n }\r\n\r\n return setTimeout(() => {\r\n fn()\r\n }, delay)\r\n}\r\n\r\nexport default later\r\n","import isObject from './isObject'\r\n\r\n/**\r\n * 检测数据是否为 HTMLElement DOM 节点\r\n * ========================================================================\r\n * @method isElement\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isElement = (o) => {\r\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\r\n}\r\n\r\nexport default isElement\r\n","import isElement from '../types/isElement'\r\n/**\r\n * 检测 DOM 节点是否包含名为 className 的样式\r\n * ========================================================================\r\n * @method hasClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst hasClass = (el, className) => {\r\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\r\n let allClass\r\n let classList\r\n\r\n if (!isElement(el)) {\r\n return false\r\n }\r\n\r\n allClass = el.className\r\n\r\n if (!allClass) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.contains) {\r\n return el.classList.contains(className)\r\n }\r\n\r\n return !!pattern.exec(allClass)\r\n}\r\n\r\nexport default hasClass\r\n","import hasClass from './hasClass'\r\n\r\n/**\r\n * 给 DOM 节点添加名为 className 的样式\r\n * ========================================================================\r\n * @method addClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst addClass = (el, className) => {\r\n let classList\r\n let allClass\r\n\r\n if (hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.add) {\r\n classList.add(className)\r\n } else {\r\n allClass = el.className\r\n allClass += allClass.length > 0 ? ' ' + className : className\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default addClass\r\n","import trim from '../lang/trim'\r\nimport hasClass from './hasClass'\r\n\r\n/**\r\n * 移除 DOM 节点的 className 样式\r\n * ========================================================================\r\n * @method removeClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst removeClass = (el, className) => {\r\n let allClass = el.className\r\n let classList\r\n\r\n if (!allClass || !hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.remove) {\r\n classList.remove(className)\r\n } else {\r\n allClass = trim(allClass.replace(className, ''))\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default removeClass\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 清楚字符串起始位置所有的空格\r\n * ========================================================================\r\n * @method trim\r\n * @param {string} str\r\n * @returns {string|Boolean}\r\n */\r\nconst trim = (str) => {\r\n if (!isString(str)) {\r\n return false\r\n }\r\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\r\n}\r\n\r\nexport default trim\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测数据是否为 Array 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isArray = (o) => {\r\n if (Array.isArray) {\r\n return Array.isArray(o)\r\n } else {\r\n return toString(o) === '[object Array]'\r\n }\r\n}\r\n\r\nexport default isArray\r\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isFragment = (fragment) => {\r\n return !!(\r\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\r\n )\r\n}\r\n\r\nexport default isFragment\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","import hasOwn from '../lang/hasOwn'\r\nimport isObject from '../types/isObject'\r\nimport isString from '../types/isString'\r\nimport isArray from '../types/isArray'\r\nimport isDOM from '../types/isDOM'\r\nimport setAttribute from './setAttribute'\r\n\r\n/**\r\n * 创建 DOM 节点,并添加属性和子节点\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} tagName - 标签名称\r\n * @param {Object|Array} attrs - 属性对象或者子节点\r\n * @param {Array} [children] - 子节点数组\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (tagName, attrs, children) => {\r\n const $fragment = document.createDocumentFragment()\r\n const $el = document.createElement(tagName)\r\n const isValidChild = (child) => {\r\n return isDOM(child) || isString(child)\r\n }\r\n const append = (child) => {\r\n let $child\r\n\r\n if (!isValidChild(child)) {\r\n return false\r\n }\r\n\r\n if (isDOM(child)) {\r\n $child = child\r\n } else if (isString(child)) {\r\n $child = document.createTextNode(child)\r\n }\r\n\r\n $fragment.appendChild($child)\r\n }\r\n\r\n if (isObject(attrs)) {\r\n Object.keys(attrs).forEach((attr) => {\r\n if (hasOwn(attrs, attr)) {\r\n setAttribute($el, attr, attrs[attr])\r\n }\r\n })\r\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\r\n attrs.forEach((child) => {\r\n append(child)\r\n })\r\n }\r\n\r\n if (isArray(children)) {\r\n children.forEach((child) => {\r\n append(child)\r\n })\r\n } else {\r\n append(children)\r\n }\r\n\r\n $el.appendChild($fragment)\r\n\r\n return $el\r\n}\r\n\r\nexport default createElement\r\n","/**\r\n * 给 DOM 节点设置属性/值\r\n * ========================================================================\r\n * @method setAttribute\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} attr - 属性名称\r\n * @param {String|Number|Boolean} value - 属性值\r\n */\r\nconst setAttribute = (el, attr, value) => {\r\n let tagName = el.tagName.toLowerCase()\r\n\r\n switch (attr) {\r\n case 'style':\r\n el.style.cssText = value\r\n break\r\n case 'value':\r\n if (tagName === 'input' || tagName === 'textarea') {\r\n el.value = value\r\n } else {\r\n el.setAttribute(attr, value)\r\n }\r\n break\r\n case 'className':\r\n el.className = value\r\n break\r\n default:\r\n el.setAttribute(attr, value)\r\n break\r\n }\r\n}\r\n\r\nexport default setAttribute\r\n","/**\r\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\r\n * ========================================================================\r\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\r\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\r\n * 标 DOM 元素是否为事件代理所期望触发的目标。\r\n * ========================================================================\r\n * @method matches\r\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\r\n * @returns {Boolean}\r\n */\r\nconst matches = (el, selector = '') => {\r\n const sel = selector.replace(/^>/i, '')\r\n\r\n if (!selector || !sel || !el) {\r\n return false\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el.matches) {\r\n return el.matches(sel)\r\n } else if (el.msMatchesSelector) {\r\n return el.msMatchesSelector(sel)\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nexport default matches\r\n","/**\r\n * 获取 DOM 元素的父节点\r\n * ========================================================================\r\n * @method getParentOrHost\r\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\r\n * @returns {*|HTMLElement}\r\n */\r\nconst getParentOrHost = (el) => {\r\n return el.host && el !== document && el.host.nodeType\r\n ? el.host\r\n : el.parentNode\r\n}\r\n\r\nexport default getParentOrHost\r\n","export const CAPTURE_EVENTS = [\r\n 'focusout',\r\n 'blur',\r\n 'focusin',\r\n 'focus',\r\n 'load',\r\n 'unload',\r\n 'mouseenter',\r\n 'mouseleave'\r\n]\r\n","import { CAPTURE_EVENTS } from './enum'\r\nimport _delete from './_delete'\r\n\r\n/**\r\n * (私有方法)取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method _off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} fn - (必须)事件处理器回调函数\r\n * @private\r\n */\r\nconst _off = (el, type, fn) => {\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n /* istanbul ignore else */\r\n if (fn._delegateListener) {\r\n fn = fn._delegateListener\r\n delete fn._delegateListener\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n _delete(el, type, fn)\r\n\r\n el.removeEventListener(type, fn, capture)\r\n}\r\n\r\nexport default _off\r\n","/**\r\n * 删除 DOM 元素缓存的 _listeners 数据\r\n * ========================================================================\r\n * @method _delete\r\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\r\n * @param {String} type - 事件类型(名称)\r\n * @param {Function} [fn] - 事件处理器回调函数\r\n */\r\nconst _delete = function (el, type, fn) {\r\n const listeners = el._listeners\r\n let index = -1\r\n\r\n if (listeners.length < 1) {\r\n return false\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n listeners.forEach((listener, i) => {\r\n const handler = listener.fn\r\n\r\n if (type === listener.type) {\r\n index = i\r\n\r\n if (handler === fn) {\r\n index = i\r\n }\r\n }\r\n })\r\n\r\n /* istanbul ignore else */\r\n if (index > -1) {\r\n listeners.splice(index, 1)\r\n }\r\n}\r\n\r\nexport default _delete\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\nimport getListeners from './getListeners'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 销毁(type 类型的)代理事件绑定\r\n * ========================================================================\r\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\r\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\r\n * ========================================================================\r\n * @method purgeElement\r\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\r\n * @param {String|Boolean} type - (必须)事件类型\r\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\r\n */\r\nconst purgeElement = function (el, type, recurse = false) {\r\n const $element = isString(el) ? document.querySelector(el) : el\r\n const $children = $element.childNodes\r\n const listeners = getListeners($element, type)\r\n\r\n listeners.forEach((listener) => {\r\n _off($element, listener.type, listener.fn)\r\n })\r\n\r\n if (\r\n (recurse || type === true || arguments.length === 1) &&\r\n $element &&\r\n $children\r\n ) {\r\n $children.forEach(($child) => {\r\n if (isElement($child)) {\r\n purgeElement($child, type, recurse)\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default purgeElement\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 获取 DOM 元素(type 事件类型)事件绑定信息\r\n * ========================================================================\r\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\r\n * ========================================================================\r\n * @methods getListeners\r\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\r\n * @param {String} [type] - (可选)事件类型\r\n * @returns {Array} - 已绑定的事件信息\r\n */\r\nconst getListeners = (el, type) => {\r\n let listeners = el._listeners || []\r\n\r\n if (isString(type) && type) {\r\n listeners = listeners.filter((listener) => {\r\n return listener.type === type\r\n })\r\n }\r\n\r\n return listeners\r\n}\r\n\r\nexport default getListeners\r\n","import purgeElement from './purgeElement'\r\nimport isFunction from '../types/isFunction'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} [fn] - (可选)事件处理器回调函数\r\n */\r\nconst off = (el, type, fn) => {\r\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\r\n if (!isFunction(fn)) {\r\n return purgeElement(el, type)\r\n }\r\n\r\n _off(el, type, fn)\r\n}\r\n\r\nexport default off\r\n","import closest from '../dom/closest'\r\nimport off from './off'\r\nimport getTarget from './getTarget'\r\n\r\nimport { CAPTURE_EVENTS } from './enum'\r\n\r\n/**\r\n * 绑定代理事件\r\n * ========================================================================\r\n * @method on\r\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\r\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\r\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\r\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\r\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\r\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\r\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\r\n * @param {Boolean} once - (可选)是否仅触发一次\r\n */\r\nconst on = (el, selector, type, fn, data, context, once = false) => {\r\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n const listener = function (evt) {\r\n const target = getTarget(evt)\r\n // 通过 Element.matches 方法获得点击的目标元素\r\n const delegateTarget = closest(target, selector, el)\r\n let overrideContext = context || el\r\n\r\n evt.delegateTarget = delegateTarget\r\n\r\n // 当设置为 true 时,则事件处理器回调函数的\r\n // this 上下文指向为 data 对象\r\n if (context === true) {\r\n overrideContext = data\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (delegateTarget) {\r\n // 仅触发一次\r\n /* istanbul ignore else */\r\n if (once === true) {\r\n off(el, type, listener)\r\n }\r\n\r\n fn.call(overrideContext, evt, data)\r\n }\r\n }\r\n\r\n if (!el._listeners) {\r\n el._listeners = []\r\n }\r\n\r\n // 缓存 options 元素绑定的事件处理器\r\n el._listeners.push({\r\n el,\r\n selector,\r\n type,\r\n fn: listener,\r\n data,\r\n context,\r\n capture\r\n })\r\n\r\n // 缓存包装后的事件处理器\r\n fn._delegateListener = listener\r\n\r\n el.addEventListener(type, listener, capture)\r\n}\r\n\r\nexport default on\r\n","import resolveTextNode from '../dom/resolveTextNode'\r\n\r\n/**\r\n * 返回触发事件的 target DOM 元素\r\n * ========================================================================\r\n * @method getTarget\r\n * @param {Event} evt - Event 对象\r\n * @return {HTMLElement} - Event 对象的 target DOM 元素\r\n */\r\nconst getTarget = function (evt) {\r\n const target = evt.target\r\n\r\n return resolveTextNode(target)\r\n}\r\n\r\nexport default getTarget\r\n","/**\r\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\r\n * resolveTextNode() 方法则会返回实际的目标节点。\r\n * ========================================================================\r\n * @method resolveTextNode\r\n * @param {HTMLElement|Text} el - 要解析的节点\r\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\r\n */\r\nconst resolveTextNode = function (el) {\r\n if (el && el.nodeType === 3) {\r\n return el.parentNode\r\n }\r\n\r\n return el\r\n}\r\n\r\nexport default resolveTextNode\r\n","import matches from './matches'\r\nimport getParentOrHost from './getParentOrHost'\r\n\r\n/**\r\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\r\n * ========================================================================\r\n * @method closest\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)DOM 元素的选择其\r\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\r\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\r\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\r\n */\r\nconst closest = (el, selector, ctx, includeCTX) => {\r\n const context = ctx || document\r\n\r\n if (!el) {\r\n return null\r\n }\r\n\r\n do {\r\n /* istanbul ignore else */\r\n if (\r\n (selector != null &&\r\n (selector.startsWith('>')\r\n ? el.parentNode === context && matches(el, selector)\r\n : matches(el, selector))) ||\r\n (includeCTX && el === context)\r\n ) {\r\n return el\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el === context) {\r\n break\r\n }\r\n\r\n /* jshint boss:true */\r\n } while ((el = getParentOrHost(el)))\r\n}\r\n\r\nexport default closest\r\n","import DEFAULTS from './defaults'\r\n\r\nconst SYMBOLS = [...DEFAULTS]\r\n\r\nexport default SYMBOLS\r\n","const DEFAULTS = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n]\r\n\r\nexport default DEFAULTS\r\n","import isString from '../types/isString'\r\nimport getSymbol from './getSymbol'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n *\r\n * @method getSymbols\r\n * @param {String} [name]\r\n * @param {String} [iconSet]\r\n * @returns {string[]|*}\r\n */\r\nconst getSymbols = (name, iconSet = 'icon') => {\r\n if (isString(name)) {\r\n return getSymbol(name, iconSet)\r\n }\r\n\r\n return [...SYMBOLS]\r\n}\r\n\r\nexport default getSymbols\r\n","import SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method getSymbol\r\n * @param {String} name\r\n * @param {String} [iconSet]\r\n * @returns {String}\r\n */\r\nconst getSymbol = (name, iconSet = 'icon') => {\r\n const patternName = /id=\"(.*?)\"/\r\n const patternSet = /^(\\w+)-/\r\n const symbols = SYMBOLS\r\n\r\n return symbols.find((symbol) => {\r\n const names = patternName.exec(symbol)\r\n const fullName = names[1]\r\n const sets = patternSet.exec(fullName)\r\n const setName = sets[1]\r\n const iconName =\r\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\r\n\r\n return setName === iconSet && fullName === iconName\r\n })\r\n}\r\n\r\nexport default getSymbol\r\n","import add from './add'\r\nimport getSymbols from './getSymbols'\r\n\r\n/**\r\n * 绘制 SVG 图标集\r\n * ========================================================================\r\n * @method paint\r\n * @param {String|Array} symbol\r\n */\r\nconst paint = (symbol = '') => {\r\n const $body = document.body\r\n let $icons = document.querySelector('#outline-icons')\r\n let symbols = []\r\n\r\n add(symbol)\r\n symbols = getSymbols()\r\n\r\n if ($icons) {\r\n $icons.innerHTML = symbols.join('')\r\n } else {\r\n $icons = document.createElement('div')\r\n $icons.innerHTML =\r\n ``\r\n $body.insertBefore($icons.firstChild, $body.firstChild)\r\n }\r\n}\r\n\r\nexport default paint\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method add\r\n * @param {Array|String} symbols\r\n * @return {Boolean}\r\n */\r\nconst add = (symbols) => {\r\n if (!symbols) {\r\n return false\r\n }\r\n\r\n if (isArray(symbols) && symbols.length > 0) {\r\n symbols.forEach((symbol) => {\r\n /* istanbul ignore else */\r\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\r\n SYMBOLS.push(symbol)\r\n }\r\n })\r\n } else {\r\n /* istanbul ignore else */\r\n if (isString(symbols)) {\r\n SYMBOLS.push(symbols)\r\n }\r\n }\r\n}\r\n\r\nexport default add\r\n","import isString from './isString'\r\n\r\nconst isSVG = (str) => {\r\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\r\n const doctype =\r\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\r\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\r\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\r\n const pattern = new RegExp(svg, 'i')\r\n\r\n return isString(str) && pattern.test(str)\r\n}\r\n\r\nexport default isSVG\r\n","import createElement from './createElement'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method icon\r\n * @alias createElement\r\n * @see createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst icon = (name, options = {}) => {\r\n return createElement(name, options)\r\n}\r\n\r\nexport default icon\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport isSVG from '../types/isSVG'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (name, options = {}) => {\r\n const size = options.size || 0\r\n const color = options.color || ''\r\n const iconSet = options.iconSet || ''\r\n const width = isArray(size) ? size[0] : size\r\n const height = isArray(size) ? size[1] : size\r\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\r\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\r\n const $icon = document.createElement('i')\r\n let binds = ''\r\n let svg = ''\r\n let $svg\r\n\r\n if (!isString(name)) {\r\n return null\r\n }\r\n\r\n if (isSVG(name)) {\r\n svg = name\r\n } else {\r\n binds =\r\n iconSet && iconSet !== 'icon'\r\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\r\n : `xlink:href=\"#icon-${name}\"`\r\n svg =\r\n `` +\r\n `` +\r\n ``\r\n }\r\n\r\n $icon.className = 'outline-icon'\r\n $icon.innerHTML = svg\r\n\r\n if (isSVG(name)) {\r\n $svg = $icon.querySelector('svg')\r\n $svg.setAttribute('aria-hidden', 'true')\r\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\r\n $svg.setAttribute('class', 'outline-icon__svg')\r\n $svg.setAttribute('width', '200')\r\n $svg.setAttribute('height', '200')\r\n $svg.style = cssRules\r\n }\r\n\r\n return $icon\r\n}\r\n\r\nexport default createElement\r\n","import setProperty from './utils/dom/setProperty'\r\n\r\nlet index = 2000\r\n\r\nconst zIndex = (idx) => {\r\n if (idx) {\r\n index = idx\r\n } else {\r\n index += 1\r\n }\r\n\r\n setProperty('--outline-zIndex', `${index}`)\r\n\r\n return index\r\n}\r\n\r\nexport default zIndex\r\n","const setProperty = (prop, value) => {\r\n const documentElement = document.documentElement\r\n documentElement.style.setProperty(prop, value)\r\n}\r\n\r\nexport default setProperty\r\n","import Base from './base'\r\n\r\nimport later from './utils/lang/later'\r\nimport isFunction from './utils/types/isFunction'\r\nimport addClass from './utils/dom/addClass'\r\nimport removeClass from './utils/dom/removeClass'\r\nimport createElement from './utils/dom/createElement'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\n\r\nimport paint from './utils/icons/paint'\r\nimport icon from './utils/icons/icon'\r\nimport zIndex from './zIndex'\r\n\r\nclass Drawer extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Drawer.DEFAULTS\r\n this.title = ''\r\n this.closed = true\r\n this.$el = null\r\n this.$modal = null\r\n this.$header = null\r\n this.$title = null\r\n this.$close = null\r\n this.$main = null\r\n this.$footer = null\r\n this.$overlay = null\r\n this.zIndex = 0\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n\r\n this.attr(options)\r\n\r\n this.title = this.attr('title')\r\n created = this.attr('created')\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n this.render().addListeners()\r\n return this\r\n }\r\n\r\n setTitle(title) {\r\n this.attr('title', title)\r\n this.title = title\r\n this.$title.innerHTML = title\r\n\r\n return this\r\n }\r\n\r\n isClosed() {\r\n return this.closed\r\n }\r\n\r\n render() {\r\n const mounted = this.attr('mounted')\r\n const size = this.attr('size')\r\n const placement = this.attr('placement')\r\n const hasClose = this.attr('hasClose')\r\n const hasOverlay = this.attr('hasOverlay')\r\n const hasOffset = this.attr('hasOffset')\r\n const hasPadding = this.attr('hasPadding')\r\n const autoHeight = this.attr('autoHeight')\r\n const customClass = this.attr('customClass')\r\n let $el\r\n let $modal\r\n let $header\r\n let $title\r\n let $close\r\n let $main\r\n let $footer\r\n let $overlay\r\n\r\n paint()\r\n this.zIndex = zIndex()\r\n\r\n $title = createElement(\r\n 'h2',\r\n {\r\n className: 'outline-drawer__title'\r\n },\r\n [this.title]\r\n )\r\n this.$title = $title\r\n\r\n if (hasClose) {\r\n $close = createElement(\r\n 'div',\r\n {\r\n className: 'outline-drawer__close'\r\n },\r\n [icon('close', { size: 20 })]\r\n )\r\n this.$close = $close\r\n }\r\n\r\n $header = createElement(\r\n 'header',\r\n {\r\n className: 'outline-drawer__header'\r\n },\r\n [$title, $close]\r\n )\r\n this.$header = $header\r\n\r\n $main = createElement(\r\n 'div',\r\n {\r\n className: 'outline-drawer__main'\r\n },\r\n ['']\r\n )\r\n this.$main = $main\r\n\r\n if (!hasPadding) {\r\n addClass($main, 'outline-drawer_full')\r\n }\r\n\r\n $footer = createElement(\r\n 'footer',\r\n {\r\n className: 'outline-drawer__footer'\r\n },\r\n ['']\r\n )\r\n this.$footer = $footer\r\n\r\n $modal = createElement(\r\n 'div',\r\n {\r\n className: `outline-drawer__modal outline-drawer_${placement} outline-drawer_${size} outline-drawer_closed`\r\n },\r\n [$header, $main, $footer]\r\n )\r\n this.$modal = $modal\r\n\r\n if (hasOffset) {\r\n addClass($modal, 'outline-drawer_offset')\r\n }\r\n\r\n if (autoHeight) {\r\n addClass($modal, 'outline-drawer_auto')\r\n }\r\n\r\n if (customClass) {\r\n addClass($modal, customClass)\r\n }\r\n\r\n if (hasOverlay) {\r\n $overlay = createElement(\r\n 'div',\r\n {\r\n className: 'outline-drawer__overlay'\r\n },\r\n ['']\r\n )\r\n this.$overlay = $overlay\r\n }\r\n\r\n $el = createElement(\r\n 'div',\r\n {\r\n className: `outline-drawer`\r\n },\r\n [$modal, $overlay]\r\n )\r\n this.$el = $el\r\n document.body.appendChild($el)\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n open() {\r\n const opened = this.attr('afterOpened')\r\n const $modal = this.$modal\r\n\r\n addClass(this.$el, 'outline-drawer_opened')\r\n removeClass($modal, 'outline-drawer_closed')\r\n addClass($modal, 'outline-drawer_opened')\r\n\r\n later(() => {\r\n this.closed = false\r\n\r\n if (isFunction(opened)) {\r\n opened.call(this)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n close() {\r\n const closed = this.attr('afterClosed')\r\n const $modal = this.$modal\r\n\r\n removeClass($modal, 'outline-drawer_opened')\r\n addClass($modal, 'outline-drawer_closed')\r\n\r\n later(() => {\r\n removeClass(this.$el, 'outline-drawer_opened')\r\n this.closed = true\r\n\r\n if (isFunction(closed)) {\r\n closed.call(this)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n toggle() {\r\n const afterToggle = this.attr('afterToggle')\r\n const closed = this.isClosed()\r\n\r\n if (closed) {\r\n this.open()\r\n } else {\r\n this.close()\r\n }\r\n\r\n if (isFunction(afterToggle)) {\r\n later(() => {\r\n afterToggle.call(this, closed)\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const afterDestroy = this.attr('afterDestroy')\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n let index = this.zIndex\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n\r\n this.attrs = Drawer.DEFAULTS\r\n this.title = ''\r\n this.closed = false\r\n this.$el = null\r\n this.$modal = null\r\n this.$header = null\r\n this.$title = null\r\n this.$close = null\r\n this.$main = null\r\n this.$footer = null\r\n this.$overlay = null\r\n\r\n index -= 1\r\n zIndex(index)\r\n this.zIndex = 0\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const hasClose = this.attr('hasClose')\r\n const hasOverlay = this.attr('hasOverlay')\r\n const $el = this.$el\r\n\r\n if (hasClose) {\r\n on($el, '.outline-drawer__close', 'click', this.onClose, this, true)\r\n }\r\n\r\n if (hasOverlay) {\r\n on($el, '.outline-drawer__overlay', 'click', this.onClose, this, true)\r\n }\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const hasClose = this.attr('hasClose')\r\n const hasOverlay = this.attr('hasOverlay')\r\n const $el = this.$el\r\n\r\n if (!hasClose && !hasOverlay) {\r\n return this\r\n }\r\n\r\n off($el, 'click', this.onClose)\r\n\r\n return this\r\n }\r\n\r\n onClose() {\r\n this.close()\r\n return this\r\n }\r\n}\r\n\r\nDrawer.DEFAULTS = {\r\n placement: 'rtl',\r\n title: '标题',\r\n size: 'regular',\r\n hasClose: true,\r\n hasOverlay: true,\r\n hasOffset: false,\r\n hasPadding: true,\r\n autoHeight: true,\r\n created: null,\r\n mounted: null,\r\n afterClosed: null,\r\n afterOpened: null,\r\n afterScroll: null,\r\n beforeDestroy: null,\r\n afterDestroy: null,\r\n afterToggle: null\r\n}\r\n\r\nexport default Drawer\r\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","later","fn","delay","setTimeout","isElement","nodeName","tagName","nodeType","hasClass","el","className","pattern","RegExp","allClass","classList","contains","exec","addClass","add","removeClass","remove","replace","isArray","Array","isDOM","isHTMLCollection","fragment","isTextNode","createElement","children","$fragment","document","createDocumentFragment","$el","isValidChild","child","append","$child","createTextNode","appendChild","toLowerCase","style","cssText","setAttribute","every","matches","selector","sel","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","querySelector","$children","childNodes","filter","getListeners","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","iconName","getSymbol","paint","$body","body","$icons","symbols","innerHTML","join","insertBefore","firstChild","isSVG","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","zIndex","idx","documentElement","setProperty","Drawer","super","DEFAULTS","title","closed","$modal","$header","$title","$close","$main","$footer","$overlay","created","setTitle","isClosed","mounted","placement","hasClose","hasOverlay","hasOffset","hasPadding","autoHeight","customClass","open","opened","close","toggle","afterToggle","afterDestroy","beforeDestroy","onClose","afterClosed","afterOpened","afterScroll"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"drawer.min.js","sources":["src/utils/types/isString.js","src/utils/lang/hasOwn.js","src/utils/lang/toString.js","src/utils/types/isFunction.js","src/utils/types/isObject.js","src/base.js","src/utils/lang/extend.js","src/utils/lang/later.js","src/utils/types/isElement.js","src/utils/dom/hasClass.js","src/utils/dom/addClass.js","src/utils/dom/removeClass.js","src/utils/lang/trim.js","src/utils/types/isArray.js","src/utils/types/isDOM.js","src/utils/types/isHTMLCollection.js","src/utils/types/isFragment.js","src/utils/types/isTextNode.js","src/utils/dom/createElement.js","src/utils/dom/setAttribute.js","src/utils/dom/matches.js","src/utils/dom/getParentOrHost.js","src/utils/event/enum.js","src/utils/event/_off.js","src/utils/event/_delete.js","src/utils/event/purgeElement.js","src/utils/event/getListeners.js","src/utils/event/off.js","src/utils/event/on.js","src/utils/event/getTarget.js","src/utils/dom/resolveTextNode.js","src/utils/dom/closest.js","src/utils/icons/symbols.js","src/utils/icons/defaults.js","src/utils/icons/getSymbols.js","src/utils/icons/getSymbol.js","src/utils/icons/paint.js","src/utils/icons/add.js","src/utils/types/isSVG.js","src/utils/icons/icon.js","src/utils/icons/createElement.js","src/zIndex.js","src/utils/dom/setProperty.js","src/drawer.js"],"sourcesContent":["/**\n * 检测数据是否为 String 类型\n * ========================================================================\n * @method isArray\n * @param {*} str\n * @returns {boolean}\n */\nconst isString = (str) => {\n return typeof str === 'string'\n}\n\nexport default isString\n","/**\n * 检测对象自身属性中是否具有指定的属性。\n * ========================================================================\n * @method hasOwn\n * @param {Object} obj - (必须)检测的目标对象\n * @param {String} prop - (必须)属性名\n * @returns {Boolean}\n */\nconst hasOwn = (obj, prop) => {\n const hasOwnProperty = Object.prototype.hasOwnProperty\n return obj && hasOwnProperty.call(obj, prop)\n}\n\nexport default hasOwn\n","/**\n * Object 对象原型上的 toString 方法\n * ========================================================================\n * @method toString\n * @param {*} val\n * @returns {string}\n */\nconst toString = (val) => {\n return Object.prototype.toString.apply(val)\n}\n\nexport default toString\n","import toString from '../lang/toString'\n\n/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return typeof val === 'function' || toString(val) === '[object Function]'\n}\n\nexport default isFunction\n","import toString from '../lang/toString'\nimport isFunction from '../types/isFunction'\n\n/**\n * 检测数据是否为 Object 类型\n * ========================================================================\n * @method isObject\n * @param {*} o\n * @returns {boolean}\n */\nconst isObject = (o) => {\n return (\n (toString(o) === '[object Object]' ||\n typeof o === 'object' ||\n isFunction(o)) &&\n o !== null\n )\n}\n\nexport default isObject\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\n\n/**\n * 扩展对象\n * ========================================================================\n * @method extend\n * @param {Object} origin\n * @param {Object} source\n */\nconst extend = (origin, source) => {\n const keys = Object.keys(source)\n\n keys.forEach((prop) => {\n if (hasOwn(source, prop)) {\n origin[prop] = source[prop]\n }\n })\n}\n\nexport default extend\n","import isFunction from '../types/isFunction'\n\n/**\n * later - 延迟执行方法\n * ========================================================================\n * @method later\n * @param {Function} fn\n * @param {Number} [delay]\n * @returns {number|boolean}\n */\nconst later = (fn, delay = 300) => {\n if (!isFunction(fn)) {\n return false\n }\n\n return setTimeout(() => {\n fn()\n }, delay)\n}\n\nexport default later\n","import isObject from './isObject'\n\n/**\n * 检测数据是否为 HTMLElement DOM 节点\n * ========================================================================\n * @method isElement\n * @param {*} o\n * @returns {boolean}\n */\nconst isElement = (o) => {\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\n}\n\nexport default isElement\n","import isElement from '../types/isElement'\n/**\n * 检测 DOM 节点是否包含名为 className 的样式\n * ========================================================================\n * @method hasClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst hasClass = (el, className) => {\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\n let allClass\n let classList\n\n if (!isElement(el)) {\n return false\n }\n\n allClass = el.className\n\n if (!allClass) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.contains) {\n return el.classList.contains(className)\n }\n\n return !!pattern.exec(allClass)\n}\n\nexport default hasClass\n","import hasClass from './hasClass'\n\n/**\n * 给 DOM 节点添加名为 className 的样式\n * ========================================================================\n * @method addClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst addClass = (el, className) => {\n let classList\n let allClass\n\n if (hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.add) {\n classList.add(className)\n } else {\n allClass = el.className\n allClass += allClass.length > 0 ? ' ' + className : className\n el.className = allClass\n }\n}\n\nexport default addClass\n","import trim from '../lang/trim'\nimport hasClass from './hasClass'\n\n/**\n * 移除 DOM 节点的 className 样式\n * ========================================================================\n * @method removeClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst removeClass = (el, className) => {\n let allClass = el.className\n let classList\n\n if (!allClass || !hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.remove) {\n classList.remove(className)\n } else {\n allClass = trim(allClass.replace(className, ''))\n el.className = allClass\n }\n}\n\nexport default removeClass\n","import isString from '../types/isString'\n\n/**\n * 清楚字符串起始位置所有的空格\n * ========================================================================\n * @method trim\n * @param {string} str\n * @returns {string|Boolean}\n */\nconst trim = (str) => {\n if (!isString(str)) {\n return false\n }\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\n}\n\nexport default trim\n","import toString from '../lang/toString'\n\n/**\n * 检测数据是否为 Array 类型\n * ========================================================================\n * @method isArray\n * @param {*} o\n * @returns {boolean}\n */\nconst isArray = (o) => {\n if (Array.isArray) {\n return Array.isArray(o)\n } else {\n return toString(o) === '[object Array]'\n }\n}\n\nexport default isArray\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\nimport isObject from './isObject'\n\nconst isFragment = (fragment) => {\n return !!(\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\n )\n}\n\nexport default isFragment\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","import hasOwn from '../lang/hasOwn'\nimport isObject from '../types/isObject'\nimport isString from '../types/isString'\nimport isArray from '../types/isArray'\nimport isDOM from '../types/isDOM'\nimport setAttribute from './setAttribute'\n\n/**\n * 创建 DOM 节点,并添加属性和子节点\n * ========================================================================\n * @method createElement\n * @param {String} tagName - 标签名称\n * @param {Object|Array} attrs - 属性对象或者子节点\n * @param {Array} [children] - 子节点数组\n * @returns {HTMLElement}\n */\nconst createElement = (tagName, attrs, children) => {\n const $fragment = document.createDocumentFragment()\n const $el = document.createElement(tagName)\n const isValidChild = (child) => {\n return isDOM(child) || isString(child)\n }\n const append = (child) => {\n let $child\n\n if (!isValidChild(child)) {\n return false\n }\n\n if (isDOM(child)) {\n $child = child\n } else if (isString(child)) {\n $child = document.createTextNode(child)\n }\n\n $fragment.appendChild($child)\n }\n\n if (isObject(attrs)) {\n Object.keys(attrs).forEach((attr) => {\n if (hasOwn(attrs, attr)) {\n setAttribute($el, attr, attrs[attr])\n }\n })\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\n attrs.forEach((child) => {\n append(child)\n })\n }\n\n if (isArray(children)) {\n children.forEach((child) => {\n append(child)\n })\n } else {\n append(children)\n }\n\n $el.appendChild($fragment)\n\n return $el\n}\n\nexport default createElement\n","/**\n * 给 DOM 节点设置属性/值\n * ========================================================================\n * @method setAttribute\n * @param {HTMLElement} el - DOM 节点\n * @param {String} attr - 属性名称\n * @param {String|Number|Boolean} value - 属性值\n */\nconst setAttribute = (el, attr, value) => {\n let tagName = el.tagName.toLowerCase()\n\n switch (attr) {\n case 'style':\n el.style.cssText = value\n break\n case 'value':\n if (tagName === 'input' || tagName === 'textarea') {\n el.value = value\n } else {\n el.setAttribute(attr, value)\n }\n break\n case 'className':\n el.className = value\n break\n default:\n el.setAttribute(attr, value)\n break\n }\n}\n\nexport default setAttribute\n","/**\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\n * ========================================================================\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\n * 标 DOM 元素是否为事件代理所期望触发的目标。\n * ========================================================================\n * @method matches\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\n * @returns {Boolean}\n */\nconst matches = (el, selector = '') => {\n const sel = selector.replace(/^>/i, '')\n\n if (!selector || !sel || !el) {\n return false\n }\n\n /* istanbul ignore else */\n if (el.matches) {\n return el.matches(sel)\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(sel)\n } else {\n return false\n }\n}\n\nexport default matches\n","/**\n * 获取 DOM 元素的父节点\n * ========================================================================\n * @method getParentOrHost\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\n * @returns {*|HTMLElement}\n */\nconst getParentOrHost = (el) => {\n return el.host && el !== document && el.host.nodeType\n ? el.host\n : el.parentNode\n}\n\nexport default getParentOrHost\n","export const CAPTURE_EVENTS = [\n 'focusout',\n 'blur',\n 'focusin',\n 'focus',\n 'load',\n 'unload',\n 'mouseenter',\n 'mouseleave'\n]\n","import { CAPTURE_EVENTS } from './enum'\nimport _delete from './_delete'\n\n/**\n * (私有方法)取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method _off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须)事件处理器回调函数\n * @private\n */\nconst _off = (el, type, fn) => {\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n /* istanbul ignore else */\n if (fn._delegateListener) {\n fn = fn._delegateListener\n delete fn._delegateListener\n }\n\n // 移除缓存的 _listeners 数据\n _delete(el, type, fn)\n\n el.removeEventListener(type, fn, capture)\n}\n\nexport default _off\n","/**\n * 删除 DOM 元素缓存的 _listeners 数据\n * ========================================================================\n * @method _delete\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\n * @param {String} type - 事件类型(名称)\n * @param {Function} [fn] - 事件处理器回调函数\n */\nconst _delete = function (el, type, fn) {\n const listeners = el._listeners\n let index = -1\n\n if (listeners.length < 1) {\n return false\n }\n\n // 移除缓存的 _listeners 数据\n listeners.forEach((listener, i) => {\n const handler = listener.fn\n\n if (type === listener.type) {\n index = i\n\n if (handler === fn) {\n index = i\n }\n }\n })\n\n /* istanbul ignore else */\n if (index > -1) {\n listeners.splice(index, 1)\n }\n}\n\nexport default _delete\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\nimport getListeners from './getListeners'\nimport _off from './_off'\n\n/**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purgeElement\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\n * @param {String|Boolean} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n */\nconst purgeElement = function (el, type, recurse = false) {\n const $element = isString(el) ? document.querySelector(el) : el\n const $children = $element.childNodes\n const listeners = getListeners($element, type)\n\n listeners.forEach((listener) => {\n _off($element, listener.type, listener.fn)\n })\n\n if (\n (recurse || type === true || arguments.length === 1) &&\n $element &&\n $children\n ) {\n $children.forEach(($child) => {\n if (isElement($child)) {\n purgeElement($child, type, recurse)\n }\n })\n }\n}\n\nexport default purgeElement\n","import isString from '../types/isString'\n\n/**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @methods getListeners\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\nconst getListeners = (el, type) => {\n let listeners = el._listeners || []\n\n if (isString(type) && type) {\n listeners = listeners.filter((listener) => {\n return listener.type === type\n })\n }\n\n return listeners\n}\n\nexport default getListeners\n","import purgeElement from './purgeElement'\nimport isFunction from '../types/isFunction'\nimport _off from './_off'\n\n/**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} [fn] - (可选)事件处理器回调函数\n */\nconst off = (el, type, fn) => {\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\n if (!isFunction(fn)) {\n return purgeElement(el, type)\n }\n\n _off(el, type, fn)\n}\n\nexport default off\n","import closest from '../dom/closest'\nimport off from './off'\nimport getTarget from './getTarget'\n\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst on = (el, selector, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n const listener = function (evt) {\n const target = getTarget(evt)\n // 通过 Element.matches 方法获得点击的目标元素\n const delegateTarget = closest(target, selector, el)\n let overrideContext = context || el\n\n evt.delegateTarget = delegateTarget\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n /* istanbul ignore else */\n if (delegateTarget) {\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n selector,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default on\n","import resolveTextNode from '../dom/resolveTextNode'\n\n/**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\nconst getTarget = function (evt) {\n const target = evt.target\n\n return resolveTextNode(target)\n}\n\nexport default getTarget\n","/**\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\n * resolveTextNode() 方法则会返回实际的目标节点。\n * ========================================================================\n * @method resolveTextNode\n * @param {HTMLElement|Text} el - 要解析的节点\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\n */\nconst resolveTextNode = function (el) {\n if (el && el.nodeType === 3) {\n return el.parentNode\n }\n\n return el\n}\n\nexport default resolveTextNode\n","import matches from './matches'\nimport getParentOrHost from './getParentOrHost'\n\n/**\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\n * ========================================================================\n * @method closest\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)DOM 元素的选择其\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\n */\nconst closest = (el, selector, ctx, includeCTX) => {\n const context = ctx || document\n\n if (!el) {\n return null\n }\n\n do {\n /* istanbul ignore else */\n if (\n (selector != null &&\n (selector.startsWith('>')\n ? el.parentNode === context && matches(el, selector)\n : matches(el, selector))) ||\n (includeCTX && el === context)\n ) {\n return el\n }\n\n /* istanbul ignore else */\n if (el === context) {\n break\n }\n\n /* jshint boss:true */\n } while ((el = getParentOrHost(el)))\n}\n\nexport default closest\n","import DEFAULTS from './defaults'\n\nconst SYMBOLS = [...DEFAULTS]\n\nexport default SYMBOLS\n","const DEFAULTS = [\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n ''\n]\n\nexport default DEFAULTS\n","import isString from '../types/isString'\nimport getSymbol from './getSymbol'\nimport SYMBOLS from './symbols'\n\n/**\n *\n * @method getSymbols\n * @param {String} [name]\n * @param {String} [iconSet]\n * @returns {string[]|*}\n */\nconst getSymbols = (name, iconSet = 'icon') => {\n if (isString(name)) {\n return getSymbol(name, iconSet)\n }\n\n return [...SYMBOLS]\n}\n\nexport default getSymbols\n","import SYMBOLS from './symbols'\n\n/**\n * @method getSymbol\n * @param {String} name\n * @param {String} [iconSet]\n * @returns {String}\n */\nconst getSymbol = (name, iconSet = 'icon') => {\n const patternName = /id=\"(.*?)\"/\n const patternSet = /^(\\w+)-/\n const symbols = SYMBOLS\n\n return symbols.find((symbol) => {\n const names = patternName.exec(symbol)\n const fullName = names[1]\n const sets = patternSet.exec(fullName)\n const setName = sets[1]\n const iconName =\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\n\n return setName === iconSet && fullName === iconName\n })\n}\n\nexport default getSymbol\n","import add from './add'\nimport getSymbols from './getSymbols'\n\n/**\n * 绘制 SVG 图标集\n * ========================================================================\n * @method paint\n * @param {String|Array} symbol\n */\nconst paint = (symbol = '') => {\n const $body = document.body\n let $icons = document.querySelector('#outline-icons')\n let symbols = []\n\n add(symbol)\n symbols = getSymbols()\n\n if ($icons) {\n $icons.innerHTML = symbols.join('')\n } else {\n $icons = document.createElement('div')\n $icons.innerHTML =\n ``\n $body.insertBefore($icons.firstChild, $body.firstChild)\n }\n}\n\nexport default paint\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport SYMBOLS from './symbols'\n\n/**\n * @method add\n * @param {Array|String} symbols\n * @return {Boolean}\n */\nconst add = (symbols) => {\n if (!symbols) {\n return false\n }\n\n if (isArray(symbols) && symbols.length > 0) {\n symbols.forEach((symbol) => {\n /* istanbul ignore else */\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\n SYMBOLS.push(symbol)\n }\n })\n } else {\n /* istanbul ignore else */\n if (isString(symbols)) {\n SYMBOLS.push(symbols)\n }\n }\n}\n\nexport default add\n","import isString from './isString'\n\nconst isSVG = (str) => {\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\n const doctype =\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\n const pattern = new RegExp(svg, 'i')\n\n return isString(str) && pattern.test(str)\n}\n\nexport default isSVG\n","import createElement from './createElement'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method icon\n * @alias createElement\n * @see createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst icon = (name, options = {}) => {\n return createElement(name, options)\n}\n\nexport default icon\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport isSVG from '../types/isSVG'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst createElement = (name, options = {}) => {\n const size = options.size || 0\n const color = options.color || ''\n const iconSet = options.iconSet || ''\n const width = isArray(size) ? size[0] : size\n const height = isArray(size) ? size[1] : size\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\n const $icon = document.createElement('i')\n let binds = ''\n let svg = ''\n let $svg\n\n if (!isString(name)) {\n return null\n }\n\n if (isSVG(name)) {\n svg = name\n } else {\n binds =\n iconSet && iconSet !== 'icon'\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\n : `xlink:href=\"#icon-${name}\"`\n svg =\n `` +\n `` +\n ``\n }\n\n $icon.className = 'outline-icon'\n $icon.innerHTML = svg\n\n if (isSVG(name)) {\n $svg = $icon.querySelector('svg')\n $svg.setAttribute('aria-hidden', 'true')\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n $svg.setAttribute('class', 'outline-icon__svg')\n $svg.setAttribute('width', '200')\n $svg.setAttribute('height', '200')\n $svg.style = cssRules\n }\n\n return $icon\n}\n\nexport default createElement\n","import setProperty from './utils/dom/setProperty'\n\nlet index = 2000\n\nconst zIndex = (idx) => {\n if (idx) {\n index = idx\n } else {\n index += 1\n }\n\n setProperty('--outline-zIndex', `${index}`)\n\n return index\n}\n\nexport default zIndex\n","const setProperty = (prop, value) => {\r\n const documentElement = document.documentElement\r\n documentElement.style.setProperty(prop, value)\r\n}\r\n\r\nexport default setProperty\r\n","import Base from './base'\n\nimport later from './utils/lang/later'\nimport isFunction from './utils/types/isFunction'\nimport addClass from './utils/dom/addClass'\nimport removeClass from './utils/dom/removeClass'\nimport createElement from './utils/dom/createElement'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\n\nimport paint from './utils/icons/paint'\nimport icon from './utils/icons/icon'\nimport zIndex from './zIndex'\n\nclass Drawer extends Base {\n constructor(options) {\n super()\n\n this.attrs = Drawer.DEFAULTS\n this.title = ''\n this.closed = true\n this.$el = null\n this.$modal = null\n this.$header = null\n this.$title = null\n this.$close = null\n this.$main = null\n this.$footer = null\n this.$overlay = null\n this.zIndex = 0\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n\n this.attr(options)\n\n this.title = this.attr('title')\n created = this.attr('created')\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n this.render().addListeners()\n return this\n }\n\n setTitle(title) {\n this.attr('title', title)\n this.title = title\n this.$title.innerHTML = title\n\n return this\n }\n\n isClosed() {\n return this.closed\n }\n\n render() {\n const mounted = this.attr('mounted')\n const size = this.attr('size')\n const placement = this.attr('placement')\n const hasClose = this.attr('hasClose')\n const hasOverlay = this.attr('hasOverlay')\n const hasOffset = this.attr('hasOffset')\n const hasPadding = this.attr('hasPadding')\n const autoHeight = this.attr('autoHeight')\n const customClass = this.attr('customClass')\n let $el\n let $modal\n let $header\n let $title\n let $close\n let $main\n let $footer\n let $overlay\n\n paint()\n this.zIndex = zIndex()\n\n $title = createElement(\n 'h2',\n {\n className: 'outline-drawer__title'\n },\n [this.title]\n )\n this.$title = $title\n\n if (hasClose) {\n $close = createElement(\n 'div',\n {\n className: 'outline-drawer__close'\n },\n [icon('close', { size: 20 })]\n )\n this.$close = $close\n }\n\n $header = createElement(\n 'header',\n {\n className: 'outline-drawer__header'\n },\n [$title, $close]\n )\n this.$header = $header\n\n $main = createElement(\n 'div',\n {\n className: 'outline-drawer__main'\n },\n ['']\n )\n this.$main = $main\n\n if (!hasPadding) {\n addClass($main, 'outline-drawer_full')\n }\n\n $footer = createElement(\n 'footer',\n {\n className: 'outline-drawer__footer'\n },\n ['']\n )\n this.$footer = $footer\n\n $modal = createElement(\n 'div',\n {\n className: `outline-drawer__modal outline-drawer_${placement} outline-drawer_${size} outline-drawer_closed`\n },\n [$header, $main, $footer]\n )\n this.$modal = $modal\n\n if (hasOffset) {\n addClass($modal, 'outline-drawer_offset')\n }\n\n if (autoHeight) {\n addClass($modal, 'outline-drawer_auto')\n }\n\n if (customClass) {\n addClass($modal, customClass)\n }\n\n if (hasOverlay) {\n $overlay = createElement(\n 'div',\n {\n className: 'outline-drawer__overlay'\n },\n ['']\n )\n this.$overlay = $overlay\n }\n\n $el = createElement(\n 'div',\n {\n className: `outline-drawer`\n },\n [$modal, $overlay]\n )\n this.$el = $el\n document.body.appendChild($el)\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n return this\n }\n\n open() {\n const opened = this.attr('afterOpened')\n const $modal = this.$modal\n\n addClass(this.$el, 'outline-drawer_opened')\n removeClass($modal, 'outline-drawer_closed')\n addClass($modal, 'outline-drawer_opened')\n\n later(() => {\n this.closed = false\n\n if (isFunction(opened)) {\n opened.call(this)\n }\n })\n\n return this\n }\n\n close() {\n const closed = this.attr('afterClosed')\n const $modal = this.$modal\n\n removeClass($modal, 'outline-drawer_opened')\n addClass($modal, 'outline-drawer_closed')\n\n later(() => {\n removeClass(this.$el, 'outline-drawer_opened')\n this.closed = true\n\n if (isFunction(closed)) {\n closed.call(this)\n }\n })\n\n return this\n }\n\n toggle() {\n const afterToggle = this.attr('afterToggle')\n const closed = this.isClosed()\n\n if (closed) {\n this.open()\n } else {\n this.close()\n }\n\n if (isFunction(afterToggle)) {\n later(() => {\n afterToggle.call(this, closed)\n })\n }\n\n return this\n }\n\n destroy() {\n const afterDestroy = this.attr('afterDestroy')\n const beforeDestroy = this.attr('beforeDestroy')\n let index = this.zIndex\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n\n this.attrs = Drawer.DEFAULTS\n this.title = ''\n this.closed = false\n this.$el = null\n this.$modal = null\n this.$header = null\n this.$title = null\n this.$close = null\n this.$main = null\n this.$footer = null\n this.$overlay = null\n\n index -= 1\n zIndex(index)\n this.zIndex = 0\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n return this\n }\n\n addListeners() {\n const hasClose = this.attr('hasClose')\n const hasOverlay = this.attr('hasOverlay')\n const $el = this.$el\n\n if (hasClose) {\n on($el, '.outline-drawer__close', 'click', this.onClose, this, true)\n }\n\n if (hasOverlay) {\n on($el, '.outline-drawer__overlay', 'click', this.onClose, this, true)\n }\n\n return this\n }\n\n removeListeners() {\n const hasClose = this.attr('hasClose')\n const hasOverlay = this.attr('hasOverlay')\n const $el = this.$el\n\n if (!hasClose && !hasOverlay) {\n return this\n }\n\n off($el, 'click', this.onClose)\n\n return this\n }\n\n onClose() {\n this.close()\n return this\n }\n}\n\nDrawer.DEFAULTS = {\n placement: 'rtl',\n title: '标题',\n size: 'regular',\n hasClose: true,\n hasOverlay: true,\n hasOffset: false,\n hasPadding: true,\n autoHeight: true,\n created: null,\n mounted: null,\n afterClosed: null,\n afterOpened: null,\n afterScroll: null,\n beforeDestroy: null,\n afterDestroy: null,\n afterToggle: null\n}\n\nexport default Drawer\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","later","fn","delay","setTimeout","isElement","nodeName","tagName","nodeType","hasClass","el","className","pattern","RegExp","allClass","classList","contains","exec","addClass","add","removeClass","remove","replace","isArray","Array","isDOM","isHTMLCollection","fragment","isTextNode","createElement","children","$fragment","document","createDocumentFragment","$el","isValidChild","child","append","$child","createTextNode","appendChild","toLowerCase","style","cssText","setAttribute","every","matches","selector","sel","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","querySelector","$children","childNodes","filter","getListeners","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","iconName","getSymbol","paint","$body","body","$icons","symbols","innerHTML","join","insertBefore","firstChild","isSVG","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","zIndex","idx","documentElement","setProperty","Drawer","super","DEFAULTS","title","closed","$modal","$header","$title","$close","$main","$footer","$overlay","created","setTitle","isClosed","mounted","placement","hasClose","hasOverlay","hasOffset","hasPadding","autoHeight","customClass","open","opened","close","toggle","afterToggle","afterDestroy","beforeDestroy","onClose","afterClosed","afterOpened","afterScroll"],"mappings":"uOAOA,MAAMA,EAAYC,GACM,iBAARA,ECAVC,EAAS,CAACC,EAAKC,KACnB,MAAMC,EAAiBC,OAAOC,UAAUF,eACxC,OAAOF,GAAOE,EAAeG,KAAKL,EAAKC,EAAI,ECHvCK,EAAYC,GACTJ,OAAOC,UAAUE,SAASE,MAAMD,GCCnCE,EAAcF,GACI,mBAARA,GAAwC,sBAAlBD,EAASC,GCAzCG,EAAYC,IAEG,oBAAhBL,EAASK,IACK,iBAANA,GACPF,EAAWE,KACP,OAANA,ECVJ,MAAMC,EACJC,YAAYC,GACVC,KAAKC,MAAQ,CAAE,EAEXF,GACFC,KAAKE,WAAWH,EAEnB,CAEDG,WAAWH,GAET,OADAC,KAAKG,KAAKJ,GAASK,SAASC,eACrBL,IACR,CAEDG,KAAKjB,EAAMoB,GACT,MAAML,EAAQD,KAAKC,MAEnB,OAAInB,EAASI,GAEPoB,GAAStB,EAAOiB,EAAOf,IAEzBe,EAAMf,GAAQoB,EACPN,MAIFC,EAAMf,GACJS,EAAST,ICvBRqB,EDyBHN,ECzBWO,EDyBJtB,ECxBLE,OAAOqB,KAAKD,GAEpBE,SAASxB,IACRF,EAAOwB,EAAQtB,KACjBqB,EAAOrB,GAAQsB,EAAOtB,GACvB,IDqBQc,MACuB,IAArBW,UAAUC,OAEZX,EAGFD,KCjCI,IAACO,EAAQC,CDkCrB,CAEDJ,SACE,OAAOJ,IACR,CAEDa,UAEE,OADAb,KAAKc,kBACEd,IACR,CAEDe,OAAOhB,GAEL,OADAC,KAAKa,UAAUX,WAAWF,KAAKG,KAAKJ,IAC7BC,IACR,CAEDK,eACE,OAAOL,IACR,CAEDc,kBACE,OAAOd,IACR,EEvDH,MAAMgB,EAAQ,CAACC,EAAIC,EAAQ,QACpBxB,EAAWuB,IAITE,YAAW,KAChBF,GAAI,GACHC,GCRCE,EAAaxB,MACPD,EAASC,IAAMA,EAAEyB,UAAYzB,EAAE0B,SAA0B,IAAf1B,EAAE2B,UCDlDC,EAAW,CAACC,EAAIC,KACpB,MAAMC,EAAU,IAAIC,OAAO,UAAYF,EAAY,WACnD,IAAIG,EACAC,EAEJ,QAAKV,EAAUK,KAIfI,EAAWJ,EAAGC,YAETG,IAILC,EAAYL,EAAGK,UAEXA,GAAWC,SACNN,EAAGK,UAAUC,SAASL,KAGtBC,EAAQK,KAAKH,IAAQ,ECpB1BI,EAAW,CAACR,EAAIC,KACpB,IAAII,EACAD,EAEJ,GAAIL,EAASC,EAAIC,GACf,OAAO,EAGTI,EAAYL,EAAGK,UAEXA,GAAWI,IACbJ,EAAUI,IAAIR,IAEdG,EAAWJ,EAAGC,UACdG,GAAYA,EAASjB,OAAS,EAAI,IAAMc,EAAYA,EACpDD,EAAGC,UAAYG,EAChB,ECfGM,EAAc,CAACV,EAAIC,KACvB,IACII,EADAD,EAAWJ,EAAGC,UAGlB,IAAKG,IAAaL,EAASC,EAAIC,GAC7B,OAAO,ECPE,IAAC3C,EDUZ+C,EAAYL,EAAGK,UAEXA,GAAWM,OACbN,EAAUM,OAAOV,ICbP3C,EDeM8C,EAASQ,QAAQX,EAAW,IAA5CG,ICdG/C,EAASC,IAGPA,EAAIsD,QAAQ,iBAAkB,IDYnCZ,EAAGC,UAAYG,EAChB,EEjBGS,EAAW1C,GACX2C,MAAMD,QACDC,MAAMD,QAAQ1C,GAEE,mBAAhBL,EAASK,GCPd4C,EAASf,IACb,SACE9B,EAAS8B,MACRL,EAAUK,ICNU,CAACA,MACd9B,EAAS8B,IAAwB,sBAAjBlC,EAASkC,IDKfgB,CAAiBhB,KENnBiB,EFMqCjB,EEJrD9B,EAAS+C,IAAoC,8BAAvBnD,EAASmD,KCFhB,CAACjB,MAEhB9B,EAAS8B,MACS,kBAAjBlC,EAASkC,IAA4BA,EAAGH,SAA2B,IAAhBG,EAAGF,WHGKoB,CAAWlB,KENxD,IAACiB,CFOjB,EIMGE,EAAgB,CAACtB,EAASrB,EAAO4C,KACrC,MAAMC,EAAYC,SAASC,yBACrBC,EAAMF,SAASH,cAActB,GAC7B4B,EAAgBC,GACbX,EAAMW,IAAUrE,EAASqE,GAE5BC,EAAUD,IACd,IAAIE,EAEJ,IAAKH,EAAaC,GAChB,OAAO,EAGLX,EAAMW,GACRE,EAASF,EACArE,EAASqE,KAClBE,EAASN,SAASO,eAAeH,IAGnCL,EAAUS,YAAYF,EAAO,EAyB/B,OAtBI1D,EAASM,GACXb,OAAOqB,KAAKR,GAAOS,SAASP,IACtBnB,EAAOiB,EAAOE,IChCH,EAACsB,EAAItB,EAAMG,KAC9B,IAAIgB,EAAUG,EAAGH,QAAQkC,cAEzB,OAAQrD,GACN,IAAK,QACHsB,EAAGgC,MAAMC,QAAUpD,EACnB,MACF,IAAK,QACa,UAAZgB,GAAmC,aAAZA,EACzBG,EAAGnB,MAAQA,EAEXmB,EAAGkC,aAAaxD,EAAMG,GAExB,MACF,IAAK,YACHmB,EAAGC,UAAYpB,EACf,MACF,QACEmB,EAAGkC,aAAaxD,EAAMG,GAEzB,EDaKqD,CAAaV,EAAK9C,EAAMF,EAAME,GAC/B,IAEMmC,EAAQrC,IAAUA,EAAM2D,OAAOzD,GAAS+C,EAAa/C,MAC9DF,EAAMS,SAASyC,IACbC,EAAOD,EAAM,IAIbb,EAAQO,GACVA,EAASnC,SAASyC,IAChBC,EAAOD,EAAM,IAGfC,EAAOP,GAGTI,EAAIM,YAAYT,GAETG,GE/CHY,EAAU,CAACpC,EAAIqC,EAAW,MAC9B,MAAMC,EAAMD,EAASzB,QAAQ,MAAO,IAEpC,SAAKyB,GAAaC,GAAQtC,KAKtBA,EAAGoC,QACEpC,EAAGoC,QAAQE,KACTtC,EAAGuC,mBACLvC,EAAGuC,kBAAkBD,GAG7B,ECpBGE,EAAmBxC,GAChBA,EAAGyC,MAAQzC,IAAOsB,UAAYtB,EAAGyC,KAAK3C,SACzCE,EAAGyC,KACHzC,EAAG0C,WCVIC,EAAiB,CAC5B,WACA,OACA,UACA,QACA,OACA,SACA,aACA,cCMIC,EAAO,CAAC5C,EAAI6C,EAAMrD,KACtB,MAAMsD,EAAUH,EAAeI,QAAQF,IAAS,EAG5CrD,EAAGwD,0BACLxD,EAAKA,EAAGwD,mBACEA,kBCZE,SAAUhD,EAAI6C,EAAMrD,GAClC,MAAMyD,EAAYjD,EAAGkD,WACrB,IAAIC,GAAS,EAEb,GAAIF,EAAU9D,OAAS,EACrB,OAAO,EAIT8D,EAAUhE,SAAQ,CAACmE,EAAUC,KAC3B,MAAMC,EAAUF,EAAS5D,GAErBqD,IAASO,EAASP,OACpBM,EAAQE,EAEJC,IAAY9D,IACd2D,EAAQE,GAEX,IAICF,GAAS,GACXF,EAAUM,OAAOJ,EAAO,EAE5B,CDTEK,CAAQxD,EAAI6C,EAAMrD,GAElBQ,EAAGyD,oBAAoBZ,EAAMrD,EAAIsD,EAAQ,EEVrCY,EAAe,SAAU1D,EAAI6C,EAAMc,GAAU,GACjD,MAAMC,EAAWvG,EAAS2C,GAAMsB,SAASuC,cAAc7D,GAAMA,EACvD8D,EAAYF,EAASG,WACrBd,ECPa,EAACjD,EAAI6C,KACxB,IAAII,EAAYjD,EAAGkD,YAAc,GAQjC,OANI7F,EAASwF,IAASA,IACpBI,EAAYA,EAAUe,QAAQZ,GACrBA,EAASP,OAASA,KAItBI,GDFWgB,CAAaL,EAAUf,GAEzCI,EAAUhE,SAASmE,IACjBR,EAAKgB,EAAUR,EAASP,KAAMO,EAAS5D,GAAG,KAIzCmE,IAAoB,IAATd,GAAsC,IAArB3D,UAAUC,SACvCyE,GACAE,GAEAA,EAAU7E,SAAS2C,IACbjC,EAAUiC,IACZ8B,EAAa9B,EAAQiB,EAAMc,EAC5B,GAGP,EEtBMO,EAAM,CAAClE,EAAI6C,EAAMrD,KAErB,IAAKvB,EAAWuB,GACd,OAAOkE,EAAa1D,EAAI6C,GAG1BD,EAAK5C,EAAI6C,EAAMrD,EAAG,ECDd2E,EAAK,CAACnE,EAAIqC,EAAUQ,EAAMrD,EAAI4E,EAAMC,EAASC,GAAO,KAExD,MAAMxB,EAAUH,EAAeI,QAAQF,IAAS,EAE1CO,EAAW,SAAUmB,GACzB,MAAMC,ECfQ,SAAUD,GAC1B,MAAMC,EAASD,EAAIC,OAEnB,OCJgCxE,EDITwE,ICHG,IAAhBxE,EAAGF,SACJE,EAAG0C,WAGL1C,EALe,IAAUA,CDKlC,CDWmByE,CAAUF,GAEnBG,EGbM,EAAC1E,EAAIqC,EAAUsC,EAAKC,KAClC,MAAMP,EAAUM,GAAOrD,SAEvB,IAAKtB,EACH,OAAO,KAGT,EAAG,CAED,GACe,MAAZqC,IACEA,EAASwC,WAAW,KACjB7E,EAAG0C,aAAe2B,GAAWjC,EAAQpC,EAAIqC,GACzCD,EAAQpC,EAAIqC,KACjBuC,GAAc5E,IAAOqE,EAEtB,OAAOrE,EAIT,GAAIA,IAAOqE,EACT,KAIN,OAAYrE,EAAKwC,EAAgBxC,GAAK,EHZX8E,CAAQN,EAAQnC,EAAUrC,GACjD,IAAI+E,EAAkBV,GAAWrE,EAEjCuE,EAAIG,eAAiBA,GAIL,IAAZL,IACFU,EAAkBX,GAIhBM,KAGW,IAATJ,GACFJ,EAAIlE,EAAI6C,EAAMO,GAGhB5D,EAAG3B,KAAKkH,EAAiBR,EAAKH,GAEjC,EAEIpE,EAAGkD,aACNlD,EAAGkD,WAAa,IAIlBlD,EAAGkD,WAAW8B,KAAK,CACjBhF,KACAqC,WACAQ,OACArD,GAAI4D,EACJgB,OACAC,UACAvB,YAIFtD,EAAGwD,kBAAoBI,EAEvBpD,EAAGiF,iBAAiBpC,EAAMO,EAAUN,EAAQ,EIjExCoC,EAAU,CCDd,gbACA,2bACA,+MACA,yqBACA,4UACA,kqBACA,q4DACA,0wBACA,wvBCEIC,EAAa,CAACC,EAAMC,EAAU,SAC9BhI,EAAS+H,GCJG,EAACA,EAAMC,EAAU,UACjC,MAAMC,EAAc,aACdC,EAAa,UAGnB,OAFgBL,EAEDM,MAAMC,IACnB,MACMC,EADQJ,EAAY/E,KAAKkF,GACR,GAMvB,OALaF,EAAWhF,KAAKmF,GACR,KAIFL,GAAWK,KAFhB,SAAZL,EAAqB,GAAGA,KAAWD,IAAS,GAAGC,UAAgBD,IAEtBO,GAC5C,EDTQC,CAAUR,EAAMC,GAGlB,IAAIH,GEPPW,EAAQ,CAACJ,EAAS,MACtB,MAAMK,EAAQxE,SAASyE,KACvB,IAAIC,EAAS1E,SAASuC,cAAc,kBAChCoC,EAAU,GCHJ,CAACA,IACX,IAAKA,EACH,OAAO,EAGLpF,EAAQoF,IAAYA,EAAQ9G,OAAS,EACvC8G,EAAQhH,SAASwG,KAEkB,IAA7BP,EAAQnC,QAAQ0C,IAAkBpI,EAASoI,IAC7CP,EAAQF,KAAKS,EACd,IAICpI,EAAS4I,IACXf,EAAQF,KAAKiB,EAEhB,EDZDxF,CAAIgF,GACJQ,EAAUd,IAENa,EACFA,EAAOE,UAAYD,EAAQE,KAAK,KAEhCH,EAAS1E,SAASH,cAAc,OAChC6E,EAAOE,UAEL,uHAAGD,EAAQE,KAAK,YAElBL,EAAMM,aAAaJ,EAAOK,WAAYP,EAAMO,YAC7C,EExBGC,EAAShJ,IACb,MAKM4C,EAAU,IAAIC,OADR,uIACoB,KAEhC,OAAO9C,EAASC,IAAQ4C,EAAQqG,KAAKjJ,EAAG,ECKpCkJ,EAAO,CAACpB,EAAM9G,EAAU,KCAR,EAAC8G,EAAM9G,EAAU,MACrC,MAAMmI,EAAOnI,EAAQmI,MAAQ,EACvBC,EAAQpI,EAAQoI,OAAS,GACzBrB,EAAU/G,EAAQ+G,SAAW,GAC7BsB,EAAQ9F,EAAQ4F,GAAQA,EAAK,GAAKA,EAClCG,EAAS/F,EAAQ4F,GAAQA,EAAK,GAAKA,EACnCI,EAAeJ,EAAO,SAASE,cAAkBC,OAAc,GAC/DE,EAAWJ,EAAQG,EAAe,SAASH,IAAUG,EACrDE,EAAQzF,SAASH,cAAc,KACrC,IAEI6F,EAFAC,EAAQ,GACRC,EAAM,GAGV,OAAK7J,EAAS+H,IAIVkB,EAAMlB,GACR8B,EAAM9B,GAEN6B,EACE5B,GAAuB,SAAZA,EACP,gBAAgBA,UAAgBD,KAChC,qBAAqBA,KAC3B8B,EACE,4DAA4DJ,WACpDG,kBAIZF,EAAM9G,UAAY,eAClB8G,EAAMb,UAAYgB,EAEdZ,EAAMlB,KACR4B,EAAOD,EAAMlD,cAAc,OAC3BmD,EAAK9E,aAAa,cAAe,QACjC8E,EAAK9E,aAAa,QAAS,8BAC3B8E,EAAK9E,aAAa,QAAS,qBAC3B8E,EAAK9E,aAAa,QAAS,OAC3B8E,EAAK9E,aAAa,SAAU,OAC5B8E,EAAKhF,MAAQ8E,GAGRC,GA7BE,IA6BFA,ED1CA5F,CAAciE,EAAM9G,GEd7B,IAAI6E,EAAQ,IAEZ,MAAMgE,EAAUC,ICJI,IAAC3J,EAAMoB,EDazB,OARIuI,EACFjE,EAAQiE,EAERjE,GAAS,ECRQ1F,EDWP,mBCXaoB,EDWO,GAAGsE,ICVX7B,SAAS+F,gBACjBrF,MAAMsF,YAAY7J,EAAMoB,GDWjCsE,GECT,MAAMoE,UAAenJ,EACnBC,YAAYC,GACVkJ,QAEAjJ,KAAKC,MAAQ+I,EAAOE,SACpBlJ,KAAKmJ,MAAQ,GACbnJ,KAAKoJ,QAAS,EACdpJ,KAAKiD,IAAM,KACXjD,KAAKqJ,OAAS,KACdrJ,KAAKsJ,QAAU,KACftJ,KAAKuJ,OAAS,KACdvJ,KAAKwJ,OAAS,KACdxJ,KAAKyJ,MAAQ,KACbzJ,KAAK0J,QAAU,KACf1J,KAAK2J,SAAW,KAChB3J,KAAK4I,OAAS,EAEV7I,GACFC,KAAKE,WAAWH,EAEnB,CAEDG,WAAWH,GACT,IAAI6J,EAYJ,OAVA5J,KAAKG,KAAKJ,GAEVC,KAAKmJ,MAAQnJ,KAAKG,KAAK,SACvByJ,EAAU5J,KAAKG,KAAK,WAEhBT,EAAWkK,IACbA,EAAQtK,KAAKU,MAGfA,KAAKI,SAASC,eACPL,IACR,CAED6J,SAASV,GAKP,OAJAnJ,KAAKG,KAAK,QAASgJ,GACnBnJ,KAAKmJ,MAAQA,EACbnJ,KAAKuJ,OAAO5B,UAAYwB,EAEjBnJ,IACR,CAED8J,WACE,OAAO9J,KAAKoJ,MACb,CAEDhJ,SACE,MAAM2J,EAAU/J,KAAKG,KAAK,WACpB+H,EAAOlI,KAAKG,KAAK,QACjB6J,EAAYhK,KAAKG,KAAK,aACtB8J,EAAWjK,KAAKG,KAAK,YACrB+J,EAAalK,KAAKG,KAAK,cACvBgK,EAAYnK,KAAKG,KAAK,aACtBiK,EAAapK,KAAKG,KAAK,cACvBkK,EAAarK,KAAKG,KAAK,cACvBmK,EAActK,KAAKG,KAAK,eAC9B,IAAI8C,EACAoG,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAsGJ,OApGArC,IACAtH,KAAK4I,OAASA,IAEdW,EAAS3G,EACP,KACA,CACElB,UAAW,yBAEb,CAAC1B,KAAKmJ,QAERnJ,KAAKuJ,OAASA,EAEVU,IACFT,EAAS5G,EACP,MACA,CACElB,UAAW,yBAEb,CAACuG,EAAK,QAAS,CAAEC,KAAM,OAEzBlI,KAAKwJ,OAASA,GAGhBF,EAAU1G,EACR,SACA,CACElB,UAAW,0BAEb,CAAC6H,EAAQC,IAEXxJ,KAAKsJ,QAAUA,EAEfG,EAAQ7G,EACN,MACA,CACElB,UAAW,wBAEb,CAAC,KAEH1B,KAAKyJ,MAAQA,EAERW,GACHnI,EAASwH,EAAO,uBAGlBC,EAAU9G,EACR,SACA,CACElB,UAAW,0BAEb,CAAC,KAEH1B,KAAK0J,QAAUA,EAEfL,EAASzG,EACP,MACA,CACElB,UAAW,wCAAwCsI,oBAA4B9B,2BAEjF,CAACoB,EAASG,EAAOC,IAEnB1J,KAAKqJ,OAASA,EAEVc,GACFlI,EAASoH,EAAQ,yBAGfgB,GACFpI,EAASoH,EAAQ,uBAGfiB,GACFrI,EAASoH,EAAQiB,GAGfJ,IACFP,EAAW/G,EACT,MACA,CACElB,UAAW,2BAEb,CAAC,KAEH1B,KAAK2J,SAAWA,GAGlB1G,EAAML,EACJ,MACA,CACElB,UAAW,kBAEb,CAAC2H,EAAQM,IAEX3J,KAAKiD,IAAMA,EACXF,SAASyE,KAAKjE,YAAYN,GAEtBvD,EAAWqK,IACbA,EAAQzK,KAAKU,MAGRA,IACR,CAEDuK,OACE,MAAMC,EAASxK,KAAKG,KAAK,eACnBkJ,EAASrJ,KAAKqJ,OAcpB,OAZApH,EAASjC,KAAKiD,IAAK,yBACnBd,EAAYkH,EAAQ,yBACpBpH,EAASoH,EAAQ,yBAEjBrI,GAAM,KACJhB,KAAKoJ,QAAS,EAEV1J,EAAW8K,IACbA,EAAOlL,KAAKU,KACb,IAGIA,IACR,CAEDyK,QACE,MAAMrB,EAASpJ,KAAKG,KAAK,eACnBkJ,EAASrJ,KAAKqJ,OAcpB,OAZAlH,EAAYkH,EAAQ,yBACpBpH,EAASoH,EAAQ,yBAEjBrI,GAAM,KACJmB,EAAYnC,KAAKiD,IAAK,yBACtBjD,KAAKoJ,QAAS,EAEV1J,EAAW0J,IACbA,EAAO9J,KAAKU,KACb,IAGIA,IACR,CAED0K,SACE,MAAMC,EAAc3K,KAAKG,KAAK,eACxBiJ,EAASpJ,KAAK8J,WAcpB,OAZIV,EACFpJ,KAAKuK,OAELvK,KAAKyK,QAGH/K,EAAWiL,IACb3J,GAAM,KACJ2J,EAAYrL,KAAKU,KAAMoJ,EAAO,IAI3BpJ,IACR,CAEDa,UACE,MAAM+J,EAAe5K,KAAKG,KAAK,gBACzB0K,EAAgB7K,KAAKG,KAAK,iBAChC,IAAIyE,EAAQ5E,KAAK4I,OA4BjB,OA1BIlJ,EAAWmL,IACbA,EAAcvL,KAAKU,MAGrBA,KAAKc,kBAELd,KAAKC,MAAQ+I,EAAOE,SACpBlJ,KAAKmJ,MAAQ,GACbnJ,KAAKoJ,QAAS,EACdpJ,KAAKiD,IAAM,KACXjD,KAAKqJ,OAAS,KACdrJ,KAAKsJ,QAAU,KACftJ,KAAKuJ,OAAS,KACdvJ,KAAKwJ,OAAS,KACdxJ,KAAKyJ,MAAQ,KACbzJ,KAAK0J,QAAU,KACf1J,KAAK2J,SAAW,KAEhB/E,GAAS,EACTgE,EAAOhE,GACP5E,KAAK4I,OAAS,EAEVlJ,EAAWkL,IACbA,EAAatL,KAAKU,MAGbA,IACR,CAEDK,eACE,MAAM4J,EAAWjK,KAAKG,KAAK,YACrB+J,EAAalK,KAAKG,KAAK,cACvB8C,EAAMjD,KAAKiD,IAUjB,OARIgH,GACFrE,EAAG3C,EAAK,yBAA0B,QAASjD,KAAK8K,QAAS9K,MAAM,GAG7DkK,GACFtE,EAAG3C,EAAK,2BAA4B,QAASjD,KAAK8K,QAAS9K,MAAM,GAG5DA,IACR,CAEDc,kBACE,MAAMmJ,EAAWjK,KAAKG,KAAK,YACrB+J,EAAalK,KAAKG,KAAK,cACvB8C,EAAMjD,KAAKiD,IAEjB,OAAKgH,GAAaC,GAIlBvE,EAAI1C,EAAK,QAASjD,KAAK8K,SAEhB9K,MALEA,IAMV,CAED8K,UAEE,OADA9K,KAAKyK,QACEzK,IACR,SAGHgJ,EAAOE,SAAW,CAChBc,UAAW,MACXb,MAAO,KACPjB,KAAM,UACN+B,UAAU,EACVC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,YAAY,EACZT,QAAS,KACTG,QAAS,KACTgB,YAAa,KACbC,YAAa,KACbC,YAAa,KACbJ,cAAe,KACfD,aAAc,KACdD,YAAa"} \ No newline at end of file diff --git a/outline.css b/outline.css index f918532d..48f8ed64 100644 --- a/outline.css +++ b/outline.css @@ -680,4 +680,4 @@ background-color: rgba(0, 0, 0, 0.35); } -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZhcmlhYmxlcy5sZXNzIiwiLi4vLi4vPGlucHV0IGNzcyA1PiIsImljb25zLmxlc3MiLCJhbmNob3JzLmxlc3MiLCJkcmF3ZXIubGVzcyIsInNoYWRvdy5sZXNzIiwiY2hhcHRlcnMubGVzcyIsImVsbGlwc2lzLmxlc3MiLCJ0b29sYmFyLmxlc3MiLCJzY3JvbGxiYXIubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNDLHVCQUFBO0VBQ0QsOEJBQUE7RUFBaUMsK0JBQUE7Q0NFaEM7QUFDRCxtREFBbUQ7QUFDbkQ7Ozs7O0dBS0c7QUFDSCwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFDSCw0QkFBNEI7QUFDNUIsa0RBQWtEO0FDbkJsRDtFQUNFLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLHNCQUFBO0VBQ0EsdUJBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLGlCQUFBO0NEcUJEO0FDbkJDO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtFQUNBLG1CQUFBO0VBQ0EseUNBQUE7VUFBQSxpQ0FBQTtFQUNBLGlCQUFBO0NEcUJIO0FFdENEO0VBQ0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsaUJBQUE7Q0Z3Q0Q7QUV0Q0M7RUFDRSxjQUFBO0NGd0NIO0FFdENHOzs7RUFHRSxZQUFBO0VBQ0Esc0JBQUE7Q0Z3Q0w7QUVyQ0c7RUFDRSxlQUFBO0NGdUNMO0FFbkNDO0VBRUksc0JBQUE7Q0ZvQ0w7QUUvQkc7RUFDRSxrQkFBQTtDRmlDTDtBRW5DQztFQU1JLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLFNBQUE7RUFDQSxvQ0FBQTtVQUFBLDRCQUFBO0VBQ0EsV0FBQTtDRmdDTDtBR2xFRDtFQUNFLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLE9BQUE7RUFDQSxRQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsK0JBQUE7VUFBQSx1QkFBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7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QUE7RUFDQSwyQkFBQTtDUjJtQkQ7QVF4bUJEO0VBQ0Usc0NBQUE7RUFDQSwyQkFBQTtDUjBtQkQ7QVF2bUJEO0VBQ0Usc0NBQUE7Q1J5bUJEO0FRdG1CRDtFQUNFLHNDQUFBO0NSd21CRCIsImZpbGUiOiJvdXRsaW5lLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIjpyb290IHtcclxuICAtLW91dGxpbmUtekluZGV4OiAyMDAwO1xyXG4gIC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0OiAxMDAlO1xyXG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcclxufVxyXG4iLCI6cm9vdCB7XG4gIC0tb3V0bGluZS16SW5kZXg6IDIwMDA7XG4gIC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0OiAxMDAlO1xuICAtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGg6IDEwMCU7XG59XG4vKiA9PT09PT09PT09IGNvbG9ycy50aGVtZSAtIOWfuuehgOminOiJsuWPmOmHj+mbhuWQiCA9PT09PT09PT09ICovXG4vKipcbiAqIGVsbGlwc2lzLmxlc3MgLSDmlofmnKznnIHnlaUgbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMTFcbiAqL1xuLyogPT09PT09IOaWh+acrOecgeeVpeWHveaVsCA9PT09PT0gKi9cbi8qKlxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMjBcbiAqL1xuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cbi8qID09PT09PT09PT0gaWNvbi50aGVtZSAtIHN2ZyDlm77moIfnmoTmoLflvI8gPT09PT09PT09PSAqL1xuLm91dGxpbmUtaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWljb25fX3N2ZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDFlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1oZWFkaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMxZjhkZDY7XG59XG4ub3V0bGluZS1oZWFkaW5nOmhvdmVyIC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5vdXRsaW5lLWhlYWRpbmdfc3RhcnQ6aG92ZXIge1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cbi5vdXRsaW5lLWhlYWRpbmdfc3RhcnQgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBsZWZ0OiAtMWVtO1xufVxuLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAtMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbW9kYWwge1xuICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyMTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX21haW4sXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSxcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgcGFkZGluZzogMCAxNnB4O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDAgYXV0bztcbiAgaGVpZ2h0OiA1MnB4O1xuICBsaW5lLWhlaWdodDogNTJweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMCAxNnB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2Uge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXNpemU6IDIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIC5vdXRsaW5lLWljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2U6aG92ZXIge1xuICBjb2xvcjogIzY2Njtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbWFpbiB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBtYXJnaW46IDAgYXV0bztcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX292ZXJsYXkge1xuICBjb250ZW50OiAnJztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIG9wYWNpdHk6IDAuMTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfdGlueSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfdGlueSB7XG4gIHdpZHRoOiAyODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWluaSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWluaSB7XG4gIHdpZHRoOiA0ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfc21hbGwsXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3NtYWxsIHtcbiAgd2lkdGg6IDU0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyIHtcbiAgd2lkdGg6IDY4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0sXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21lZGl1bSB7XG4gIHdpZHRoOiA3MjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbGFyZ2UsXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX2xhcmdlIHtcbiAgd2lkdGg6IDk2MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTI5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9taW5pLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNTUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC02OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbWVkaXVtLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtNzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtOTcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtMjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9zbWFsbC5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNTUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTY5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgbGVmdDogLTczMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9sYXJnZS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtOTcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLFxuLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl90aW55LFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl90aW55IHtcbiAgaGVpZ2h0OiAyNDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWluaSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWluaSB7XG4gIGhlaWdodDogMzIwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3NtYWxsLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9zbWFsbCB7XG4gIGhlaWdodDogMzYwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIge1xuICBoZWlnaHQ6IDQwMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9tZWRpdW0sXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21lZGl1bSB7XG4gIGhlaWdodDogNDQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX2xhcmdlLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9sYXJnZSB7XG4gIGhlaWdodDogNDgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtMjUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtMzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTM3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQxMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHRvcDogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIHRvcDogaW5pdGlhbDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3Rpbnkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtMjUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtMzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTM3MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9yZWd1bGFyLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQxMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDUwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGJvdHRvbTogLTQ5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZCB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHotaW5kZXg6IHZhcigtLW91dGxpbmUtekluZGV4KTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3J0bCB7XG4gIHJpZ2h0OiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBsZWZ0OiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl90dGIge1xuICB0b3A6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2J0dCB7XG4gIGJvdHRvbTogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfcnRsLFxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX3R0Yixcbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDRlbSk7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgcmlnaHQ6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGxlZnQ6IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIHRvcDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgYm90dG9tOiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfYXV0by5vdXRsaW5lLWRyYXdlcl9ydGwsXG4ub3V0bGluZS1kcmF3ZXJfYXV0by5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XG59XG4ub3V0bGluZS1kcmF3ZXJfZnVsbCB7XG4gIHBhZGRpbmc6IDA7XG59XG4ub3V0bGluZS1jaGFwdGVycyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogdmFyKC0tb3V0bGluZS1jaGFwdGVycy13aWR0aCk7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlIHtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIGhlaWdodDogNDBweDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmc6IDAgMTZweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbGlzdCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19zdWJqZWN0LFxuLm91dGxpbmUtY2hhcHRlcnNfX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDI7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2xpc3Qge1xuICBwYWRkaW5nOiAwLjVlbSAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3N1YmplY3Qge1xuICBwYWRkaW5nLWxlZnQ6IDFlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19pdGVtIHtcbiAgbWFyZ2luOiAwO1xuICBsaW5lLWhlaWdodDogMzBweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3BsYWNlaG9sZGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDMwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y4Zjk7XG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzA1ODk0MjtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4ycztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3Ige1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDAgMS41ZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBjb2xvcjogIzU1NTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19jb2RlIHtcbiAgcGFkZGluZy1yaWdodDogMC41ZW07XG59XG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS1jaGFwdGVyc19hY3RpdmUub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3ksXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG4gIHRvcDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX21haW4sXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlLFxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQgLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlIHtcbiAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX21haW4sXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIGZsZXg6IDE7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IHtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgbWF4LWhlaWdodDogdmFyKC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0KTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2ZvbGRlZCB7XG4gIHdpZHRoOiAwO1xufVxuLyogPT09PT09PT09PSBidXR0b25zLnRoZW1lIC0g5oyJ6ZKu5a+86Iiq5qC35byPID09PT09PT09PT0gKi9cbi5vdXRsaW5lLXRvb2xiYXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5O1xuICBtYXJnaW46IDA7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMTBweDtcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RjZGZlNjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICM1NTU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgYm9yZGVyLWNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLmhpZGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2ljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDU4OTQyO1xuICBib3JkZXItY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9yb3VuZGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogMThweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgY29sb3I6ICM5OTk7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbms6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZDpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXI6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiLFxuLm91dGxpbmUtdG9vbGJhcl9idHQge1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIHtcbiAgdG9wOiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIHRvcDogLTU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2J0dCB7XG4gIGJvdHRvbTogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYnR0Lm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBib3R0b206IC01NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwsXG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgd2lkdGg6IDU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bCB7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICByaWdodDogLTg2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9sdHIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGxlZnQ6IC04NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX3J0bCAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9sdHIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLyogPT09PT0gU2Nyb2xsYmFyID09PT09ICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDdweDtcbiAgaGVpZ2h0OiA3cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuIiwiLyogPT09PT09PT09PSBpY29uLnRoZW1lIC0gc3ZnIOWbvuagh+eahOagt+W8jyA9PT09PT09PT09ICovXHJcbi5vdXRsaW5lLWljb24ge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAxO1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xyXG4gIHdpZHRoOiAxZW07XHJcbiAgaGVpZ2h0OiAxZW07XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgJl9fc3ZnIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIHdpZHRoOiAxZW07XHJcbiAgICBoZWlnaHQ6IDFlbTtcclxuICAgIGZpbGw6IGN1cnJlbnRjb2xvcjtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICB9XHJcbn1cclxuIiwiQGltcG9ydCAnLi9jb2xvcnMnO1xyXG5cclxuLm91dGxpbmUtaGVhZGluZyB7XHJcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gIHotaW5kZXg6IDE7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgJl9fYW5jaG9yIHtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcblxyXG4gICAgJjpsaW5rLFxyXG4gICAgJjp2aXNpdGVkLFxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XHJcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcclxuICAgIH1cclxuXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgY29sb3I6IEBwcmltYXJ5X2NvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJjpob3ZlciB7XHJcbiAgICAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3N0YXJ0IHtcclxuICAgICY6aG92ZXIge1xyXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHotaW5kZXg6IDI7XHJcbiAgICAgIHRvcDogNTAlO1xyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICAgIGxlZnQ6IC0xZW07XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcclxuQGltcG9ydCAnLi9jb2xvcnMnO1xyXG5AaW1wb3J0ICcuL3NoYWRvdyc7XHJcblxyXG4ub3V0bGluZS1kcmF3ZXIge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICB6LWluZGV4OiAtMTtcclxuICB0b3A6IDA7XHJcbiAgbGVmdDogMDtcclxuICBtYXJnaW46IDA7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcblxyXG4gICZfX21vZGFsIHtcclxuICAgIC5zaGFkb3dfbGlnaHRfcmVndWxhcigpO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XHJcbiAgICBmbGV4LXdyYXA6IG5vd3JhcDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDIxO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xyXG4gICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC40cztcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19oZWFkZXIsXHJcbiAgJl9fbWFpbixcclxuICAmX19mb290ZXIge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gIH1cclxuXHJcbiAgJl9faGVhZGVyLFxyXG4gICZfX2Zvb3RlciB7XHJcbiAgICBmbGV4LXNocmluazogMDtcclxuICB9XHJcblxyXG4gICZfX3RpdGxlLFxyXG4gICZfX21haW4sXHJcbiAgJl9fZm9vdGVyIHtcclxuICAgIHBhZGRpbmc6IDAgMTZweDtcclxuICB9XHJcblxyXG4gICZfX2hlYWRlcixcclxuICAmX190aXRsZSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICB6LWluZGV4OiAxO1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICBoZWlnaHQ6IDUycHg7XHJcbiAgICBsaW5lLWhlaWdodDogNTJweDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX190aXRsZSB7XHJcbiAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgbWFyZ2luOiAwIDE2cHg7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcclxuICB9XHJcblxyXG4gICZfX2Nsb3NlIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAxMnB4O1xyXG4gICAgd2lkdGg6IDIwcHg7XHJcbiAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICBsaW5lLWhlaWdodDogMjBweDtcclxuICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XHJcbiAgICBmb250LXNpemU6IDIwcHg7XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgIC5vdXRsaW5lLWljb24ge1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIHotaW5kZXg6IDI7XHJcbiAgICAgIHRvcDogMDtcclxuICAgICAgbGVmdDogMDtcclxuICAgIH1cclxuXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgY29sb3I6IEB0aGlyZF90ZXh0X2NvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9fbWFpbiB7XHJcbiAgICBmbGV4OiAxO1xyXG4gICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgfVxyXG5cclxuICAmX19mb290ZXIge1xyXG4gICAgbWFyZ2luOiAwIGF1dG87XHJcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19vdmVybGF5IHtcclxuICAgIGNvbnRlbnQ6ICcnO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcclxuICAgIG9wYWNpdHk6IDAuMTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX3J0bCxcclxuICAmX2x0ciB7XHJcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgJl90aW55IHtcclxuICAgICAgICB3aWR0aDogMjgwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgd2lkdGg6IDQ4MHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3NtYWxsIHtcclxuICAgICAgICB3aWR0aDogNTQwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfcmVndWxhciB7XHJcbiAgICAgICAgd2lkdGg6IDY4MHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgd2lkdGg6IDcyMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2xhcmdlIHtcclxuICAgICAgICB3aWR0aDogOTYwcHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfcnRsIHtcclxuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG5cclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAmX3Rpbnkge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHJpZ2h0OiAtMjkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21pbmkge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHJpZ2h0OiAtNDkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3NtYWxsIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICByaWdodDogLTU1MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9yZWd1bGFyIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICByaWdodDogLTY5MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9tZWRpdW0ge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIHJpZ2h0OiAtNzMwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2xhcmdlIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICByaWdodDogLTk3MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9sdHIge1xyXG4gICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG5cclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAmX3Rpbnkge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIGxlZnQ6IC0yOTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgbGVmdDogLTQ5MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9zbWFsbCB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgbGVmdDogLTU1MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9yZWd1bGFyIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICBsZWZ0OiAtNjkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgbGVmdDogLTczMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9sYXJnZSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgbGVmdDogLTk3MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl90dGIsXHJcbiAgJl9idHQge1xyXG4gICAgbGVmdDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG5cclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICAmX3Rpbnkge1xyXG4gICAgICAgIGhlaWdodDogMjQwcHg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgaGVpZ2h0OiAzMjBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9zbWFsbCB7XHJcbiAgICAgICAgaGVpZ2h0OiAzNjBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9yZWd1bGFyIHtcclxuICAgICAgICBoZWlnaHQ6IDQwMHB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgaGVpZ2h0OiA0NDBweDtcclxuICAgICAgfVxyXG5cclxuICAgICAgJl9sYXJnZSB7XHJcbiAgICAgICAgaGVpZ2h0OiA0ODBweDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl90dGIge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcclxuXHJcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgJl90aW55IHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICB0b3A6IC0yNTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbWluaSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgdG9wOiAtMzMwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3NtYWxsIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICB0b3A6IC0zNzBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfcmVndWxhciB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgdG9wOiAtNDEwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21lZGl1bSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgdG9wOiAtNDUwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2xhcmdlIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XHJcbiAgICAgICAgICB0b3A6IC00OTBweDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfYnR0IHtcclxuICAgIHRvcDogaW5pdGlhbDtcclxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XHJcblxyXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XHJcbiAgICAgICZfdGlueSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgYm90dG9tOiAtMjUwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX21pbmkge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIGJvdHRvbTogLTMzMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9zbWFsbCB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgYm90dG9tOiAtMzcwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3JlZ3VsYXIge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIGJvdHRvbTogLTQxMHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9tZWRpdW0ge1xyXG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcclxuICAgICAgICAgIGJvdHRvbTogLTQ1MHB4O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9sYXJnZSB7XHJcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xyXG4gICAgICAgICAgYm90dG9tOiAtNDkwcHg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX29wZW5lZCB7XHJcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gICAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xyXG5cclxuICAgICYub3V0bGluZS1kcmF3ZXIge1xyXG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XHJcblxyXG4gICAgICAmX3J0bCB7XHJcbiAgICAgICAgcmlnaHQ6IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfbHRyIHtcclxuICAgICAgICBsZWZ0OiAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3R0YiB7XHJcbiAgICAgICAgdG9wOiAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX2J0dCB7XHJcbiAgICAgICAgYm90dG9tOiAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX29mZnNldCB7XHJcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgJl9ydGwsXHJcbiAgICAgICZfbHRyIHtcclxuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XHJcbiAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX3R0YixcclxuICAgICAgJl9idHQge1xyXG4gICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0ZW0pO1xyXG4gICAgICAgIGxlZnQ6IDUwJTtcclxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfb3BlbmVkIHtcclxuICAgICAgICAmLm91dGxpbmUtZHJhd2VyIHtcclxuICAgICAgICAgICZfcnRsIHtcclxuICAgICAgICAgICAgcmlnaHQ6IDJlbTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAmX2x0ciB7XHJcbiAgICAgICAgICAgIGxlZnQ6IDJlbTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAmX3R0YiB7XHJcbiAgICAgICAgICAgIHRvcDogMmVtO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICZfYnR0IHtcclxuICAgICAgICAgICAgYm90dG9tOiAyZW07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX2F1dG8ge1xyXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XHJcbiAgICAgICZfcnRsLFxyXG4gICAgICAmX2x0ciB7XHJcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xyXG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfZnVsbCB7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gIH1cclxufVxyXG4iLCIvKipcclxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENyZWF0ZWQgQnk6IFlhb2hhaXhpYW9cclxuICogVXBkYXRlOiAyMDIyLjMuMjBcclxuICovXHJcbkBpbXBvcnQgJy4vY29sb3JzJztcclxuXHJcbi8qID09PT09PSDpmLTlvbHmoLflvI/orr7nva7lh73mlbAgPT09PT09ICovXHJcbi5zaGFkb3coQG9mZnNldDogMCAwIDZweCAxcHgsIEBjb2xvcjogQHByaW1hcnlfYm9yZGVyX2NvbG9yKSB7XHJcbiAgYm94LXNoYWRvdzogQG9mZnNldCBAY29sb3I7XHJcbn1cclxuXHJcbi5zaGFkb3dfcmVndWxhcihAY29sb3I6IEBwcmltYXJ5X2JvcmRlcl9jb2xvcikge1xyXG4gIC5zaGFkb3coMCAwIDZweCAxcHgsIEBjb2xvcik7XHJcbn1cclxuXHJcbi5zaGFkb3dfbGFyZ2UoQGNvbG9yOiBAcHJpbWFyeV9ib3JkZXJfY29sb3IpIHtcclxuICAuc2hhZG93KDAgMCAxMnB4IDFweCwgQGNvbG9yKTtcclxufVxyXG5cclxuLnNoYWRvd19saWdodF9yZWd1bGFyKCkge1xyXG4gIC5zaGFkb3dfcmVndWxhcigpO1xyXG59XHJcblxyXG4uc2hhZG93X2xpZ2h0X2xhcmdlKCkge1xyXG4gIC5zaGFkb3dfbGFyZ2UoKTtcclxufVxyXG5cclxuLnNoYWRvd19kYXJrX3JlZ3VsYXIoKSB7XHJcbiAgLnNoYWRvd19yZWd1bGFyKEBzZWNvbmRhcnlfYm9yZGVyX2NvbG9yKTtcclxufVxyXG5cclxuLnNoYWRvd19kYXJrX2xhcmdlKCkge1xyXG4gIC5zaGFkb3dfbGFyZ2UoQHNlY29uZGFyeV9ib3JkZXJfY29sb3IpO1xyXG59XHJcbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcclxuQGltcG9ydCAnLi9jb2xvcnMnO1xyXG5AaW1wb3J0ICcuL2VsbGlwc2lzJztcclxuXHJcbi5vdXRsaW5lLWNoYXB0ZXJzIHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgei1pbmRleDogMTtcclxuICBtYXJnaW46IDA7XHJcbiAgd2lkdGg6IHZhcigtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGgpO1xyXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XHJcbiAgb3ZlcmZsb3c6IGF1dG87XHJcblxyXG4gICZfX3RpdGxlIHtcclxuICAgIG1hcmdpbjogMCAxNnB4O1xyXG4gICAgaGVpZ2h0OiA0MHB4O1xyXG4gICAgbGluZS1oZWlnaHQ6IDQwcHg7XHJcbiAgICBwYWRkaW5nOiAwIDE2cHg7XHJcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG4gICAgZm9udC1zaXplOiAxNnB4O1xyXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19tYWluIHtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIHotaW5kZXg6IDE7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fbGlzdCxcclxuICAmX19zdWJqZWN0LFxyXG4gICZfX2l0ZW0ge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogMjtcclxuICAgIG1hcmdpbjogMDtcclxuICAgIHBhZGRpbmc6IDA7XHJcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fbGlzdCB7XHJcbiAgICBwYWRkaW5nOiAwLjVlbSAwO1xyXG4gIH1cclxuXHJcbiAgJl9fc3ViamVjdCB7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcclxuICB9XHJcblxyXG4gICZfX2l0ZW0ge1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgbGluZS1oZWlnaHQ6IDMwcHg7XHJcbiAgICBmb250LXNpemU6IDEzcHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9fcGxhY2Vob2xkZXIge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMzBweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEBob3Zlcl9iZ19jb2xvcjtcclxuICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfVxyXG5cclxuICAmX19hbmNob3Ige1xyXG4gICAgLmVsbGlwc2lzKDEpO1xyXG4gICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICBwYWRkaW5nOiAwIDEuNWVtO1xyXG5cclxuICAgICY6bGluayxcclxuICAgICY6dmlzaXRlZCxcclxuICAgICY6aG92ZXIge1xyXG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbiAgICAgIGNvbG9yOiBAc2Vjb25kYXJ5X3RleHRfY29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgJjpob3ZlciB7XHJcbiAgICAgIGNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfX2NvZGUge1xyXG4gICAgcGFkZGluZy1yaWdodDogMC41ZW07XHJcbiAgfVxyXG5cclxuICAmX2FjdGl2ZSB7XHJcbiAgICAmLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvciB7XHJcbiAgICAgICY6bGluayxcclxuICAgICAgJjp2aXNpdGVkLFxyXG4gICAgICAmOmhvdmVyIHtcclxuICAgICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9zdGlja3ksXHJcbiAgJl9maXhlZCB7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgICAub3V0bGluZS1jaGFwdGVycyB7XHJcbiAgICAgICZfX3RpdGxlLFxyXG4gICAgICAmX19tYWluIHtcclxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmX190aXRsZSB7XHJcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICZfX21haW4ge1xyXG4gICAgICAgIGZsZXg6IDE7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfc3RpY2t5IHtcclxuICAgIHBvc2l0aW9uOiBzdGlja3k7XHJcbiAgICBtYXgtaGVpZ2h0OiB2YXIoLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgJl9maXhlZCB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xyXG4gIH1cclxuXHJcbiAgJl9oaWRkZW4ge1xyXG4gICAgZGlzcGxheTogbm9uZTtcclxuICB9XHJcblxyXG4gICZfZm9sZGVkIHtcclxuICAgIHdpZHRoOiAwO1xyXG4gIH1cclxufVxyXG4iLCIvKipcbiAqIGVsbGlwc2lzLmxlc3MgLSDmlofmnKznnIHnlaUgbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMTFcbiAqL1xuXG4vKiA9PT09PT0g5paH5pys55yB55Wl5Ye95pWwID09PT09PSAqL1xuLmVsbGlwc2lzIChAbGluZXMpIHdoZW4gKEBsaW5lcz0xKSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZWxsaXBzaXMgKEBsaW5lcykgd2hlbiAoQGxpbmVzPj0yKSB7XG4gIC13ZWJraXQtbGluZS1jbGFtcDogQGxpbmVzO1xuICBkaXNwbGF5OiBib3g7XG4gIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuIiwiLyogPT09PT09PT09PSBidXR0b25zLnRoZW1lIC0g5oyJ6ZKu5a+86Iiq5qC35byPID09PT09PT09PT0gKi9cclxuQGltcG9ydCAnLi9jb2xvcnMnO1xyXG5AaW1wb3J0ICcuL3NoYWRvdyc7XHJcblxyXG4ub3V0bGluZS10b29sYmFyIHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgei1pbmRleDogOTk5OTk7XHJcbiAgbWFyZ2luOiAwO1xyXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgJl9fYnV0dG9uIHtcclxuICAgIC5zaGFkb3dfbGlnaHRfcmVndWxhcigpO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIG1hcmdpbjogMTBweDtcclxuICAgIHdpZHRoOiAzNnB4O1xyXG4gICAgaGVpZ2h0OiAzNnB4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGNvbG9yOiBAc2Vjb25kYXJ5X3RleHRfY29sb3I7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICAgIGJvcmRlci1jb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgJi5oaWRlIHtcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfX2FuY2hvciB7XHJcbiAgICAmOmxpbmssXHJcbiAgICAmOnZpc2l0ZWQsXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX19pY29uIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbiAgICBmaWxsOiBjdXJyZW50Y29sb3I7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9hY3RpdmUge1xyXG4gICAgJi5vdXRsaW5lLXRvb2xiYXIge1xyXG4gICAgICAmX19idXR0b24ge1xyXG4gICAgICAgIGNvbG9yOiBAd2hpdGU7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuXHJcbiAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICBjb2xvcjogQHdoaXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvciB7XHJcbiAgICAgICY6bGluayxcclxuICAgICAgJjp2aXNpdGVkLFxyXG4gICAgICAmOmhvdmVyIHtcclxuICAgICAgICBjb2xvcjogQHdoaXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3JvdW5kZWQge1xyXG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX2Rpc2FibGVkIHtcclxuICAgICYub3V0bGluZS10b29sYmFyLFxyXG4gICAgLm91dGxpbmUtdG9vbGJhciB7XHJcbiAgICAgICZfX2FuY2hvcjpsaW5rLFxyXG4gICAgICAmX19hbmNob3I6dmlzaXRlZCxcclxuICAgICAgJl9fYW5jaG9yOmhvdmVyLFxyXG4gICAgICAmX19idXR0b24ge1xyXG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuXHJcbiAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9fYnV0dG9uIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZGlzYWJsZWRfYmdfY29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfdHRiLFxyXG4gICZfYnR0IHtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcclxuXHJcbiAgICAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3R0YiB7XHJcbiAgICB0b3A6IDEycHg7XHJcblxyXG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcclxuICAgICAgdG9wOiAtNTZweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfYnR0IHtcclxuICAgIGJvdHRvbTogMTJweDtcclxuXHJcbiAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xyXG4gICAgICBib3R0b206IC01NnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9ydGwsXHJcbiAgJl9sdHIge1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgd2lkdGg6IDU2cHg7XHJcbiAgfVxyXG5cclxuICAmX3J0bCB7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAxMnB4O1xyXG5cclxuICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XHJcbiAgICAgIHJpZ2h0OiAtODZweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfbHRyIHtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbGVmdDogMTJweDtcclxuXHJcbiAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xyXG4gICAgICBsZWZ0OiAtODZweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfdHRiLFxyXG4gICZfcnRsLFxyXG4gICZfYnR0LFxyXG4gICZfbHRyIHtcclxuICAgIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XHJcbiAgICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCIvKiA9PT09PSBTY3JvbGxiYXIgPT09PT0gKi9cclxuOjotd2Via2l0LXNjcm9sbGJhciB7XHJcbiAgd2lkdGg6IDdweDtcclxuICBoZWlnaHQ6IDdweDtcclxuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcclxufVxyXG5cclxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XHJcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XHJcbn1cclxuXHJcbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6dmVydGljYWwge1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XHJcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XHJcbn1cclxuXHJcbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG9yaXpvbnRhbCB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcclxuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcclxufVxyXG5cclxuOjotd2Via2l0LXNjcm9sbGJhcjpob3ZlciB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcclxufVxyXG5cclxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM1KTtcclxufVxyXG4iXX0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZhcmlhYmxlcy5sZXNzIiwiLi4vLi4vPGlucHV0IGNzcyA1PiIsImljb25zLmxlc3MiLCJhbmNob3JzLmxlc3MiLCJkcmF3ZXIubGVzcyIsInNoYWRvdy5sZXNzIiwiY2hhcHRlcnMubGVzcyIsImVsbGlwc2lzLmxlc3MiLCJ0b29sYmFyLmxlc3MiLCJzY3JvbGxiYXIubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLHVCQUFBO0VBQ0EsOEJBQUE7RUFDQSwrQkFBQTtDQ0NEO0FBQ0QsbURBQW1EO0FBQ25EOzs7OztHQUtHO0FBQ0gsMEJBQTBCO0FBQzFCOzs7OztHQUtHO0FBQ0gsNEJBQTRCO0FBQzVCLGtEQUFrRDtBQ25CbEQ7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxzQkFBQTtFQUNBLHVCQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxpQkFBQTtDRHFCRDtBQ25CQztFQUNFLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtFQUNBLHlDQUFBO1VBQUEsaUNBQUE7RUFDQSxpQkFBQTtDRHFCSDtBRXRDRDtFQUNFLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLGlCQUFBO0NGd0NEO0FFdENDO0VBQ0UsY0FBQTtDRndDSDtBRXRDRzs7O0VBR0UsWUFBQTtFQUNBLHNCQUFBO0NGd0NMO0FFckNHO0VBQ0UsZUFBQTtDRnVDTDtBRW5DQztFQUVJLHNCQUFBO0NGb0NMO0FFL0JHO0VBQ0Usa0JBQUE7Q0ZpQ0w7QUVuQ0M7RUFNSSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxTQUFBO0VBQ0Esb0NBQUE7VUFBQSw0QkFBQTtFQUNBLFdBQUE7Q0ZnQ0w7QUdsRUQ7RUFDRSxtQkFBQTtFQUNBLFlBQUE7RUFDQSxPQUFBO0VBQ0EsUUFBQTtFQUNBLFVBQUE7RUFDQSxZQUFBO0VBQ0EsYUFBQTtFQUNBLCtCQUFBO1VBQUEsdUJBQUE7RUFDQSxtQkFBQTtFQUNBLGlCQUFBO0NI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QSwyQkFBQTtDUjJtQkQ7QVF4bUJEO0VBQ0Usc0NBQUE7RUFDQSwyQkFBQTtDUjBtQkQ7QVF2bUJEO0VBQ0Usc0NBQUE7Q1J5bUJEO0FRdG1CRDtFQUNFLHNDQUFBO0NSd21CRCIsImZpbGUiOiJvdXRsaW5lLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIjpyb290IHtcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcbn1cbiIsIjpyb290IHtcbiAgLS1vdXRsaW5lLXpJbmRleDogMjAwMDtcbiAgLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQ6IDEwMCU7XG4gIC0tb3V0bGluZS1jaGFwdGVycy13aWR0aDogMTAwJTtcbn1cbi8qID09PT09PT09PT0gY29sb3JzLnRoZW1lIC0g5Z+656GA6aKc6Imy5Y+Y6YeP6ZuG5ZCIID09PT09PT09PT0gKi9cbi8qKlxuICogZWxsaXBzaXMubGVzcyAtIOaWh+acrOecgeeVpSBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4xMVxuICovXG4vKiA9PT09PT0g5paH5pys55yB55Wl5Ye95pWwID09PT09PSAqL1xuLyoqXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxuICovXG4vKiA9PT09PT0g6Zi05b2x5qC35byP6K6+572u5Ye95pWwID09PT09PSAqL1xuLyogPT09PT09PT09PSBpY29uLnRoZW1lIC0gc3ZnIOWbvuagh+eahOagt+W8jyA9PT09PT09PT09ICovXG4ub3V0bGluZS1pY29uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxZW07XG4gIGhlaWdodDogMWVtO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtaWNvbl9fc3ZnIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgZmlsbDogY3VycmVudGNvbG9yO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWhlYWRpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzFmOGRkNjtcbn1cbi5vdXRsaW5lLWhlYWRpbmc6aG92ZXIgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLm91dGxpbmUtaGVhZGluZ19zdGFydDpob3ZlciB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLm91dGxpbmUtaGVhZGluZ19zdGFydCAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGxlZnQ6IC0xZW07XG59XG4ub3V0bGluZS1kcmF3ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IC0xO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19tb2RhbCB7XG4gIGJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtd3JhcDogbm93cmFwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDIxO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlLFxuLm91dGxpbmUtZHJhd2VyX19tYWluLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICBwYWRkaW5nOiAwIDE2cHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2hlYWRlcixcbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBoZWlnaHQ6IDUycHg7XG4gIGxpbmUtaGVpZ2h0OiA1MnB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX19jbG9zZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxMnB4O1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgY29sb3I6ICM5OTk7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fY2xvc2UgLm91dGxpbmUtaWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX19jbG9zZTpob3ZlciB7XG4gIGNvbG9yOiAjNjY2O1xufVxuLm91dGxpbmUtZHJhd2VyX19tYWluIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fb3ZlcmxheSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgb3BhY2l0eTogMC4xO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl90aW55LFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl90aW55IHtcbiAgd2lkdGg6IDI4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9taW5pLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pIHtcbiAgd2lkdGg6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICB3aWR0aDogNTQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIsXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIge1xuICB3aWR0aDogNjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtIHtcbiAgd2lkdGg6IDcyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICB3aWR0aDogOTYwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtMjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC01NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTY5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC05NzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC01NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC05NzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICBoZWlnaHQ6IDI0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pIHtcbiAgaGVpZ2h0OiAzMjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfc21hbGwsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3NtYWxsIHtcbiAgaGVpZ2h0OiAzNjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIGhlaWdodDogNDAwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21lZGl1bSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtIHtcbiAgaGVpZ2h0OiA0NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbGFyZ2UsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX2xhcmdlIHtcbiAgaGVpZ2h0OiA0ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0yNTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zMzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtMzcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDEwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgdG9wOiBpbml0aWFsO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0yNTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zMzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtMzcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDEwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgcmlnaHQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGxlZnQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIHRvcDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgYm90dG9tOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9ydGwsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcbiAgdG9wOiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfdHRiLFxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB3aWR0aDogY2FsYygxMDAlIC0gNGVtKTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9hdXRvLm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9hdXRvLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9mdWxsIHtcbiAgcGFkZGluZzogMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiB2YXIoLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoKTtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICBtYXJnaW46IDAgMTZweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBsaW5lLWhlaWdodDogNDBweDtcbiAgcGFkZGluZzogMCAxNnB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNDAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX21haW4ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19saXN0LFxuLm91dGxpbmUtY2hhcHRlcnNfX3N1YmplY3QsXG4ub3V0bGluZS1jaGFwdGVyc19faXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbGlzdCB7XG4gIHBhZGRpbmc6IDAuNWVtIDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19fc3ViamVjdCB7XG4gIHBhZGRpbmctbGVmdDogMWVtO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2l0ZW0ge1xuICBtYXJnaW46IDA7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fcGxhY2Vob2xkZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMzBweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmOTtcbiAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMDU4OTQyO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMCAxLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjNTU1O1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2NvZGUge1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiBub3dyYXA7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHotaW5kZXg6IHZhcigtLW91dGxpbmUtekluZGV4KTtcbiAgdG9wOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUge1xuICBmbGV4LXNocmluazogMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fbWFpbixcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kge1xuICBwb3NpdGlvbjogc3RpY2t5O1xuICBtYXgtaGVpZ2h0OiB2YXIoLS1vdXRsaW5lLXN0aWNreS1oZWlnaHQpO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZml4ZWQge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfZm9sZGVkIHtcbiAgd2lkdGg6IDA7XG59XG4vKiA9PT09PT09PT09IGJ1dHRvbnMudGhlbWUgLSDmjInpkq7lr7zoiKrmoLflvI8gPT09PT09PT09PSAqL1xuLm91dGxpbmUtdG9vbGJhciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogOTk5OTk7XG4gIG1hcmdpbjogMDtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAxMHB4O1xuICB3aWR0aDogMzZweDtcbiAgaGVpZ2h0OiAzNnB4O1xuICBib3JkZXI6IDFweCBzb2xpZCAjZGNkZmU2O1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzU1NTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICBib3JkZXItY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b24uaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6ICMwNTg5NDI7XG4gIGJvcmRlci1jb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICNmZmY7XG59XG4ub3V0bGluZS10b29sYmFyX3JvdW5kZWQub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBib3JkZXItcmFkaXVzOiAxOHB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBjb2xvcjogIzk5OTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluazpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbms6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQ6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIsXG4ub3V0bGluZS10b29sYmFyX2J0dCB7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLFxuLm91dGxpbmUtdG9vbGJhcl9idHQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIge1xuICB0b3A6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX3R0Yi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgdG9wOiAtNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYnR0IHtcbiAgYm90dG9tOiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9idHQub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGJvdHRvbTogLTU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bCxcbi5vdXRsaW5lLXRvb2xiYXJfbHRyIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICB3aWR0aDogNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsIHtcbiAgdG9wOiA1MCU7XG4gIHJpZ2h0OiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIHJpZ2h0OiAtODZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfbHRyIHtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX2x0ci5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgbGVmdDogLTg2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfcnRsIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9idHQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX2x0ciAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4vKiA9PT09PSBTY3JvbGxiYXIgPT09PT0gKi9cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogN3B4O1xuICBoZWlnaHQ6IDdweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLXBpZWNlIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOnZlcnRpY2FsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMTUpO1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zNSk7XG59XG4iLCIvKiA9PT09PT09PT09IGljb24udGhlbWUgLSBzdmcg5Zu+5qCH55qE5qC35byPID09PT09PT09PT0gKi9cbi5vdXRsaW5lLWljb24ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDFlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJl9fc3ZnIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMjtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxufVxuIiwiQGltcG9ydCAnLi9jb2xvcnMnO1xuXG4ub3V0bGluZS1oZWFkaW5nIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICZfX2FuY2hvciB7XG4gICAgZGlzcGxheTogbm9uZTtcblxuICAgICY6bGluayxcbiAgICAmOnZpc2l0ZWQsXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IEBwcmltYXJ5X2NvbG9yO1xuICAgIH1cbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIC5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvciB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgJl9zdGFydCB7XG4gICAgJjpob3ZlciB7XG4gICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICB9XG5cbiAgICAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgei1pbmRleDogMjtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgbGVmdDogLTFlbTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcbkBpbXBvcnQgJy4vY29sb3JzJztcbkBpbXBvcnQgJy4vc2hhZG93JztcblxuLm91dGxpbmUtZHJhd2VyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAtMTtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmX19tb2RhbCB7XG4gICAgLnNoYWRvd19saWdodF9yZWd1bGFyKCk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAyMTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuNHM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX2hlYWRlcixcbiAgJl9fbWFpbixcbiAgJl9fZm9vdGVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgJl9faGVhZGVyLFxuICAmX19mb290ZXIge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICB9XG5cbiAgJl9fdGl0bGUsXG4gICZfX21haW4sXG4gICZfX2Zvb3RlciB7XG4gICAgcGFkZGluZzogMCAxNnB4O1xuICB9XG5cbiAgJl9faGVhZGVyLFxuICAmX190aXRsZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgaGVpZ2h0OiA1MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiA1MnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX190aXRsZSB7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgbWFyZ2luOiAwIDE2cHg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xuICB9XG5cbiAgJl9fY2xvc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiAxMnB4O1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xuICAgIGZvbnQtc2l6ZTogMjBweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLm91dGxpbmUtaWNvbiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB6LWluZGV4OiAyO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAdGhpcmRfdGV4dF9jb2xvcjtcbiAgICB9XG4gIH1cblxuICAmX19tYWluIHtcbiAgICBmbGV4OiAxO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICB9XG5cbiAgJl9fZm9vdGVyIHtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fb3ZlcmxheSB7XG4gICAgY29udGVudDogJyc7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcbiAgICBvcGFjaXR5OiAwLjE7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfcnRsLFxuICAmX2x0ciB7XG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICAmX3Rpbnkge1xuICAgICAgICB3aWR0aDogMjgwcHg7XG4gICAgICB9XG5cbiAgICAgICZfbWluaSB7XG4gICAgICAgIHdpZHRoOiA0ODBweDtcbiAgICAgIH1cblxuICAgICAgJl9zbWFsbCB7XG4gICAgICAgIHdpZHRoOiA1NDBweDtcbiAgICAgIH1cblxuICAgICAgJl9yZWd1bGFyIHtcbiAgICAgICAgd2lkdGg6IDY4MHB4O1xuICAgICAgfVxuXG4gICAgICAmX21lZGl1bSB7XG4gICAgICAgIHdpZHRoOiA3MjBweDtcbiAgICAgIH1cblxuICAgICAgJl9sYXJnZSB7XG4gICAgICAgIHdpZHRoOiA5NjBweDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX3J0bCB7XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XG5cbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfdGlueSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICByaWdodDogLTI5MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbWluaSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICByaWdodDogLTQ5MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfc21hbGwge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgcmlnaHQ6IC01NTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3JlZ3VsYXIge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgcmlnaHQ6IC02OTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX21lZGl1bSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICByaWdodDogLTczMHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbGFyZ2Uge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgcmlnaHQ6IC05NzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfbHRyIHtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XG5cbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfdGlueSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBsZWZ0OiAtMjkwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9taW5pIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGxlZnQ6IC00OTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3NtYWxsIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGxlZnQ6IC01NTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3JlZ3VsYXIge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgbGVmdDogLTY5MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbWVkaXVtIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGxlZnQ6IC03MzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX2xhcmdlIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGxlZnQ6IC05NzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfdHRiLFxuICAmX2J0dCB7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYub3V0bGluZS1kcmF3ZXIge1xuICAgICAgJl90aW55IHtcbiAgICAgICAgaGVpZ2h0OiAyNDBweDtcbiAgICAgIH1cblxuICAgICAgJl9taW5pIHtcbiAgICAgICAgaGVpZ2h0OiAzMjBweDtcbiAgICAgIH1cblxuICAgICAgJl9zbWFsbCB7XG4gICAgICAgIGhlaWdodDogMzYwcHg7XG4gICAgICB9XG5cbiAgICAgICZfcmVndWxhciB7XG4gICAgICAgIGhlaWdodDogNDAwcHg7XG4gICAgICB9XG5cbiAgICAgICZfbWVkaXVtIHtcbiAgICAgICAgaGVpZ2h0OiA0NDBweDtcbiAgICAgIH1cblxuICAgICAgJl9sYXJnZSB7XG4gICAgICAgIGhlaWdodDogNDgwcHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl90dGIge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XG5cbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfdGlueSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICB0b3A6IC0yNTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX21pbmkge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgdG9wOiAtMzMwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9zbWFsbCB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICB0b3A6IC0zNzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3JlZ3VsYXIge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgdG9wOiAtNDEwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9tZWRpdW0ge1xuICAgICAgICAmLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gICAgICAgICAgdG9wOiAtNDUwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9sYXJnZSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICB0b3A6IC00OTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfYnR0IHtcbiAgICB0b3A6IGluaXRpYWw7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIEBwcmltYXJ5X2JvcmRlcl9jb2xvcjtcblxuICAgICYub3V0bGluZS1kcmF3ZXIge1xuICAgICAgJl90aW55IHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGJvdHRvbTogLTI1MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfbWluaSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBib3R0b206IC0zMzBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX3NtYWxsIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGJvdHRvbTogLTM3MHB4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICZfcmVndWxhciB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBib3R0b206IC00MTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX21lZGl1bSB7XG4gICAgICAgICYub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgICAgICAgICBib3R0b206IC00NTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX2xhcmdlIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICAgICAgICAgIGJvdHRvbTogLTQ5MHB4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9vcGVuZWQge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xuXG4gICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICBwb3NpdGlvbjogZml4ZWQ7XG5cbiAgICAgICZfcnRsIHtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgICZfbHRyIHtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgIH1cblxuICAgICAgJl90dGIge1xuICAgICAgICB0b3A6IDA7XG4gICAgICB9XG5cbiAgICAgICZfYnR0IHtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfb2Zmc2V0IHtcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfcnRsLFxuICAgICAgJl9sdHIge1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICB9XG5cbiAgICAgICZfdHRiLFxuICAgICAgJl9idHQge1xuICAgICAgICB3aWR0aDogY2FsYygxMDAlIC0gNGVtKTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gICAgICB9XG5cbiAgICAgICZfb3BlbmVkIHtcbiAgICAgICAgJi5vdXRsaW5lLWRyYXdlciB7XG4gICAgICAgICAgJl9ydGwge1xuICAgICAgICAgICAgcmlnaHQ6IDJlbTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAmX2x0ciB7XG4gICAgICAgICAgICBsZWZ0OiAyZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJl90dGIge1xuICAgICAgICAgICAgdG9wOiAyZW07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJl9idHQge1xuICAgICAgICAgICAgYm90dG9tOiAyZW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9hdXRvIHtcbiAgICAmLm91dGxpbmUtZHJhd2VyIHtcbiAgICAgICZfcnRsLFxuICAgICAgJl9sdHIge1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9mdWxsIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4iLCIvKipcbiAqIHNoYWRvdy5sZXNzIC0g6Zi05b2x5qC35byP6K6+572uIG1peGlueCDlh73mlbBcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENyZWF0ZWQgQnk6IFlhb2hhaXhpYW9cbiAqIFVwZGF0ZTogMjAyMi4zLjIwXG4gKi9cbkBpbXBvcnQgJy4vY29sb3JzJztcblxuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cbi5zaGFkb3coQG9mZnNldDogMCAwIDZweCAxcHgsIEBjb2xvcjogQHByaW1hcnlfYm9yZGVyX2NvbG9yKSB7XG4gIGJveC1zaGFkb3c6IEBvZmZzZXQgQGNvbG9yO1xufVxuXG4uc2hhZG93X3JlZ3VsYXIoQGNvbG9yOiBAcHJpbWFyeV9ib3JkZXJfY29sb3IpIHtcbiAgLnNoYWRvdygwIDAgNnB4IDFweCwgQGNvbG9yKTtcbn1cblxuLnNoYWRvd19sYXJnZShAY29sb3I6IEBwcmltYXJ5X2JvcmRlcl9jb2xvcikge1xuICAuc2hhZG93KDAgMCAxMnB4IDFweCwgQGNvbG9yKTtcbn1cblxuLnNoYWRvd19saWdodF9yZWd1bGFyKCkge1xuICAuc2hhZG93X3JlZ3VsYXIoKTtcbn1cblxuLnNoYWRvd19saWdodF9sYXJnZSgpIHtcbiAgLnNoYWRvd19sYXJnZSgpO1xufVxuXG4uc2hhZG93X2RhcmtfcmVndWxhcigpIHtcbiAgLnNoYWRvd19yZWd1bGFyKEBzZWNvbmRhcnlfYm9yZGVyX2NvbG9yKTtcbn1cblxuLnNoYWRvd19kYXJrX2xhcmdlKCkge1xuICAuc2hhZG93X2xhcmdlKEBzZWNvbmRhcnlfYm9yZGVyX2NvbG9yKTtcbn1cbiIsIkBpbXBvcnQgJy4vdmFyaWFibGVzJztcbkBpbXBvcnQgJy4vY29sb3JzJztcbkBpbXBvcnQgJy4vZWxsaXBzaXMnO1xuXG4ub3V0bGluZS1jaGFwdGVycyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogdmFyKC0tb3V0bGluZS1jaGFwdGVycy13aWR0aCk7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBhdXRvO1xuXG4gICZfX3RpdGxlIHtcbiAgICBtYXJnaW46IDAgMTZweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gICAgcGFkZGluZzogMCAxNnB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfX21haW4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fbGlzdCxcbiAgJl9fc3ViamVjdCxcbiAgJl9faXRlbSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19saXN0IHtcbiAgICBwYWRkaW5nOiAwLjVlbSAwO1xuICB9XG5cbiAgJl9fc3ViamVjdCB7XG4gICAgcGFkZGluZy1sZWZ0OiAxZW07XG4gIH1cblxuICAmX19pdGVtIHtcbiAgICBtYXJnaW46IDA7XG4gICAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX19wbGFjZWhvbGRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAzMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IEBob3Zlcl9iZ19jb2xvcjtcbiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIEBzdWNjZXNzX2NvbG9yO1xuICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgJl9fYW5jaG9yIHtcbiAgICAuZWxsaXBzaXMoMSk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogMCAxLjVlbTtcblxuICAgICY6bGluayxcbiAgICAmOnZpc2l0ZWQsXG4gICAgJjpob3ZlciB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICBjb2xvcjogQHNlY29uZGFyeV90ZXh0X2NvbG9yO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xuICAgIH1cbiAgfVxuXG4gICZfX2NvZGUge1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuNWVtO1xuICB9XG5cbiAgJl9hY3RpdmUge1xuICAgICYub3V0bGluZS1jaGFwdGVyc19fYW5jaG9yIHtcbiAgICAgICY6bGluayxcbiAgICAgICY6dmlzaXRlZCxcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9zdGlja3ksXG4gICZfZml4ZWQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG4gICAgdG9wOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICAub3V0bGluZS1jaGFwdGVycyB7XG4gICAgICAmX190aXRsZSxcbiAgICAgICZfX21haW4ge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgfVxuXG4gICAgICAmX190aXRsZSB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgfVxuXG4gICAgICAmX19tYWluIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl9zdGlja3kge1xuICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgbWF4LWhlaWdodDogdmFyKC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0KTtcbiAgfVxuXG4gICZfZml4ZWQge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xuICB9XG5cbiAgJl9oaWRkZW4ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAmX2ZvbGRlZCB7XG4gICAgd2lkdGg6IDA7XG4gIH1cbn1cbiIsIi8qKlxuICogZWxsaXBzaXMubGVzcyAtIOaWh+acrOecgeeVpSBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4xMVxuICovXG5cbi8qID09PT09PSDmlofmnKznnIHnlaXlh73mlbAgPT09PT09ICovXG4uZWxsaXBzaXMgKEBsaW5lcykgd2hlbiAoQGxpbmVzPTEpIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5lbGxpcHNpcyAoQGxpbmVzKSB3aGVuIChAbGluZXM+PTIpIHtcbiAgLXdlYmtpdC1saW5lLWNsYW1wOiBAbGluZXM7XG4gIGRpc3BsYXk6IGJveDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4iLCIvKiA9PT09PT09PT09IGJ1dHRvbnMudGhlbWUgLSDmjInpkq7lr7zoiKrmoLflvI8gPT09PT09PT09PSAqL1xuQGltcG9ydCAnLi9jb2xvcnMnO1xuQGltcG9ydCAnLi9zaGFkb3cnO1xuXG4ub3V0bGluZS10b29sYmFyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgbWFyZ2luOiAwO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICZfX2J1dHRvbiB7XG4gICAgLnNoYWRvd19saWdodF9yZWd1bGFyKCk7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgbWFyZ2luOiAxMHB4O1xuICAgIHdpZHRoOiAzNnB4O1xuICAgIGhlaWdodDogMzZweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBAcHJpbWFyeV9ib3JkZXJfY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogQHdoaXRlO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgY29sb3I6IEBzZWNvbmRhcnlfdGV4dF9jb2xvcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG4gICAgICBib3JkZXItY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xuICAgIH1cblxuICAgICYuaGlkZSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gICZfX2FuY2hvciB7XG4gICAgJjpsaW5rLFxuICAgICY6dmlzaXRlZCxcbiAgICAmOmhvdmVyIHtcbiAgICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG4gICAgfVxuICB9XG5cbiAgJl9faWNvbiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gICZfYWN0aXZlIHtcbiAgICAmLm91dGxpbmUtdG9vbGJhciB7XG4gICAgICAmX19idXR0b24ge1xuICAgICAgICBjb2xvcjogQHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICBjb2xvcjogQHdoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yIHtcbiAgICAgICY6bGluayxcbiAgICAgICY6dmlzaXRlZCxcbiAgICAgICY6aG92ZXIge1xuICAgICAgICBjb2xvcjogQHdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfcm91bmRlZCB7XG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gICAgICBib3JkZXItcmFkaXVzOiAxOHB4O1xuICAgIH1cbiAgfVxuXG4gICZfZGlzYWJsZWQge1xuICAgICYub3V0bGluZS10b29sYmFyLFxuICAgIC5vdXRsaW5lLXRvb2xiYXIge1xuICAgICAgJl9fYW5jaG9yOmxpbmssXG4gICAgICAmX19hbmNob3I6dmlzaXRlZCxcbiAgICAgICZfX2FuY2hvcjpob3ZlcixcbiAgICAgICZfX2J1dHRvbiB7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmX19idXR0b24ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZGlzYWJsZWRfYmdfY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJl90dGIsXG4gICZfYnR0IHtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuXG4gICAgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gIH1cblxuICAmX3R0YiB7XG4gICAgdG9wOiAxMnB4O1xuXG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgICAgIHRvcDogLTU2cHg7XG4gICAgfVxuICB9XG5cbiAgJl9idHQge1xuICAgIGJvdHRvbTogMTJweDtcblxuICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gICAgICBib3R0b206IC01NnB4O1xuICAgIH1cbiAgfVxuXG4gICZfcnRsLFxuICAmX2x0ciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIHdpZHRoOiA1NnB4O1xuICB9XG5cbiAgJl9ydGwge1xuICAgIHRvcDogNTAlO1xuICAgIHJpZ2h0OiAxMnB4O1xuXG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgICAgIHJpZ2h0OiAtODZweDtcbiAgICB9XG4gIH1cblxuICAmX2x0ciB7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogMTJweDtcblxuICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gICAgICBsZWZ0OiAtODZweDtcbiAgICB9XG4gIH1cblxuICAmX3R0YixcbiAgJl9ydGwsXG4gICZfYnR0LFxuICAmX2x0ciB7XG4gICAgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKiA9PT09PSBTY3JvbGxiYXIgPT09PT0gKi9cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogN3B4O1xuICBoZWlnaHQ6IDdweDtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2stcGllY2Uge1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvcml6b250YWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMjUpO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhcjpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuIl19 */ diff --git a/outline.min.css b/outline.min.css index 39cf444a..c87e800a 100644 --- a/outline.min.css +++ b/outline.min.css @@ -1,2 +1,2 @@ .outline-icon,.outline-icon__svg{width:1em;height:1em;overflow:hidden}.outline-icon__svg,.outline-toolbar__icon{-webkit-transform:translate(-50%,-50%);fill:currentcolor}.outline-chapters__title,.outline-drawer__title,.outline-drawer_ttb{border-bottom:1px solid #dcdfe6}:root{--outline-zIndex:2000;--outline-sticky-height:100%;--outline-chapters-width:100%}.outline-icon{position:relative;z-index:1;display:inline-block;vertical-align:middle}.outline-icon__svg{position:absolute;z-index:2;top:50%;left:50%;transform:translate(-50%,-50%)}.outline-heading{position:relative;z-index:1;overflow:hidden}.outline-heading__anchor{display:none}.outline-heading__anchor:hover,.outline-heading__anchor:link,.outline-heading__anchor:visited{color:#999;text-decoration:none}.outline-heading__anchor:hover{color:#1f8dd6}.outline-heading:hover .outline-heading__anchor{display:inline-block}.outline-heading_start:hover{overflow:visible}.outline-heading_start .outline-heading__anchor{position:absolute;z-index:2;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);left:-1em}.outline-drawer{position:relative;z-index:-1;top:0;left:0;margin:0;width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;visibility:hidden;overflow:hidden}.outline-drawer__modal{-webkit-box-shadow:0 0 6px 1px #dcdfe6;box-shadow:0 0 6px 1px #dcdfe6;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:absolute;z-index:21;height:100%;background-color:#fff;-webkit-transition-duration:.4s;transition-duration:.4s;overflow:hidden}.outline-drawer__footer,.outline-drawer__header,.outline-drawer__main{width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.outline-drawer__footer,.outline-drawer__header{-ms-flex-negative:0;flex-shrink:0}.outline-drawer__footer,.outline-drawer__main,.outline-drawer__title{padding:0 16px}.outline-drawer__header,.outline-drawer__title{position:relative;z-index:1;margin:0 auto;height:52px;line-height:52px;overflow:hidden}.outline-drawer__title{font-size:16px;font-weight:400;margin:0 16px;-webkit-box-sizing:border-box;box-sizing:border-box}.outline-drawer__close{position:absolute;z-index:2;top:50%;right:12px;width:20px;height:20px;line-height:20px;color:#999;font-size:20px;text-align:center;cursor:pointer;-webkit-transform:translateY(-50%);transform:translateY(-50%);overflow:hidden}.outline-drawer__close .outline-icon{position:absolute;z-index:2;top:0;left:0}.outline-drawer__close:hover{color:#666}.outline-drawer__main{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.outline-drawer__footer{margin:0 auto;text-align:right;overflow:hidden}.outline-drawer__overlay{content:'';position:relative;z-index:1;top:0;left:0;width:100%;height:100%;background-color:#fff;opacity:.1;overflow:hidden}.outline-drawer_ltr.outline-drawer_tiny,.outline-drawer_rtl.outline-drawer_tiny{width:280px}.outline-drawer_ltr.outline-drawer_mini,.outline-drawer_rtl.outline-drawer_mini{width:480px}.outline-drawer_ltr.outline-drawer_small,.outline-drawer_rtl.outline-drawer_small{width:540px}.outline-drawer_ltr.outline-drawer_regular,.outline-drawer_rtl.outline-drawer_regular{width:680px}.outline-drawer_ltr.outline-drawer_medium,.outline-drawer_rtl.outline-drawer_medium{width:720px}.outline-drawer_ltr.outline-drawer_large,.outline-drawer_rtl.outline-drawer_large{width:960px}.outline-drawer_rtl{border-left:1px solid #dcdfe6}.outline-drawer_rtl.outline-drawer_tiny.outline-drawer_closed{right:-290px}.outline-drawer_rtl.outline-drawer_mini.outline-drawer_closed{right:-490px}.outline-drawer_rtl.outline-drawer_small.outline-drawer_closed{right:-550px}.outline-drawer_rtl.outline-drawer_regular.outline-drawer_closed{right:-690px}.outline-drawer_rtl.outline-drawer_medium.outline-drawer_closed{right:-730px}.outline-drawer_rtl.outline-drawer_large.outline-drawer_closed{right:-970px}.outline-drawer_ltr{border-right:1px solid #dcdfe6}.outline-drawer_ltr.outline-drawer_tiny.outline-drawer_closed{left:-290px}.outline-drawer_ltr.outline-drawer_mini.outline-drawer_closed{left:-490px}.outline-drawer_ltr.outline-drawer_small.outline-drawer_closed{left:-550px}.outline-drawer_ltr.outline-drawer_regular.outline-drawer_closed{left:-690px}.outline-drawer_ltr.outline-drawer_medium.outline-drawer_closed{left:-730px}.outline-drawer_ltr.outline-drawer_large.outline-drawer_closed{left:-970px}.outline-drawer_btt,.outline-drawer_ttb{left:0;width:100%}.outline-drawer_btt.outline-drawer_tiny,.outline-drawer_ttb.outline-drawer_tiny{height:240px}.outline-drawer_btt.outline-drawer_mini,.outline-drawer_ttb.outline-drawer_mini{height:320px}.outline-drawer_btt.outline-drawer_small,.outline-drawer_ttb.outline-drawer_small{height:360px}.outline-drawer_btt.outline-drawer_regular,.outline-drawer_ttb.outline-drawer_regular{height:400px}.outline-drawer_btt.outline-drawer_medium,.outline-drawer_ttb.outline-drawer_medium{height:440px}.outline-drawer_btt.outline-drawer_large,.outline-drawer_ttb.outline-drawer_large{height:480px}.outline-drawer_ttb.outline-drawer_tiny.outline-drawer_closed{top:-250px}.outline-drawer_ttb.outline-drawer_mini.outline-drawer_closed{top:-330px}.outline-drawer_ttb.outline-drawer_small.outline-drawer_closed{top:-370px}.outline-drawer_ttb.outline-drawer_regular.outline-drawer_closed{top:-410px}.outline-drawer_ttb.outline-drawer_medium.outline-drawer_closed{top:-450px}.outline-drawer_ttb.outline-drawer_large.outline-drawer_closed{top:-490px}.outline-drawer_btt{top:initial;border-top:1px solid #dcdfe6}.outline-drawer_btt.outline-drawer_tiny.outline-drawer_closed{bottom:-250px}.outline-drawer_btt.outline-drawer_mini.outline-drawer_closed{bottom:-330px}.outline-drawer_btt.outline-drawer_small.outline-drawer_closed{bottom:-370px}.outline-drawer_btt.outline-drawer_regular.outline-drawer_closed{bottom:-410px}.outline-drawer_btt.outline-drawer_medium.outline-drawer_closed{bottom:-450px}.outline-drawer_btt.outline-drawer_large.outline-drawer_closed{bottom:-490px}.outline-drawer_opened{visibility:visible;z-index:var(--outline-zIndex)}.outline-drawer_opened.outline-drawer{position:fixed}.outline-drawer_opened.outline-drawer_rtl{right:0}.outline-drawer_opened.outline-drawer_ltr{left:0}.outline-drawer_opened.outline-drawer_ttb{top:0}.outline-drawer_opened.outline-drawer_btt{bottom:0}.outline-drawer_offset.outline-drawer_ltr,.outline-drawer_offset.outline-drawer_rtl{height:calc(100% - 4em);top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.outline-drawer_offset.outline-drawer_btt,.outline-drawer_offset.outline-drawer_ttb{width:calc(100% - 4em);left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.outline-drawer_offset.outline-drawer_opened.outline-drawer_rtl{right:2em}.outline-drawer_offset.outline-drawer_opened.outline-drawer_ltr{left:2em}.outline-drawer_offset.outline-drawer_opened.outline-drawer_ttb{top:2em}.outline-drawer_offset.outline-drawer_opened.outline-drawer_btt{bottom:2em}.outline-drawer_auto.outline-drawer_ltr,.outline-drawer_auto.outline-drawer_rtl{height:auto;max-height:calc(100% - 4em)}.outline-drawer_full{padding:0}.outline-chapters{position:relative;z-index:1;margin:0;width:var(--outline-chapters-width);-webkit-transition-duration:.3s;transition-duration:.3s;overflow:auto}.outline-chapters__title{margin:0 16px;height:40px;line-height:40px;padding:0 16px;font-size:16px;font-weight:400;overflow:hidden}.outline-chapters__main{position:relative;z-index:1;margin:0;overflow:hidden}.outline-chapters__item,.outline-chapters__list,.outline-chapters__subject{position:relative;z-index:2;margin:0;padding:0;list-style-type:none;overflow:hidden}.outline-chapters__list{padding:.5em 0}.outline-chapters__subject{padding-left:1em}.outline-chapters__item{margin:0;line-height:30px;font-size:13px;overflow:hidden}.outline-chapters__placeholder{position:absolute;z-index:1;top:0;left:0;width:100%;height:30px;background-color:#f7f8f9;border-left:2px solid #058942;-webkit-transition-duration:.2s;transition-duration:.2s;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.outline-chapters__anchor{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;padding:0 1.5em}.outline-chapters__anchor:hover,.outline-chapters__anchor:link,.outline-chapters__anchor:visited{text-decoration:none;color:#555}.outline-chapters__anchor:hover{color:#058942}.outline-chapters__code{padding-right:.5em}.outline-chapters_active.outline-chapters__anchor:hover,.outline-chapters_active.outline-chapters__anchor:link,.outline-chapters_active.outline-chapters__anchor:visited{color:#058942;font-weight:400}.outline-chapters_fixed,.outline-chapters_sticky{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;z-index:var(--outline-zIndex);top:0;overflow:hidden}.outline-chapters_hidden,.outline-toolbar__button.hide{display:none}.outline-chapters_fixed .outline-chapters__main,.outline-chapters_fixed .outline-chapters__title,.outline-chapters_sticky .outline-chapters__main,.outline-chapters_sticky .outline-chapters__title{-webkit-box-sizing:border-box;box-sizing:border-box}.outline-chapters_fixed .outline-chapters__title,.outline-chapters_sticky .outline-chapters__title{-ms-flex-negative:0;flex-shrink:0}.outline-chapters_fixed .outline-chapters__main,.outline-chapters_sticky .outline-chapters__main{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.outline-chapters_sticky{position:sticky;max-height:var(--outline-sticky-height)}.outline-chapters_fixed{position:fixed;max-height:100%}.outline-chapters_folded{width:0}.outline-toolbar{position:fixed;z-index:99999;margin:0;-webkit-transition-duration:.3s;transition-duration:.3s;overflow:hidden}.outline-toolbar__button{-webkit-box-shadow:0 0 6px 1px #dcdfe6;box-shadow:0 0 6px 1px #dcdfe6;position:relative;z-index:1;margin:10px;width:36px;height:36px;border:1px solid #dcdfe6;border-radius:3px;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;cursor:pointer;text-align:center;color:#555;overflow:hidden}.outline-toolbar__button:hover{color:#058942;border-color:#058942}.outline-toolbar__anchor:hover,.outline-toolbar__anchor:link,.outline-toolbar__anchor:visited{color:#999;text-decoration:none}.outline-toolbar__anchor:hover{color:#058942}.outline-toolbar__icon{position:absolute;z-index:2;top:50%;left:50%;width:20px;height:20px;transform:translate(-50%,-50%);overflow:hidden}.outline-toolbar_active.outline-toolbar__button{color:#fff;background-color:#058942;border-color:#058942}.outline-toolbar_active .outline-toolbar__anchor:hover,.outline-toolbar_active .outline-toolbar__anchor:link,.outline-toolbar_active .outline-toolbar__anchor:visited,.outline-toolbar_active.outline-toolbar__button:hover{color:#fff}.outline-toolbar_rounded.outline-toolbar__button{border-radius:18px}.outline-toolbar_disabled .outline-toolbar__anchor:hover,.outline-toolbar_disabled .outline-toolbar__anchor:link,.outline-toolbar_disabled .outline-toolbar__anchor:visited,.outline-toolbar_disabled .outline-toolbar__button,.outline-toolbar_disabled.outline-toolbar__anchor:hover,.outline-toolbar_disabled.outline-toolbar__anchor:link,.outline-toolbar_disabled.outline-toolbar__anchor:visited,.outline-toolbar_disabled.outline-toolbar__button{cursor:not-allowed;color:#999}.outline-toolbar_disabled .outline-toolbar__anchor:hover:hover,.outline-toolbar_disabled .outline-toolbar__anchor:link:hover,.outline-toolbar_disabled .outline-toolbar__anchor:visited:hover,.outline-toolbar_disabled .outline-toolbar__button:hover,.outline-toolbar_disabled.outline-toolbar__anchor:hover:hover,.outline-toolbar_disabled.outline-toolbar__anchor:link:hover,.outline-toolbar_disabled.outline-toolbar__anchor:visited:hover,.outline-toolbar_disabled.outline-toolbar__button:hover{color:#999}.outline-toolbar_disabled .outline-toolbar__button,.outline-toolbar_disabled.outline-toolbar__button{background-color:#f5f5f5}.outline-toolbar_btt,.outline-toolbar_ttb{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.outline-toolbar_btt .outline-toolbar__button,.outline-toolbar_ttb .outline-toolbar__button{display:inline-block}.outline-toolbar_ttb{top:12px}.outline-toolbar_ttb.outline-toolbar_hidden{top:-56px}.outline-toolbar_btt{bottom:12px}.outline-toolbar_btt.outline-toolbar_hidden{bottom:-56px}.outline-toolbar_ltr,.outline-toolbar_rtl{-webkit-transform:translateY(-50%);transform:translateY(-50%);width:56px}.outline-toolbar_rtl{top:50%;right:12px}.outline-toolbar_rtl.outline-toolbar_hidden{right:-86px}.outline-toolbar_ltr{top:50%;left:12px}.outline-toolbar_ltr.outline-toolbar_hidden{left:-86px}.outline-toolbar_btt .outline-toolbar__button.outline-toolbar_hidden,.outline-toolbar_ltr .outline-toolbar__button.outline-toolbar_hidden,.outline-toolbar_rtl .outline-toolbar__button.outline-toolbar_hidden,.outline-toolbar_ttb .outline-toolbar__button.outline-toolbar_hidden{display:none}::-webkit-scrollbar{width:7px;height:7px;-webkit-border-radius:5px}::-webkit-scrollbar-track-piece{-webkit-border-radius:5px}::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.25);-webkit-border-radius:5px}::-webkit-scrollbar-thumb:horizontal{background-color:rgba(0,0,0,.25);-webkit-border-radius:5px}::-webkit-scrollbar:hover{background-color:rgba(0,0,0,.15)}::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.35)} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJvdXRsaW5lLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyI6cm9vdCB7XG4gIC0tb3V0bGluZS16SW5kZXg6IDIwMDA7XG4gIC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0OiAxMDAlO1xuICAtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGg6IDEwMCU7XG59XG4vKiA9PT09PT09PT09IGNvbG9ycy50aGVtZSAtIOWfuuehgOminOiJsuWPmOmHj+mbhuWQiCA9PT09PT09PT09ICovXG4vKipcbiAqIGVsbGlwc2lzLmxlc3MgLSDmlofmnKznnIHnlaUgbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMTFcbiAqL1xuLyogPT09PT09IOaWh+acrOecgeeVpeWHveaVsCA9PT09PT0gKi9cbi8qKlxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMjBcbiAqL1xuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cbi8qID09PT09PT09PT0gaWNvbi50aGVtZSAtIHN2ZyDlm77moIfnmoTmoLflvI8gPT09PT09PT09PSAqL1xuLm91dGxpbmUtaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWljb25fX3N2ZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDFlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWhlYWRpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzFmOGRkNjtcbn1cbi5vdXRsaW5lLWhlYWRpbmc6aG92ZXIgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLm91dGxpbmUtaGVhZGluZ19zdGFydDpob3ZlciB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLm91dGxpbmUtaGVhZGluZ19zdGFydCAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGxlZnQ6IC0xZW07XG59XG4ub3V0bGluZS1kcmF3ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IC0xO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbW9kYWwge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDIxO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC40cztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX21haW4sXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIHdpZHRoOiAxMDAlO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9faGVhZGVyLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSxcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgcGFkZGluZzogMCAxNnB4O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDAgYXV0bztcbiAgaGVpZ2h0OiA1MnB4O1xuICBsaW5lLWhlaWdodDogNTJweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMCAxNnB4O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDEycHg7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBjb2xvcjogIzk5OTtcbiAgZm9udC1zaXplOiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19jbG9zZSAub3V0bGluZS1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlOmhvdmVyIHtcbiAgY29sb3I6ICM2NjY7XG59XG4ub3V0bGluZS1kcmF3ZXJfX21haW4ge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fb3ZlcmxheSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgb3BhY2l0eTogMC4xO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl90aW55LFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl90aW55IHtcbiAgd2lkdGg6IDI4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9taW5pLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pIHtcbiAgd2lkdGg6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICB3aWR0aDogNTQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIsXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIge1xuICB3aWR0aDogNjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtIHtcbiAgd2lkdGg6IDcyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICB3aWR0aDogOTYwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtMjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC01NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTY5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC05NzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC01NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC05NzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICBoZWlnaHQ6IDI0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pIHtcbiAgaGVpZ2h0OiAzMjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfc21hbGwsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3NtYWxsIHtcbiAgaGVpZ2h0OiAzNjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIGhlaWdodDogNDAwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21lZGl1bSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtIHtcbiAgaGVpZ2h0OiA0NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbGFyZ2UsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX2xhcmdlIHtcbiAgaGVpZ2h0OiA0ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0yNTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zMzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtMzcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDEwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgdG9wOiBpbml0aWFsO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0yNTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zMzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtMzcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDEwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgcmlnaHQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGxlZnQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIHRvcDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgYm90dG9tOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9ydGwsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcbiAgdG9wOiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfdHRiLFxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB3aWR0aDogY2FsYygxMDAlIC0gNGVtKTtcbiAgbGVmdDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9hdXRvLm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9hdXRvLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9mdWxsIHtcbiAgcGFkZGluZzogMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiB2YXIoLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoKTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlIHtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIGhlaWdodDogNDBweDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmc6IDAgMTZweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbGlzdCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19zdWJqZWN0LFxuLm91dGxpbmUtY2hhcHRlcnNfX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDI7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2xpc3Qge1xuICBwYWRkaW5nOiAwLjVlbSAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3N1YmplY3Qge1xuICBwYWRkaW5nLWxlZnQ6IDFlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19pdGVtIHtcbiAgbWFyZ2luOiAwO1xuICBsaW5lLWhlaWdodDogMzBweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3BsYWNlaG9sZGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDMwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y4Zjk7XG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzA1ODk0MjtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMCAxLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjNTU1O1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2NvZGUge1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG4gIHRvcDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX21haW4sXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSB7XG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX21haW4sXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIG1heC1oZWlnaHQ6IHZhcigtLW91dGxpbmUtc3RpY2t5LWhlaWdodCk7XG59XG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbWF4LWhlaWdodDogMTAwJTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2hpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19mb2xkZWQge1xuICB3aWR0aDogMDtcbn1cbi8qID09PT09PT09PT0gYnV0dG9ucy50aGVtZSAtIOaMiemSruWvvOiIquagt+W8jyA9PT09PT09PT09ICovXG4ub3V0bGluZS10b29sYmFyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgbWFyZ2luOiAwO1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMTBweDtcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RjZGZlNjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjNTU1O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG4gIGJvcmRlci1jb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDU4OTQyO1xuICBib3JkZXItY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9yb3VuZGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogMThweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgY29sb3I6ICM5OTk7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbms6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZDpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXI6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiLFxuLm91dGxpbmUtdG9vbGJhcl9idHQge1xuICBsZWZ0OiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIHtcbiAgdG9wOiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIHRvcDogLTU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2J0dCB7XG4gIGJvdHRvbTogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYnR0Lm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBib3R0b206IC01NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwsXG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgd2lkdGg6IDU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bCB7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICByaWdodDogLTg2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9sdHIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGxlZnQ6IC04NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX3J0bCAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9sdHIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLyogPT09PT0gU2Nyb2xsYmFyID09PT09ICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDdweDtcbiAgaGVpZ2h0OiA3cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGY4O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkluWmhjbWxoWW14bGN5NXNaWE56SWl3aUxpNHZMaTR2UEdsdWNIVjBJR056Y3lBMVBpSXNJbWxqYjI1ekxteGxjM01pTENKaGJtTm9iM0p6TG14bGMzTWlMQ0prY21GM1pYSXViR1Z6Y3lJc0luTm9ZV1J2ZHk1c1pYTnpJaXdpWTJoaGNIUmxjbk11YkdWemN5SXNJbVZzYkdsd2MybHpMbXhsYzNNaUxDSjBiMjlzWW1GeUxteGxjM01pTENKelkzSnZiR3hpWVhJdWJHVnpjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVR0RlFVTkRMSFZDUVVGQk8wVkJRMFFzT0VKQlFVRTdSVUZCYVVNc0swSkJRVUU3UTBORmFFTTdRVUZEUkN4dFJFRkJiVVE3UVVGRGJrUTdPenM3TzBkQlMwYzdRVUZEU0N3d1FrRkJNRUk3UVVGRE1VSTdPenM3TzBkQlMwYzdRVUZEU0N3MFFrRkJORUk3UVVGRE5VSXNhMFJCUVd0RU8wRkRia0pzUkR0RlFVTkZMRzFDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEhOQ1FVRkJPMFZCUTBFc2RVSkJRVUU3UlVGRFFTeFhRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR2xDUVVGQk8wTkVjVUpFTzBGRGJrSkRPMFZCUTBVc2JVSkJRVUU3UlVGRFFTeFhRVUZCTzBWQlEwRXNVMEZCUVR0RlFVTkJMRlZCUVVFN1JVRkRRU3hYUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc2VVTkJRVUU3VlVGQlFTeHBRMEZCUVR0RlFVTkJMR2xDUVVGQk8wTkVjVUpJTzBGRmRFTkVPMFZCUTBVc2JVSkJRVUU3UlVGRFFTeFhRVUZCTzBWQlEwRXNhVUpCUVVFN1EwWjNRMFE3UVVWMFEwTTdSVUZEUlN4alFVRkJPME5HZDBOSU8wRkZkRU5IT3pzN1JVRkhSU3haUVVGQk8wVkJRMEVzYzBKQlFVRTdRMFozUTB3N1FVVnlRMGM3UlVGRFJTeGxRVUZCTzBOR2RVTk1PMEZGYmtORE8wVkJSVWtzYzBKQlFVRTdRMFp2UTB3N1FVVXZRa2M3UlVGRFJTeHJRa0ZCUVR0RFJtbERURHRCUlc1RFF6dEZRVTFKTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxGTkJRVUU3UlVGRFFTeHZRMEZCUVR0VlFVRkJMRFJDUVVGQk8wVkJRMEVzVjBGQlFUdERSbWREVER0QlIyeEZSRHRGUVVORkxHMUNRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMRTlCUVVFN1JVRkRRU3hSUVVGQk8wVkJRMEVzVlVGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc0swSkJRVUU3VlVGQlFTeDFRa0ZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMGh2UlVRN1FVZHNSVU03UlVOUWMwUXNkME5CUVVFN1ZVRkJRU3huUTBGQlFUdEZSRk53UkN4eFFrRkJRVHRGUVVGQkxIRkNRVUZCTzBWQlFVRXNZMEZCUVR0RlFVTkJMRFpDUVVGQk8wVkJRVUVzT0VKQlFVRTdUVUZCUVN3eVFrRkJRVHRWUVVGQkxIVkNRVUZCTzBWQlEwRXNjMEpCUVVFN1RVRkJRU3hyUWtGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTeDFRa0ZCUVR0RlFVTkJMR3REUVVGQk8xVkJRVUVzTUVKQlFVRTdSVUZEUVN4cFFrRkJRVHREU0c5RlNEdEJSMnBGUXpzN08wVkJSMFVzV1VGQlFUdEZRVU5CTEN0Q1FVRkJPMVZCUVVFc2RVSkJRVUU3UTBodFJVZzdRVWRvUlVNN08wVkJSVVVzY1VKQlFVRTdUVUZCUVN4bFFVRkJPME5JYTBWSU8wRkhMMFJET3pzN1JVRkhSU3huUWtGQlFUdERTR2xGU0R0QlJ6bEVRenM3UlVGRlJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hsUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEd0Q1FVRkJPMFZCUTBFc2FVSkJRVUU3UTBoblJVZzdRVWMzUkVNN1JVRkRSU3huUWtGQlFUdEZRVU5CTEdsQ1FVRkJPMFZCUTBFc1pVRkJRVHRGUVVOQkxDdENRVUZCTzFWQlFVRXNkVUpCUVVFN1JVRkRRU3hwUTBGQlFUdERTQ3RFU0R0QlJ6VkVRenRGUVVORkxHMUNRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMRk5CUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4clFrRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzWjBKQlFVRTdSVUZEUVN4dlEwRkJRVHRWUVVGQkxEUkNRVUZCTzBWQlEwRXNhVUpCUVVFN1EwZzRSRWc3UVVjelJVTTdSVUZuUWtrc2JVSkJRVUU3UlVGRFFTeFhRVUZCTzBWQlEwRXNUMEZCUVR0RlFVTkJMRkZCUVVFN1EwZzRSRXc3UVVjelJFYzdSVUZEUlN4WlFVRkJPME5JTmtSTU8wRkhla1JETzBWQlEwVXNiMEpCUVVFN1RVRkJRU3haUVVGQk8xVkJRVUVzVVVGQlFUdEZRVU5CTEdWQlFVRTdRMGd5UkVnN1FVZDRSRU03UlVGRFJTeGxRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3hwUWtGQlFUdERTREJFU0R0QlIzWkVRenRGUVVORkxGbEJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hQUVVGQk8wVkJRMEVzVVVGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc2RVSkJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNhVUpCUVVFN1EwaDVSRWc3UVVkdVJFczdPMFZCUTBVc1lVRkJRVHREU0hORVVEdEJSMjVFU3pzN1JVRkRSU3hoUVVGQk8wTkljMFJRTzBGSGJrUkxPenRGUVVORkxHRkJRVUU3UTBoelJGQTdRVWR1UkVzN08wVkJRMFVzWVVGQlFUdERTSE5FVUR0QlIyNUVTenM3UlVGRFJTeGhRVUZCTzBOSWMwUlFPMEZIYmtSTE96dEZRVU5GTEdGQlFVRTdRMGh6UkZBN1FVZHFSRU03UlVGRFJTd3JRa0ZCUVR0RFNHMUVTRHRCUnk5RFR6dEZRVU5GTEdOQlFVRTdRMGhwUkZRN1FVYzFRMDg3UlVGRFJTeGpRVUZCTzBOSU9FTlVPMEZIZWtOUE8wVkJRMFVzWTBGQlFUdERTREpEVkR0QlIzUkRUenRGUVVORkxHTkJRVUU3UTBoM1ExUTdRVWR1UTA4N1JVRkRSU3hqUVVGQk8wTkljVU5VTzBGSGFFTlBPMFZCUTBVc1kwRkJRVHREU0d0RFZEdEJSelZDUXp0RlFVTkZMR2REUVVGQk8wTklPRUpJTzBGSE1VSlBPMFZCUTBVc1lVRkJRVHREU0RSQ1ZEdEJSM1pDVHp0RlFVTkZMR0ZCUVVFN1EwaDVRbFE3UVVkd1FrODdSVUZEUlN4aFFVRkJPME5JYzBKVU8wRkhha0pQTzBWQlEwVXNZVUZCUVR0RFNHMUNWRHRCUjJSUE8wVkJRMFVzWVVGQlFUdERTR2RDVkR0QlIxaFBPMFZCUTBVc1lVRkJRVHREU0dGVU8wRkhVRU03TzBWQlJVVXNVVUZCUVR0RlFVTkJMRmxCUVVFN1EwaFRTRHRCUjA1TE96dEZRVU5GTEdOQlFVRTdRMGhUVUR0QlIwNUxPenRGUVVORkxHTkJRVUU3UTBoVFVEdEJSMDVMT3p0RlFVTkZMR05CUVVFN1EwaFRVRHRCUjA1TE96dEZRVU5GTEdOQlFVRTdRMGhUVUR0QlIwNUxPenRGUVVORkxHTkJRVUU3UTBoVFVEdEJSMDVMT3p0RlFVTkZMR05CUVVFN1EwaFRVRHRCUjBwRE8wVkJRMFVzYVVOQlFVRTdRMGhOU0R0QlIwWlBPMFZCUTBVc1dVRkJRVHREU0VsVU8wRkhRMDg3UlVGRFJTeFpRVUZCTzBOSVExUTdRVWRKVHp0RlFVTkZMRmxCUVVFN1EwaEdWRHRCUjA5UE8wVkJRMFVzV1VGQlFUdERTRXhVTzBGSFZVODdSVUZEUlN4WlFVRkJPME5JVWxRN1FVZGhUenRGUVVORkxGbEJRVUU3UTBoWVZEdEJSMmxDUXp0RlFVTkZMR0ZCUVVFN1JVRkRRU3c0UWtGQlFUdERTR1pJTzBGSGJVSlBPMFZCUTBVc1pVRkJRVHREU0dwQ1ZEdEJSM05DVHp0RlFVTkZMR1ZCUVVFN1EwaHdRbFE3UVVkNVFrODdSVUZEUlN4bFFVRkJPME5JZGtKVU8wRkhORUpQTzBWQlEwVXNaVUZCUVR0RFNERkNWRHRCUnl0Q1R6dEZRVU5GTEdWQlFVRTdRMGczUWxRN1FVZHJRMDg3UlVGRFJTeGxRVUZCTzBOSWFFTlVPMEZIYzBORE8wVkJRMFVzYjBKQlFVRTdSVUZEUVN3clFrRkJRVHREU0hCRFNEdEJSM05EUnp0RlFVTkZMR2RDUVVGQk8wTkljRU5NTzBGSGMwTkxPMFZCUTBVc1UwRkJRVHREU0hCRFVEdEJSM1ZEU3p0RlFVTkZMRkZCUVVFN1EwaHlRMUE3UVVkM1EwczdSVUZEUlN4UFFVRkJPME5JZEVOUU8wRkhlVU5MTzBWQlEwVXNWVUZCUVR0RFNIWkRVRHRCUnpoRFN6czdSVUZGUlN4NVFrRkJRVHRGUVVOQkxGTkJRVUU3UlVGRFFTeHZRMEZCUVR0VlFVRkJMRFJDUVVGQk8wTklOVU5RTzBGSEswTkxPenRGUVVWRkxIZENRVUZCTzBWQlEwRXNWVUZCUVR0RlFVTkJMRzlEUVVGQk8xVkJRVUVzTkVKQlFVRTdRMGczUTFBN1FVZHJSRk03UlVGRFJTeFhRVUZCTzBOSWFFUllPMEZIYlVSVE8wVkJRMFVzVlVGQlFUdERTR3BFV0R0QlIyOUVVenRGUVVORkxGTkJRVUU3UTBoc1JGZzdRVWR4UkZNN1JVRkRSU3haUVVGQk8wTklia1JZTzBGSE5FUkxPenRGUVVWRkxHRkJRVUU3UlVGRFFTdzJRa0ZCUVR0RFNERkVVRHRCUnl0RVF6dEZRVU5GTEZkQlFVRTdRMGczUkVnN1FVdHVWMFE3UlVGRFJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hWUVVGQk8wVkJRMEVzY1VOQlFVRTdSVUZEUVN4clEwRkJRVHRWUVVGQkxEQkNRVUZCTzBWQlEwRXNaVUZCUVR0RFRIRlhSRHRCUzI1WFF6dEZRVU5GTEdWQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc2EwSkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMR2xEUVVGQk8wVkJRMEVzWjBKQlFVRTdSVUZEUVN4cFFrRkJRVHRGUVVOQkxHbENRVUZCTzBOTWNWZElPMEZMYkZkRE8wVkJRMFVzYlVKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxHbENRVUZCTzBOTWIxZElPMEZMYWxkRE96czdSVUZIUlN4dFFrRkJRVHRGUVVOQkxGZEJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMSE5DUVVGQk8wVkJRMEVzYVVKQlFVRTdRMHh0VjBnN1FVdG9WME03UlVGRFJTeHBRa0ZCUVR0RFRHdFhTRHRCU3k5V1F6dEZRVU5GTEd0Q1FVRkJPME5NYVZkSU8wRkxPVlpETzBWQlEwVXNWVUZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzWjBKQlFVRTdSVUZEUVN4cFFrRkJRVHREVEdkWFNEdEJTemRXUXp0RlFVTkZMRzFDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEU5QlFVRTdSVUZEUVN4UlFVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTd3dRa0ZCUVR0RlFVTkJMQ3RDUVVGQk8wVkJRMEVzYTBOQlFVRTdWVUZCUVN3d1FrRkJRVHRGUVVOQkxDdENRVUZCTzFWQlFVRXNkVUpCUVVFN1JVRkRRU3hwUWtGQlFUdERUQ3RXU0R0QlN6VldRenRGUXpkRVFTeHZRa0ZCUVR0RlFVTkJMSGRDUVVGQk8wVkJRMEVzYVVKQlFVRTdSVVEyUkVVc1pVRkJRVHRGUVVOQkxHbENRVUZCTzBOTVoxZElPMEZMT1ZaSE96czdSVUZIUlN4elFrRkJRVHRGUVVOQkxGbEJRVUU3UTB4blYwdzdRVXMzVmtjN1JVRkRSU3hsUVVGQk8wTk1LMVpNTzBGTE0xWkRPMFZCUTBVc2NVSkJRVUU3UTB3MlZrZzdRVXQ0VmtzN096dEZRVWRGTEdWQlFVRTdSVUZEUVN4cFFrRkJRVHREVERCV1VEdEJTM0pXUXpzN1JVRkZSU3h4UWtGQlFUdEZRVUZCTEhGQ1FVRkJPMFZCUVVFc1kwRkJRVHRGUVVOQkxITkNRVUZCTzAxQlFVRXNhMEpCUVVFN1JVRkRRU3cyUWtGQlFUdEZRVUZCTERoQ1FVRkJPMDFCUVVFc01rSkJRVUU3VlVGQlFTeDFRa0ZCUVR0RlFVTkJMQ3RDUVVGQk8wVkJRMEVzVDBGQlFUdEZRVU5CTEdsQ1FVRkJPME5NZFZaSU8wRkxjRlpMT3pzN08wVkJSVVVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHREVEhkV1VEdEJTM0pXU3pzN1JVRkRSU3h4UWtGQlFUdE5RVUZCTEdWQlFVRTdRMHgzVmxBN1FVdHlWa3M3TzBWQlEwVXNiMEpCUVVFN1RVRkJRU3haUVVGQk8xVkJRVUVzVVVGQlFUdEZRVU5CTEdWQlFVRTdRMHgzVmxBN1FVdHVWa003UlVGRFJTeHBRa0ZCUVR0RlFVTkJMSGxEUVVGQk8wTk1jVlpJTzBGTGJGWkRPMFZCUTBVc1owSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFRHOVdTRHRCUzJwV1F6dEZRVU5GTEdOQlFVRTdRMHh0VmtnN1FVdG9Wa003UlVGRFJTeFRRVUZCTzBOTWExWklPMEZCUTBRc2EwUkJRV3RFTzBGUE9XUnNSRHRGUVVORkxHZENRVUZCTzBWQlEwRXNaVUZCUVR0RlFVTkJMRlZCUVVFN1JVRkRRU3hyUTBGQlFUdFZRVUZCTERCQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UTFCblpVUTdRVTg1WkVNN1JVaEdjMFFzZDBOQlFVRTdWVUZCUVN4blEwRkJRVHRGUjBsd1JDeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN3d1FrRkJRVHRGUVVOQkxHMUNRVUZCTzBWQlEwRXNLMEpCUVVFN1ZVRkJRU3gxUWtGQlFUdEZRVU5CTEhWQ1FVRkJPMFZCUTBFc1owSkJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMRmxCUVVFN1JVRkRRU3hwUWtGQlFUdERVR2RsU0R0QlR6bGtSenRGUVVORkxHVkJRVUU3UlVGRFFTeHpRa0ZCUVR0RFVHZGxURHRCVHpka1J6dEZRVU5GTEdOQlFVRTdRMUFyWkV3N1FVOHhaRWM3T3p0RlFVZEZMRmxCUVVFN1JVRkRRU3h6UWtGQlFUdERVRFJrVER0QlQzcGtSenRGUVVORkxHVkJRVUU3UTFBeVpFdzdRVTkyWkVNN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VFFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNlVU5CUVVFN1ZVRkJRU3hwUTBGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UTFCNVpFZzdRVTl3WkVzN1JVRkRSU3haUVVGQk8wVkJRMEVzTUVKQlFVRTdSVUZEUVN4elFrRkJRVHREVUhOa1VEdEJUM0JrVHp0RlFVTkZMRmxCUVVFN1ExQnpaRlE3UVU5b1pFczdPenRGUVVkRkxGbEJRVUU3UTFCclpGQTdRVTgxWTBjN1JVRkRSU3h2UWtGQlFUdERVRGhqVER0QlQzWmpTenM3T3pzN096czdSVUZKUlN4dlFrRkJRVHRGUVVOQkxGbEJRVUU3UTFBMlkxQTdRVTh6WTA4N096czdPenM3TzBWQlEwVXNXVUZCUVR0RFVHOWtWRHRCVDJoa1N6czdSVUZEUlN3d1FrRkJRVHREVUcxa1VEdEJUemxqUXpzN1JVRkZSU3hWUVVGQk8wVkJRMEVzYjBOQlFVRTdWVUZCUVN3MFFrRkJRVHREVUdka1NEdEJUMjVrUXpzN1JVRk5TU3h6UWtGQlFUdERVR2xrVER0QlR6ZGpRenRGUVVORkxGVkJRVUU3UTFBclkwZzdRVTgzWTBjN1JVRkRSU3hYUVVGQk8wTlFLMk5NTzBGUE0yTkRPMFZCUTBVc1lVRkJRVHREVURaalNEdEJUek5qUnp0RlFVTkZMR05CUVVFN1ExQTJZMHc3UVU5NlkwTTdPMFZCUlVVc2IwTkJRVUU3VlVGQlFTdzBRa0ZCUVR0RlFVTkJMRmxCUVVFN1ExQXlZMGc3UVU5NFkwTTdSVUZEUlN4VFFVRkJPMFZCUTBFc1dVRkJRVHREVURCalNEdEJUM2hqUnp0RlFVTkZMR0ZCUVVFN1ExQXdZMHc3UVU5MFkwTTdSVUZEUlN4VFFVRkJPMFZCUTBFc1YwRkJRVHREVUhkalNEdEJUM1JqUnp0RlFVTkZMRmxCUVVFN1ExQjNZMHc3UVU4dllrczdPenM3UlVGRFJTeGpRVUZCTzBOUWIyTlFPMEZCUTBRc01rSkJRVEpDTzBGUk0yMUNNMEk3UlVGRFJTeFhRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMREpDUVVGQk8wTlNObTFDUkR0QlVURnRRa1E3UlVGRFJTd3lRa0ZCUVR0RFVqUnRRa1E3UVZGNmJVSkVPMFZCUTBVc2MwTkJRVUU3UlVGRFFTd3lRa0ZCUVR0RFVqSnRRa1E3UVZGNGJVSkVPMFZCUTBVc2MwTkJRVUU3UlVGRFFTd3lRa0ZCUVR0RFVqQnRRa1E3UVZGMmJVSkVPMFZCUTBVc2MwTkJRVUU3UTFKNWJVSkVPMEZSZEcxQ1JEdEZRVU5GTEhORFFVRkJPME5TZDIxQ1JDSXNJbVpwYkdVaU9pSnZkWFJzYVc1bExtTnpjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWpweWIyOTBJSHRjY2x4dUlDQXRMVzkxZEd4cGJtVXRla2x1WkdWNE9pQXlNREF3TzF4eVhHNGdJQzB0YjNWMGJHbHVaUzF6ZEdsamEza3RhR1ZwWjJoME9pQXhNREFsTzF4eVhHNGdJQzB0YjNWMGJHbHVaUzFqYUdGd2RHVnljeTEzYVdSMGFEb2dNVEF3SlR0Y2NseHVmVnh5WEc0aUxDSTZjbTl2ZENCN1hHNGdJQzB0YjNWMGJHbHVaUzE2U1c1a1pYZzZJREl3TURBN1hHNGdJQzB0YjNWMGJHbHVaUzF6ZEdsamEza3RhR1ZwWjJoME9pQXhNREFsTzF4dUlDQXRMVzkxZEd4cGJtVXRZMmhoY0hSbGNuTXRkMmxrZEdnNklERXdNQ1U3WEc1OVhHNHZLaUE5UFQwOVBUMDlQVDA5SUdOdmJHOXljeTUwYUdWdFpTQXRJT1dmdXVlaGdPbWluT2lKc3VXUG1PbUhqK21iaHVXUWlDQTlQVDA5UFQwOVBUMDlJQ292WEc0dktpcGNiaUFxSUdWc2JHbHdjMmx6TG14bGMzTWdMU0RtbG9mbW5Lem5uSUhubGFVZ2JXbDRhVzU0SU9XSHZlYVZzRnh1SUNvZ1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUlDb2dRM0psWVhSbFpDQkNlVG9nV1dGdmFHRnBlR2xoYjF4dUlDb2dWWEJrWVhSbE9pQXlNREl5TGpNdU1URmNiaUFxTDF4dUx5b2dQVDA5UFQwOUlPYVdoK2Fjck9lY2dlZVZwZVdIdmVhVnNDQTlQVDA5UFQwZ0tpOWNiaThxS2x4dUlDb2djMmhoWkc5M0xteGxjM01nTFNEcG1MVGx2Ykhtb0xmbHZJL29ycjdudmE0Z2JXbDRhVzU0SU9XSHZlYVZzRnh1SUNvZ1BUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFZ4dUlDb2dRM0psWVhSbFpDQkNlVG9nV1dGdmFHRnBlR2xoYjF4dUlDb2dWWEJrWVhSbE9pQXlNREl5TGpNdU1qQmNiaUFxTDF4dUx5b2dQVDA5UFQwOUlPbVl0T1c5c2VhZ3QrVzhqK2l1dnVlOXJ1V0h2ZWFWc0NBOVBUMDlQVDBnS2k5Y2JpOHFJRDA5UFQwOVBUMDlQVDBnYVdOdmJpNTBhR1Z0WlNBdElITjJaeURsbTc3bW9JZm5tb1Rtb0xmbHZJOGdQVDA5UFQwOVBUMDlQU0FxTDF4dUxtOTFkR3hwYm1VdGFXTnZiaUI3WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnZWkxcGJtUmxlRG9nTVR0Y2JpQWdaR2x6Y0d4aGVUb2dhVzVzYVc1bExXSnNiMk5yTzF4dUlDQjJaWEowYVdOaGJDMWhiR2xuYmpvZ2JXbGtaR3hsTzF4dUlDQjNhV1IwYURvZ01XVnRPMXh1SUNCb1pXbG5hSFE2SURGbGJUdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXbGpiMjVmWDNOMlp5QjdYRzRnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2JpQWdlaTFwYm1SbGVEb2dNanRjYmlBZ2RHOXdPaUExTUNVN1hHNGdJR3hsWm5RNklEVXdKVHRjYmlBZ2QybGtkR2c2SURGbGJUdGNiaUFnYUdWcFoyaDBPaUF4WlcwN1hHNGdJR1pwYkd3NklHTjFjbkpsYm5SamIyeHZjanRjYmlBZ2RISmhibk5tYjNKdE9pQjBjbUZ1YzJ4aGRHVW9MVFV3SlN3Z0xUVXdKU2s3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5JSHRjYmlBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHVJQ0I2TFdsdVpHVjRPaUF4TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0YUdWaFpHbHVaMTlmWVc1amFHOXlJSHRjYmlBZ1pHbHpjR3hoZVRvZ2JtOXVaVHRjYm4xY2JpNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2pwc2FXNXJMRnh1TG05MWRHeHBibVV0YUdWaFpHbHVaMTlmWVc1amFHOXlPblpwYzJsMFpXUXNYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSTZhRzkyWlhJZ2UxeHVJQ0JqYjJ4dmNqb2dJems1T1R0Y2JpQWdkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9pQnViMjVsTzF4dWZWeHVMbTkxZEd4cGJtVXRhR1ZoWkdsdVoxOWZZVzVqYUc5eU9taHZkbVZ5SUh0Y2JpQWdZMjlzYjNJNklDTXhaamhrWkRZN1hHNTlYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5PbWh2ZG1WeUlDNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2lCN1hHNGdJR1JwYzNCc1lYazZJR2x1YkdsdVpTMWliRzlqYXp0Y2JuMWNiaTV2ZFhSc2FXNWxMV2hsWVdScGJtZGZjM1JoY25RNmFHOTJaWElnZTF4dUlDQnZkbVZ5Wm14dmR6b2dkbWx6YVdKc1pUdGNibjFjYmk1dmRYUnNhVzVsTFdobFlXUnBibWRmYzNSaGNuUWdMbTkxZEd4cGJtVXRhR1ZoWkdsdVoxOWZZVzVqYUc5eUlIdGNiaUFnY0c5emFYUnBiMjQ2SUdGaWMyOXNkWFJsTzF4dUlDQjZMV2x1WkdWNE9pQXlPMXh1SUNCMGIzQTZJRFV3SlR0Y2JpQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZaS0MwMU1DVXBPMXh1SUNCc1pXWjBPaUF0TVdWdE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlJSHRjYmlBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHVJQ0I2TFdsdVpHVjRPaUF0TVR0Y2JpQWdkRzl3T2lBd08xeHVJQ0JzWldaME9pQXdPMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJSGRwWkhSb09pQXhNREFsTzF4dUlDQm9aV2xuYUhRNklERXdNQ1U3WEc0Z0lHSnZlQzF6YVhwcGJtYzZJR0p2Y21SbGNpMWliM2c3WEc0Z0lIWnBjMmxpYVd4cGRIazZJR2hwWkdSbGJqdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZmJXOWtZV3dnZTF4dUlDQmliM2d0YzJoaFpHOTNPaUF3SURBZ05uQjRJREZ3ZUNBalpHTmtabVUyTzF4dUlDQmthWE53YkdGNU9pQm1iR1Y0TzF4dUlDQm1iR1Y0TFdScGNtVmpkR2x2YmpvZ1kyOXNkVzF1TzF4dUlDQm1iR1Y0TFhkeVlYQTZJRzV2ZDNKaGNEdGNiaUFnY0c5emFYUnBiMjQ2SUdGaWMyOXNkWFJsTzF4dUlDQjZMV2x1WkdWNE9pQXlNVHRjYmlBZ2FHVnBaMmgwT2lBeE1EQWxPMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalptWm1PMXh1SUNCMGNtRnVjMmwwYVc5dUxXUjFjbUYwYVc5dU9pQXdMalJ6TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTlvWldGa1pYSXNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMjFoYVc0c1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyWnZiM1JsY2lCN1hHNGdJSGRwWkhSb09pQXhNREFsTzF4dUlDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgxOW9aV0ZrWlhJc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyWnZiM1JsY2lCN1hHNGdJR1pzWlhndGMyaHlhVzVyT2lBd08xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTkwYVhSc1pTeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZiV0ZwYml4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5ZlptOXZkR1Z5SUh0Y2JpQWdjR0ZrWkdsdVp6b2dNQ0F4Tm5CNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTlvWldGa1pYSXNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYM1JwZEd4bElIdGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCdFlYSm5hVzQ2SURBZ1lYVjBienRjYmlBZ2FHVnBaMmgwT2lBMU1uQjRPMXh1SUNCc2FXNWxMV2hsYVdkb2REb2dOVEp3ZUR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmZEdsMGJHVWdlMXh1SUNCbWIyNTBMWE5wZW1VNklERTJjSGc3WEc0Z0lHWnZiblF0ZDJWcFoyaDBPaUEwTURBN1hHNGdJRzFoY21kcGJqb2dNQ0F4Tm5CNE8xeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0JpYjNKa1pYSXRZbTkwZEc5dE9pQXhjSGdnYzI5c2FXUWdJMlJqWkdabE5qdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmWTJ4dmMyVWdlMXh1SUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJSG90YVc1a1pYZzZJREk3WEc0Z0lIUnZjRG9nTlRBbE8xeHVJQ0J5YVdkb2REb2dNVEp3ZUR0Y2JpQWdkMmxrZEdnNklESXdjSGc3WEc0Z0lHaGxhV2RvZERvZ01qQndlRHRjYmlBZ2JHbHVaUzFvWldsbmFIUTZJREl3Y0hnN1hHNGdJR052Ykc5eU9pQWpPVGs1TzF4dUlDQm1iMjUwTFhOcGVtVTZJREl3Y0hnN1hHNGdJSFJsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanRjYmlBZ1kzVnljMjl5T2lCd2IybHVkR1Z5TzF4dUlDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaVmtvTFRVd0pTazdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyTnNiM05sSUM1dmRYUnNhVzVsTFdsamIyNGdlMXh1SUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJSG90YVc1a1pYZzZJREk3WEc0Z0lIUnZjRG9nTUR0Y2JpQWdiR1ZtZERvZ01EdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmWTJ4dmMyVTZhRzkyWlhJZ2UxeHVJQ0JqYjJ4dmNqb2dJelkyTmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZiV0ZwYmlCN1hHNGdJR1pzWlhnNklERTdYRzRnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5bWIyOTBaWElnZTF4dUlDQnRZWEpuYVc0NklEQWdZWFYwYnp0Y2JpQWdkR1Y0ZEMxaGJHbG5iam9nY21sbmFIUTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyOTJaWEpzWVhrZ2UxeHVJQ0JqYjI1MFpXNTBPaUFuSnp0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0IwYjNBNklEQTdYRzRnSUd4bFpuUTZJREE3WEc0Z0lIZHBaSFJvT2lBeE1EQWxPMXh1SUNCb1pXbG5hSFE2SURFd01DVTdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdYRzRnSUc5d1lXTnBkSGs2SURBdU1UdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZmRHbHVlU3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmZEdsdWVTQjdYRzRnSUhkcFpIUm9PaUF5T0RCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl5ZEd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmYldsdWFTeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNkSEl1YjNWMGJHbHVaUzFrY21GM1pYSmZiV2x1YVNCN1hHNGdJSGRwWkhSb09pQTBPREJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3d1YjNWMGJHbHVaUzFrY21GM1pYSmZjMjFoYkd3c1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmJIUnlMbTkxZEd4cGJtVXRaSEpoZDJWeVgzTnRZV3hzSUh0Y2JpQWdkMmxrZEdnNklEVTBNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlaV2QxYkdGeUxGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlaV2QxYkdGeUlIdGNiaUFnZDJsa2RHZzZJRFk0TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkM1dmRYUnNhVzVsTFdSeVlYZGxjbDl0WldScGRXMHNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiSFJ5TG05MWRHeHBibVV0WkhKaGQyVnlYMjFsWkdsMWJTQjdYRzRnSUhkcFpIUm9PaUEzTWpCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl5ZEd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkdGeVoyVXNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiSFJ5TG05MWRHeHBibVV0WkhKaGQyVnlYMnhoY21kbElIdGNiaUFnZDJsa2RHZzZJRGsyTUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkNCN1hHNGdJR0p2Y21SbGNpMXNaV1owT2lBeGNIZ2djMjlzYVdRZ0kyUmpaR1psTmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3d1YjNWMGJHbHVaUzFrY21GM1pYSmZkR2x1ZVM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCeWFXZG9kRG9nTFRJNU1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDNXZkWFJzYVc1bExXUnlZWGRsY2w5dGFXNXBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSEpwWjJoME9pQXRORGt3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTG05MWRHeHBibVV0WkhKaGQyVnlYM050WVd4c0xtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lISnBaMmgwT2lBdE5UVXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSmxaM1ZzWVhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2NtbG5hSFE2SUMwMk9UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZmJXVmthWFZ0TG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUhKcFoyaDBPaUF0TnpNd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0xtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4aGNtZGxMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSEpwWjJoME9pQXRPVGN3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiSFJ5SUh0Y2JpQWdZbTl5WkdWeUxYSnBaMmgwT2lBeGNIZ2djMjlzYVdRZ0kyUmpaR1psTmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNkSEl1YjNWMGJHbHVaUzFrY21GM1pYSmZkR2x1ZVM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCc1pXWjBPaUF0TWprd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDIxcGJta3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdiR1ZtZERvZ0xUUTVNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXpiV0ZzYkM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCc1pXWjBPaUF0TlRVd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKbFozVnNZWEl1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnYkdWbWREb2dMVFk1TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMngwY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDl0WldScGRXMHViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdiR1ZtZERvZ0xUY3pNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyeDBjaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNZWEpuWlM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCc1pXWjBPaUF0T1Rjd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQ0I3WEc0Z0lHeGxablE2SURBN1hHNGdJSGRwWkhSb09pQXhNREFsTzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBhVzU1TEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJKMGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5MGFXNTVJSHRjYmlBZ2FHVnBaMmgwT2lBeU5EQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXViM1YwYkdsdVpTMWtjbUYzWlhKZmJXbHVhU3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRdWIzVjBiR2x1WlMxa2NtRjNaWEpmYldsdWFTQjdYRzRnSUdobGFXZG9kRG9nTXpJd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNOdFlXeHNMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMkowZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDl6YldGc2JDQjdYRzRnSUdobGFXZG9kRG9nTXpZd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKbFozVnNZWElzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWW5SMExtOTFkR3hwYm1VdFpISmhkMlZ5WDNKbFozVnNZWElnZTF4dUlDQm9aV2xuYUhRNklEUXdNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRaV1JwZFcwc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMWxaR2wxYlNCN1hHNGdJR2hsYVdkb2REb2dORFF3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpTG05MWRHeHBibVV0WkhKaGQyVnlYMnhoY21kbExGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNZWEpuWlNCN1hHNGdJR2hsYVdkb2REb2dORGd3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpSUh0Y2JpQWdZbTl5WkdWeUxXSnZkSFJ2YlRvZ01YQjRJSE52Ykdsa0lDTmtZMlJtWlRZN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpTG05MWRHeHBibVV0WkhKaGQyVnlYM1JwYm5rdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2RHOXdPaUF0TWpVd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDIxcGJta3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdkRzl3T2lBdE16TXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmRIUmlMbTkxZEd4cGJtVXRaSEpoZDJWeVgzTnRZV3hzTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUhSdmNEb2dMVE0zTUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM1IwWWk1dmRYUnNhVzVsTFdSeVlYZGxjbDl5WldkMWJHRnlMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSFJ2Y0RvZ0xUUXhNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRaV1JwZFcwdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2RHOXdPaUF0TkRVd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4aGNtZGxMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJSFJ2Y0RvZ0xUUTVNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgySjBkQ0I3WEc0Z0lIUnZjRG9nYVc1cGRHbGhiRHRjYmlBZ1ltOXlaR1Z5TFhSdmNEb2dNWEI0SUhOdmJHbGtJQ05rWTJSbVpUWTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWW5SMExtOTFkR3hwYm1VdFpISmhkMlZ5WDNScGJua3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdZbTkwZEc5dE9pQXRNalV3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwTG05MWRHeHBibVV0WkhKaGQyVnlYMjFwYm1rdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ1ltOTBkRzl0T2lBdE16TXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgzTnRZV3hzTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUdKdmRIUnZiVG9nTFRNM01IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJKMGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5eVpXZDFiR0Z5TG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUdKdmRIUnZiVG9nTFRReE1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJKMGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5dFpXUnBkVzB1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnWW05MGRHOXRPaUF0TkRVd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWW5SMExtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4aGNtZGxMbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJR0p2ZEhSdmJUb2dMVFE1TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMjl3Wlc1bFpDQjdYRzRnSUhacGMybGlhV3hwZEhrNklIWnBjMmxpYkdVN1hHNGdJSG90YVc1a1pYZzZJSFpoY2lndExXOTFkR3hwYm1VdGVrbHVaR1Y0S1R0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXZjR1Z1WldRdWIzVjBiR2x1WlMxa2NtRjNaWElnZTF4dUlDQndiM05wZEdsdmJqb2dabWw0WldRN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiM0JsYm1Wa0xtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDQjdYRzRnSUhKcFoyaDBPaUF3TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOXdaVzVsWkM1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJZ2UxeHVJQ0JzWldaME9pQXdPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0lnZTF4dUlDQjBiM0E2SURBN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiM0JsYm1Wa0xtOTFkR3hwYm1VdFpISmhkMlZ5WDJKMGRDQjdYRzRnSUdKdmRIUnZiVG9nTUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXZabVp6WlhRdWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0xGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOW1abk5sZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJZ2UxeHVJQ0JvWldsbmFIUTZJR05oYkdNb01UQXdKU0F0SURSbGJTazdYRzRnSUhSdmNEb2dOVEFsTzF4dUlDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaVmtvTFRVd0pTazdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjJabWMyVjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaXhjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Wm1aelpYUXViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBJSHRjYmlBZ2QybGtkR2c2SUdOaGJHTW9NVEF3SlNBdElEUmxiU2s3WEc0Z0lHeGxablE2SURVd0pUdGNiaUFnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWUtDMDFNQ1VwTzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOW1abk5sZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Y0dWdVpXUXViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNJSHRjYmlBZ2NtbG5hSFE2SURKbGJUdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Wm1aelpYUXViM1YwYkdsdVpTMWtjbUYzWlhKZmIzQmxibVZrTG05MWRHeHBibVV0WkhKaGQyVnlYMngwY2lCN1hHNGdJR3hsWm5RNklESmxiVHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5dlptWnpaWFF1YjNWMGJHbHVaUzFrY21GM1pYSmZiM0JsYm1Wa0xtOTFkR3hwYm1VdFpISmhkMlZ5WDNSMFlpQjdYRzRnSUhSdmNEb2dNbVZ0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOW1abk5sZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Y0dWdVpXUXViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBJSHRjYmlBZ1ltOTBkRzl0T2lBeVpXMDdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWVhWMGJ5NXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3NYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZWFYwYnk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJZ2UxeHVJQ0JvWldsbmFIUTZJR0YxZEc4N1hHNGdJRzFoZUMxb1pXbG5hSFE2SUdOaGJHTW9NVEF3SlNBdElEUmxiU2s3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlpuVnNiQ0I3WEc0Z0lIQmhaR1JwYm1jNklEQTdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5Y3lCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2VpMXBibVJsZURvZ01UdGNiaUFnYldGeVoybHVPaUF3TzF4dUlDQjNhV1IwYURvZ2RtRnlLQzB0YjNWMGJHbHVaUzFqYUdGd2RHVnljeTEzYVdSMGFDazdYRzRnSUhSeVlXNXphWFJwYjI0dFpIVnlZWFJwYjI0NklEQXVNM003WEc0Z0lHOTJaWEptYkc5M09pQmhkWFJ2TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYM1JwZEd4bElIdGNiaUFnYldGeVoybHVPaUF3SURFMmNIZzdYRzRnSUdobGFXZG9kRG9nTkRCd2VEdGNiaUFnYkdsdVpTMW9aV2xuYUhRNklEUXdjSGc3WEc0Z0lIQmhaR1JwYm1jNklEQWdNVFp3ZUR0Y2JpQWdZbTl5WkdWeUxXSnZkSFJ2YlRvZ01YQjRJSE52Ykdsa0lDTmtZMlJtWlRZN1hHNGdJR1p2Ym5RdGMybDZaVG9nTVRad2VEdGNiaUFnWm05dWRDMTNaV2xuYUhRNklEUXdNRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTl0WVdsdUlIdGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmJHbHpkQ3hjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5emRXSnFaV04wTEZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgybDBaVzBnZTF4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUhvdGFXNWtaWGc2SURJN1hHNGdJRzFoY21kcGJqb2dNRHRjYmlBZ2NHRmtaR2x1WnpvZ01EdGNiaUFnYkdsemRDMXpkSGxzWlMxMGVYQmxPaUJ1YjI1bE8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyeHBjM1FnZTF4dUlDQndZV1JrYVc1bk9pQXdMalZsYlNBd08xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDNOMVltcGxZM1FnZTF4dUlDQndZV1JrYVc1bkxXeGxablE2SURGbGJUdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5cGRHVnRJSHRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0JzYVc1bExXaGxhV2RvZERvZ016QndlRHRjYmlBZ1ptOXVkQzF6YVhwbE9pQXhNM0I0TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDNCc1lXTmxhRzlzWkdWeUlIdGNiaUFnY0c5emFYUnBiMjQ2SUdGaWMyOXNkWFJsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCMGIzQTZJREE3WEc0Z0lHeGxablE2SURBN1hHNGdJSGRwWkhSb09pQXhNREFsTzF4dUlDQm9aV2xuYUhRNklETXdjSGc3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1OMlk0WmprN1hHNGdJR0p2Y21SbGNpMXNaV1owT2lBeWNIZ2djMjlzYVdRZ0l6QTFPRGswTWp0Y2JpQWdkSEpoYm5OcGRHbHZiaTFrZFhKaGRHbHZiam9nTUM0eWN6dGNiaUFnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWhibU5vYjNJZ2UxeHVJQ0IzYUdsMFpTMXpjR0ZqWlRvZ2JtOTNjbUZ3TzF4dUlDQjBaWGgwTFc5MlpYSm1iRzkzT2lCbGJHeHBjSE5wY3p0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNiaUFnWkdsemNHeGhlVG9nWW14dlkyczdYRzRnSUhCaFpHUnBibWM2SURBZ01TNDFaVzA3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZZVzVqYUc5eU9teHBibXNzWEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZllXNWphRzl5T25acGMybDBaV1FzWEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZllXNWphRzl5T21odmRtVnlJSHRjYmlBZ2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPMXh1SUNCamIyeHZjam9nSXpVMU5UdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5aGJtTm9iM0k2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXpBMU9EazBNanRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWpiMlJsSUh0Y2JpQWdjR0ZrWkdsdVp5MXlhV2RvZERvZ01DNDFaVzA3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWhZM1JwZG1VdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZllXNWphRzl5T214cGJtc3NYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTloWTNScGRtVXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZZVzVqYUc5eU9uWnBjMmwwWldRc1hHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWhZM1JwZG1VdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZllXNWphRzl5T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNd05UZzVOREk3WEc0Z0lHWnZiblF0ZDJWcFoyaDBPaUEwTURBN1hHNTlYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTl6ZEdsamEza3NYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTltYVhobFpDQjdYRzRnSUdScGMzQnNZWGs2SUdac1pYZzdYRzRnSUdac1pYZ3RkM0poY0RvZ2JtOTNjbUZ3TzF4dUlDQm1iR1Y0TFdScGNtVmpkR2x2YmpvZ1kyOXNkVzF1TzF4dUlDQjZMV2x1WkdWNE9pQjJZWElvTFMxdmRYUnNhVzVsTFhwSmJtUmxlQ2s3WEc0Z0lIUnZjRG9nTUR0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDNOMGFXTnJlU0F1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmZEdsMGJHVXNYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTltYVhobFpDQXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZkR2wwYkdVc1hHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOXpkR2xqYTNrZ0xtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyMWhhVzRzWEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5bWFYaGxaQ0F1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmYldGcGJpQjdYRzRnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5emRHbGphM2tnTG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDNScGRHeGxMRnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWm1sNFpXUWdMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYM1JwZEd4bElIdGNiaUFnWm14bGVDMXphSEpwYm1zNklEQTdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5emRHbGphM2tnTG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDIxaGFXNHNYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTltYVhobFpDQXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZiV0ZwYmlCN1hHNGdJR1pzWlhnNklERTdYRzRnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZmMzUnBZMnQ1SUh0Y2JpQWdjRzl6YVhScGIyNDZJSE4wYVdOcmVUdGNiaUFnYldGNExXaGxhV2RvZERvZ2RtRnlLQzB0YjNWMGJHbHVaUzF6ZEdsamEza3RhR1ZwWjJoMEtUdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJacGVHVmtJSHRjYmlBZ2NHOXphWFJwYjI0NklHWnBlR1ZrTzF4dUlDQnRZWGd0YUdWcFoyaDBPaUF4TURBbE8xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mYUdsa1pHVnVJSHRjYmlBZ1pHbHpjR3hoZVRvZ2JtOXVaVHRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgyWnZiR1JsWkNCN1hHNGdJSGRwWkhSb09pQXdPMXh1ZlZ4dUx5b2dQVDA5UFQwOVBUMDlQU0JpZFhSMGIyNXpMblJvWlcxbElDMGc1b3lKNlpLdTVhKzg2SWlxNXFDMzVieVBJRDA5UFQwOVBUMDlQVDBnS2k5Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhJZ2UxeHVJQ0J3YjNOcGRHbHZiam9nWm1sNFpXUTdYRzRnSUhvdGFXNWtaWGc2SURrNU9UazVPMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJSFJ5WVc1emFYUnBiMjR0WkhWeVlYUnBiMjQ2SURBdU0zTTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0Z2UxeHVJQ0JpYjNndGMyaGhaRzkzT2lBd0lEQWdObkI0SURGd2VDQWpaR05rWm1VMk8xeHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lIb3RhVzVrWlhnNklERTdYRzRnSUcxaGNtZHBiam9nTVRCd2VEdGNiaUFnZDJsa2RHZzZJRE0yY0hnN1hHNGdJR2hsYVdkb2REb2dNelp3ZUR0Y2JpQWdZbTl5WkdWeU9pQXhjSGdnYzI5c2FXUWdJMlJqWkdabE5qdGNiaUFnWW05eVpHVnlMWEpoWkdsMWN6b2dNM0I0TzF4dUlDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpabVptTzF4dUlDQmpkWEp6YjNJNklIQnZhVzUwWlhJN1hHNGdJSFJsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanRjYmlBZ1kyOXNiM0k2SUNNMU5UVTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0NmFHOTJaWElnZTF4dUlDQmpiMnh2Y2pvZ0l6QTFPRGswTWp0Y2JpQWdZbTl5WkdWeUxXTnZiRzl5T2lBak1EVTRPVFF5TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUxtaHBaR1VnZTF4dUlDQmthWE53YkdGNU9pQnViMjVsTzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9teHBibXNzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2ZG1semFYUmxaQ3hjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqT1RrNU8xeHVJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTloYm1Ob2IzSTZhRzkyWlhJZ2UxeHVJQ0JqYjJ4dmNqb2dJekExT0RrME1qdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJsamIyNGdlMXh1SUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJSG90YVc1a1pYZzZJREk3WEc0Z0lIUnZjRG9nTlRBbE8xeHVJQ0JzWldaME9pQTFNQ1U3WEc0Z0lIZHBaSFJvT2lBeU1IQjRPMXh1SUNCb1pXbG5hSFE2SURJd2NIZzdYRzRnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbEtDMDFNQ1VzSUMwMU1DVXBPMXh1SUNCbWFXeHNPaUJqZFhKeVpXNTBZMjlzYjNJN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJGamRHbDJaUzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpQjdYRzRnSUdOdmJHOXlPaUFqWm1abU8xeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUFqTURVNE9UUXlPMXh1SUNCaWIzSmtaWEl0WTI5c2IzSTZJQ013TlRnNU5ESTdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJGamRHbDJaUzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJqcG9iM1psY2lCN1hHNGdJR052Ykc5eU9pQWpabVptTzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWhZM1JwZG1VZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T214cGJtc3NYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMkZqZEdsMlpTQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmRtbHphWFJsWkN4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZllXTjBhWFpsSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqWm1abU8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDl5YjNWdVpHVmtMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUlIdGNiaUFnWW05eVpHVnlMWEpoWkdsMWN6b2dNVGh3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmJHbHVheXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1FnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWVc1amFHOXlPbXhwYm1zc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T25acGMybDBaV1FzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanAyYVhOcGRHVmtMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcG9iM1psY2l4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlpHbHpZV0pzWldRZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T21odmRtVnlMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUlIdGNiaUFnWTNWeWMyOXlPaUJ1YjNRdFlXeHNiM2RsWkR0Y2JpQWdZMjlzYjNJNklDTTVPVGs3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T214cGJtczZhRzkyWlhJc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwc2FXNXJPbWh2ZG1WeUxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWthWE5oWW14bFpDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrT21odmRtVnlMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQ0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTloYm1Ob2IzSTZkbWx6YVhSbFpEcG9iM1psY2l4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlpHbHpZV0pzWldRdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2YUc5MlpYSTZhRzkyWlhJc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwb2IzWmxjanBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0NmFHOTJaWElzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZianBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqT1RrNU8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUlIdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJZMVpqVm1OVHRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmRIUmlMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlpZEhRZ2UxeHVJQ0JzWldaME9pQTFNQ1U3WEc0Z0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxXQ2d0TlRBbEtUdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmZEhSaUlDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2Yml4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlluUjBJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpQjdYRzRnSUdScGMzQnNZWGs2SUdsdWJHbHVaUzFpYkc5amF6dGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmZEhSaUlIdGNiaUFnZEc5d09pQXhNbkI0TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOTBkR0l1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMmhwWkdSbGJpQjdYRzRnSUhSdmNEb2dMVFUyY0hnN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMkowZENCN1hHNGdJR0p2ZEhSdmJUb2dNVEp3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZZblIwTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlvYVdSa1pXNGdlMXh1SUNCaWIzUjBiMjA2SUMwMU5uQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5eWRHd3NYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMngwY2lCN1hHNGdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV1NndE5UQWxLVHRjYmlBZ2QybGtkR2c2SURVMmNIZzdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDNKMGJDQjdYRzRnSUhSdmNEb2dOVEFsTzF4dUlDQnlhV2RvZERvZ01USndlRHRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmNuUnNMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOW9hV1JrWlc0Z2UxeHVJQ0J5YVdkb2REb2dMVGcyY0hnN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMngwY2lCN1hHNGdJSFJ2Y0RvZ05UQWxPMXh1SUNCc1pXWjBPaUF4TW5CNE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlzZEhJdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEc0Z0lHeGxablE2SUMwNE5uQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5MGRHSWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDNKMGJDQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWW5SMElDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2Ymk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYUdsa1pHVnVMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlzZEhJZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZlluVjBkRzl1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlvYVdSa1pXNGdlMXh1SUNCa2FYTndiR0Y1T2lCdWIyNWxPMXh1ZlZ4dUx5b2dQVDA5UFQwZ1UyTnliMnhzWW1GeUlEMDlQVDA5SUNvdlhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlJSHRjYmlBZ2QybGtkR2c2SURkd2VEdGNiaUFnYUdWcFoyaDBPaUEzY0hnN1hHNGdJQzEzWldKcmFYUXRZbTl5WkdWeUxYSmhaR2wxY3pvZ05YQjRPMXh1ZlZ4dU9qb3RkMlZpYTJsMExYTmpjbTlzYkdKaGNpMTBjbUZqYXkxd2FXVmpaU0I3WEc0Z0lDMTNaV0pyYVhRdFltOXlaR1Z5TFhKaFpHbDFjem9nTlhCNE8xeHVmVnh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2kxMGFIVnRZanAyWlhKMGFXTmhiQ0I3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklISm5ZbUVvTUN3Z01Dd2dNQ3dnTUM0eU5TazdYRzRnSUMxM1pXSnJhWFF0WW05eVpHVnlMWEpoWkdsMWN6b2dOWEI0TzF4dWZWeHVPam90ZDJWaWEybDBMWE5qY205c2JHSmhjaTEwYUhWdFlqcG9iM0pwZW05dWRHRnNJSHRjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ2NtZGlZU2d3TENBd0xDQXdMQ0F3TGpJMUtUdGNiaUFnTFhkbFltdHBkQzFpYjNKa1pYSXRjbUZrYVhWek9pQTFjSGc3WEc1OVhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlPbWh2ZG1WeUlIdGNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nY21kaVlTZ3dMQ0F3TENBd0xDQXdMakUxS1R0Y2JuMWNiam82TFhkbFltdHBkQzF6WTNKdmJHeGlZWEl0ZEdoMWJXSTZhRzkyWlhJZ2UxeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUJ5WjJKaEtEQXNJREFzSURBc0lEQXVNelVwTzF4dWZWeHVJaXdpTHlvZ1BUMDlQVDA5UFQwOVBTQnBZMjl1TG5Sb1pXMWxJQzBnYzNabklPV2J2dWFnaCtlYWhPYWd0K1c4anlBOVBUMDlQVDA5UFQwOUlDb3ZYSEpjYmk1dmRYUnNhVzVsTFdsamIyNGdlMXh5WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNjbHh1SUNCNkxXbHVaR1Y0T2lBeE8xeHlYRzRnSUdScGMzQnNZWGs2SUdsdWJHbHVaUzFpYkc5amF6dGNjbHh1SUNCMlpYSjBhV05oYkMxaGJHbG5iam9nYldsa1pHeGxPMXh5WEc0Z0lIZHBaSFJvT2lBeFpXMDdYSEpjYmlBZ2FHVnBaMmgwT2lBeFpXMDdYSEpjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2NseHVYSEpjYmlBZ0psOWZjM1puSUh0Y2NseHVJQ0FnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2NseHVJQ0FnSUhvdGFXNWtaWGc2SURJN1hISmNiaUFnSUNCMGIzQTZJRFV3SlR0Y2NseHVJQ0FnSUd4bFpuUTZJRFV3SlR0Y2NseHVJQ0FnSUhkcFpIUm9PaUF4WlcwN1hISmNiaUFnSUNCb1pXbG5hSFE2SURGbGJUdGNjbHh1SUNBZ0lHWnBiR3c2SUdOMWNuSmxiblJqYjJ4dmNqdGNjbHh1SUNBZ0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxLQzAxTUNVc0lDMDFNQ1VwTzF4eVhHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjY2x4dUlDQjlYSEpjYm4xY2NseHVJaXdpUUdsdGNHOXlkQ0FuTGk5amIyeHZjbk1uTzF4eVhHNWNjbHh1TG05MWRHeHBibVV0YUdWaFpHbHVaeUI3WEhKY2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh5WEc0Z0lIb3RhVzVrWlhnNklERTdYSEpjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2NseHVYSEpjYmlBZ0psOWZZVzVqYUc5eUlIdGNjbHh1SUNBZ0lHUnBjM0JzWVhrNklHNXZibVU3WEhKY2JseHlYRzRnSUNBZ0pqcHNhVzVyTEZ4eVhHNGdJQ0FnSmpwMmFYTnBkR1ZrTEZ4eVhHNGdJQ0FnSmpwb2IzWmxjaUI3WEhKY2JpQWdJQ0FnSUdOdmJHOXlPaUJBWm05MWNuUm9YM1JsZUhSZlkyOXNiM0k3WEhKY2JpQWdJQ0FnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUdGNjbHh1SUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FtT21odmRtVnlJSHRjY2x4dUlDQWdJQ0FnWTI5c2IzSTZJRUJ3Y21sdFlYSjVYMk52Ykc5eU8xeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0pqcG9iM1psY2lCN1hISmNiaUFnSUNBdWIzVjBiR2x1WlMxb1pXRmthVzVuWDE5aGJtTm9iM0lnZTF4eVhHNGdJQ0FnSUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YM04wWVhKMElIdGNjbHh1SUNBZ0lDWTZhRzkyWlhJZ2UxeHlYRzRnSUNBZ0lDQnZkbVZ5Wm14dmR6b2dkbWx6YVdKc1pUdGNjbHh1SUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0F1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSWdlMXh5WEc0Z0lDQWdJQ0J3YjNOcGRHbHZiam9nWVdKemIyeDFkR1U3WEhKY2JpQWdJQ0FnSUhvdGFXNWtaWGc2SURJN1hISmNiaUFnSUNBZ0lIUnZjRG9nTlRBbE8xeHlYRzRnSUNBZ0lDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaVmtvTFRVd0pTazdYSEpjYmlBZ0lDQWdJR3hsWm5RNklDMHhaVzA3WEhKY2JpQWdJQ0I5WEhKY2JpQWdmVnh5WEc1OVhISmNiaUlzSWtCcGJYQnZjblFnSnk0dmRtRnlhV0ZpYkdWekp6dGNjbHh1UUdsdGNHOXlkQ0FuTGk5amIyeHZjbk1uTzF4eVhHNUFhVzF3YjNKMElDY3VMM05vWVdSdmR5YzdYSEpjYmx4eVhHNHViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHlYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2NseHVJQ0I2TFdsdVpHVjRPaUF0TVR0Y2NseHVJQ0IwYjNBNklEQTdYSEpjYmlBZ2JHVm1kRG9nTUR0Y2NseHVJQ0J0WVhKbmFXNDZJREE3WEhKY2JpQWdkMmxrZEdnNklERXdNQ1U3WEhKY2JpQWdhR1ZwWjJoME9pQXhNREFsTzF4eVhHNGdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hISmNiaUFnZG1semFXSnBiR2wwZVRvZ2FHbGtaR1Z1TzF4eVhHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmx4eVhHNGdJQ1pmWDIxdlpHRnNJSHRjY2x4dUlDQWdJQzV6YUdGa2IzZGZiR2xuYUhSZmNtVm5kV3hoY2lncE8xeHlYRzRnSUNBZ1pHbHpjR3hoZVRvZ1pteGxlRHRjY2x4dUlDQWdJR1pzWlhndFpHbHlaV04wYVc5dU9pQmpiMngxYlc0N1hISmNiaUFnSUNCbWJHVjRMWGR5WVhBNklHNXZkM0poY0R0Y2NseHVJQ0FnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2NseHVJQ0FnSUhvdGFXNWtaWGc2SURJeE8xeHlYRzRnSUNBZ2FHVnBaMmgwT2lBeE1EQWxPMXh5WEc0Z0lDQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dRSGRvYVhSbE8xeHlYRzRnSUNBZ2RISmhibk5wZEdsdmJpMWtkWEpoZEdsdmJqb2dNQzQwY3p0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5b1pXRmtaWElzWEhKY2JpQWdKbDlmYldGcGJpeGNjbHh1SUNBbVgxOW1iMjkwWlhJZ2UxeHlYRzRnSUNBZ2QybGtkR2c2SURFd01DVTdYSEpjYmlBZ0lDQmliM2d0YzJsNmFXNW5PaUJpYjNKa1pYSXRZbTk0TzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZmFHVmhaR1Z5TEZ4eVhHNGdJQ1pmWDJadmIzUmxjaUI3WEhKY2JpQWdJQ0JtYkdWNExYTm9jbWx1YXpvZ01EdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYM1JwZEd4bExGeHlYRzRnSUNaZlgyMWhhVzRzWEhKY2JpQWdKbDlmWm05dmRHVnlJSHRjY2x4dUlDQWdJSEJoWkdScGJtYzZJREFnTVRad2VEdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMmhsWVdSbGNpeGNjbHh1SUNBbVgxOTBhWFJzWlNCN1hISmNiaUFnSUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hISmNiaUFnSUNCNkxXbHVaR1Y0T2lBeE8xeHlYRzRnSUNBZ2JXRnlaMmx1T2lBd0lHRjFkRzg3WEhKY2JpQWdJQ0JvWldsbmFIUTZJRFV5Y0hnN1hISmNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dOVEp3ZUR0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5MGFYUnNaU0I3WEhKY2JpQWdJQ0JtYjI1MExYTnBlbVU2SURFMmNIZzdYSEpjYmlBZ0lDQm1iMjUwTFhkbGFXZG9kRG9nTkRBd08xeHlYRzRnSUNBZ2JXRnlaMmx1T2lBd0lERTJjSGc3WEhKY2JpQWdJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHlYRzRnSUNBZ1ltOXlaR1Z5TFdKdmRIUnZiVG9nTVhCNElITnZiR2xrSUVCd2NtbHRZWEo1WDJKdmNtUmxjbDlqYjJ4dmNqdGNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMk5zYjNObElIdGNjbHh1SUNBZ0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNjbHh1SUNBZ0lIb3RhVzVrWlhnNklESTdYSEpjYmlBZ0lDQjBiM0E2SURVd0pUdGNjbHh1SUNBZ0lISnBaMmgwT2lBeE1uQjRPMXh5WEc0Z0lDQWdkMmxrZEdnNklESXdjSGc3WEhKY2JpQWdJQ0JvWldsbmFIUTZJREl3Y0hnN1hISmNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dNakJ3ZUR0Y2NseHVJQ0FnSUdOdmJHOXlPaUJBWm05MWNuUm9YM1JsZUhSZlkyOXNiM0k3WEhKY2JpQWdJQ0JtYjI1MExYTnBlbVU2SURJd2NIZzdYSEpjYmlBZ0lDQjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdYSEpjYmlBZ0lDQmpkWEp6YjNJNklIQnZhVzUwWlhJN1hISmNiaUFnSUNCMGNtRnVjMlp2Y20wNklIUnlZVzV6YkdGMFpWa29MVFV3SlNrN1hISmNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4eVhHNWNjbHh1SUNBZ0lDNXZkWFJzYVc1bExXbGpiMjRnZTF4eVhHNGdJQ0FnSUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hISmNiaUFnSUNBZ0lIb3RhVzVrWlhnNklESTdYSEpjYmlBZ0lDQWdJSFJ2Y0RvZ01EdGNjbHh1SUNBZ0lDQWdiR1ZtZERvZ01EdGNjbHh1SUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FtT21odmRtVnlJSHRjY2x4dUlDQWdJQ0FnWTI5c2IzSTZJRUIwYUdseVpGOTBaWGgwWDJOdmJHOXlPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmYldGcGJpQjdYSEpjYmlBZ0lDQm1iR1Y0T2lBeE8xeHlYRzRnSUNBZ2IzWmxjbVpzYjNjNklHRjFkRzg3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5bWIyOTBaWElnZTF4eVhHNGdJQ0FnYldGeVoybHVPaUF3SUdGMWRHODdYSEpjYmlBZ0lDQjBaWGgwTFdGc2FXZHVPaUJ5YVdkb2REdGNjbHh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgxOXZkbVZ5YkdGNUlIdGNjbHh1SUNBZ0lHTnZiblJsYm5RNklDY25PMXh5WEc0Z0lDQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh5WEc0Z0lDQWdlaTFwYm1SbGVEb2dNVHRjY2x4dUlDQWdJSFJ2Y0RvZ01EdGNjbHh1SUNBZ0lHeGxablE2SURBN1hISmNiaUFnSUNCM2FXUjBhRG9nTVRBd0pUdGNjbHh1SUNBZ0lHaGxhV2RvZERvZ01UQXdKVHRjY2x4dUlDQWdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJRUIzYUdsMFpUdGNjbHh1SUNBZ0lHOXdZV05wZEhrNklEQXVNVHRjY2x4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YM0owYkN4Y2NseHVJQ0FtWDJ4MGNpQjdYSEpjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNjbHh1SUNBZ0lDQWdKbDkwYVc1NUlIdGNjbHh1SUNBZ0lDQWdJQ0IzYVdSMGFEb2dNamd3Y0hnN1hISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmJXbHVhU0I3WEhKY2JpQWdJQ0FnSUNBZ2QybGtkR2c2SURRNE1IQjRPMXh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YM050WVd4c0lIdGNjbHh1SUNBZ0lDQWdJQ0IzYVdSMGFEb2dOVFF3Y0hnN1hISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmNtVm5kV3hoY2lCN1hISmNiaUFnSUNBZ0lDQWdkMmxrZEdnNklEWTRNSEI0TzF4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDIxbFpHbDFiU0I3WEhKY2JpQWdJQ0FnSUNBZ2QybGtkR2c2SURjeU1IQjRPMXh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMnhoY21kbElIdGNjbHh1SUNBZ0lDQWdJQ0IzYVdSMGFEb2dPVFl3Y0hnN1hISmNiaUFnSUNBZ0lIMWNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZjblJzSUh0Y2NseHVJQ0FnSUdKdmNtUmxjaTFzWldaME9pQXhjSGdnYzI5c2FXUWdRSEJ5YVcxaGNubGZZbTl5WkdWeVgyTnZiRzl5TzF4eVhHNWNjbHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHlYRzRnSUNBZ0lDQW1YM1JwYm5rZ2UxeHlYRzRnSUNBZ0lDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUhKcFoyaDBPaUF0TWprd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDIxcGJta2dlMXh5WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lISnBaMmgwT2lBdE5Ea3djSGc3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgzTnRZV3hzSUh0Y2NseHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hISmNiaUFnSUNBZ0lDQWdJQ0J5YVdkb2REb2dMVFUxTUhCNE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDl5WldkMWJHRnlJSHRjY2x4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQnlhV2RvZERvZ0xUWTVNSEI0TzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXRaV1JwZFcwZ2UxeHlYRzRnSUNBZ0lDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUhKcFoyaDBPaUF0TnpNd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDJ4aGNtZGxJSHRjY2x4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQnlhV2RvZERvZ0xUazNNSEI0TzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlzZEhJZ2UxeHlYRzRnSUNBZ1ltOXlaR1Z5TFhKcFoyaDBPaUF4Y0hnZ2MyOXNhV1FnUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eU8xeHlYRzVjY2x4dUlDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSWdlMXh5WEc0Z0lDQWdJQ0FtWDNScGJua2dlMXh5WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lHeGxablE2SUMweU9UQndlRHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmJXbHVhU0I3WEhKY2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4eVhHNGdJQ0FnSUNBZ0lDQWdiR1ZtZERvZ0xUUTVNSEI0TzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXpiV0ZzYkNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnYkdWbWREb2dMVFUxTUhCNE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDl5WldkMWJHRnlJSHRjY2x4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQnNaV1owT2lBdE5qa3djSGc3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgyMWxaR2wxYlNCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnYkdWbWREb2dMVGN6TUhCNE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDlzWVhKblpTQjdYSEpjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ2JHVm1kRG9nTFRrM01IQjRPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOTBkR0lzWEhKY2JpQWdKbDlpZEhRZ2UxeHlYRzRnSUNBZ2JHVm1kRG9nTUR0Y2NseHVJQ0FnSUhkcFpIUm9PaUF4TURBbE8xeHlYRzVjY2x4dUlDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSWdlMXh5WEc0Z0lDQWdJQ0FtWDNScGJua2dlMXh5WEc0Z0lDQWdJQ0FnSUdobGFXZG9kRG9nTWpRd2NIZzdYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZiV2x1YVNCN1hISmNiaUFnSUNBZ0lDQWdhR1ZwWjJoME9pQXpNakJ3ZUR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5emJXRnNiQ0I3WEhKY2JpQWdJQ0FnSUNBZ2FHVnBaMmgwT2lBek5qQndlRHRjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDl5WldkMWJHRnlJSHRjY2x4dUlDQWdJQ0FnSUNCb1pXbG5hSFE2SURRd01IQjRPMXh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMjFsWkdsMWJTQjdYSEpjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBPaUEwTkRCd2VEdGNjbHh1SUNBZ0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNBZ0psOXNZWEpuWlNCN1hISmNiaUFnSUNBZ0lDQWdhR1ZwWjJoME9pQTBPREJ3ZUR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOTBkR0lnZTF4eVhHNGdJQ0FnWW05eVpHVnlMV0p2ZEhSdmJUb2dNWEI0SUhOdmJHbGtJRUJ3Y21sdFlYSjVYMkp2Y21SbGNsOWpiMnh2Y2p0Y2NseHVYSEpjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNjbHh1SUNBZ0lDQWdKbDkwYVc1NUlIdGNjbHh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYSEpjYmlBZ0lDQWdJQ0FnSUNCMGIzQTZJQzB5TlRCd2VEdGNjbHh1SUNBZ0lDQWdJQ0I5WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYldsdWFTQjdYSEpjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ2RHOXdPaUF0TXpNd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDNOdFlXeHNJSHRjY2x4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQjBiM0E2SUMwek56QndlRHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmNtVm5kV3hoY2lCN1hISmNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHlYRzRnSUNBZ0lDQWdJQ0FnZEc5d09pQXROREV3Y0hnN1hISmNiaUFnSUNBZ0lDQWdmVnh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMjFsWkdsMWJTQjdYSEpjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ2RHOXdPaUF0TkRVd2NIZzdYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDJ4aGNtZGxJSHRjY2x4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEhKY2JpQWdJQ0FnSUNBZ0lDQjBiM0E2SUMwME9UQndlRHRjY2x4dUlDQWdJQ0FnSUNCOVhISmNiaUFnSUNBZ0lIMWNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZZblIwSUh0Y2NseHVJQ0FnSUhSdmNEb2dhVzVwZEdsaGJEdGNjbHh1SUNBZ0lHSnZjbVJsY2kxMGIzQTZJREZ3ZUNCemIyeHBaQ0JBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJN1hISmNibHh5WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNpQjdYSEpjYmlBZ0lDQWdJQ1pmZEdsdWVTQjdYSEpjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ1ltOTBkRzl0T2lBdE1qVXdjSGc3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgyMXBibWtnZTF4eVhHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJR0p2ZEhSdmJUb2dMVE16TUhCNE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDl6YldGc2JDQjdYSEpjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ1ltOTBkRzl0T2lBdE16Y3djSGc3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgzSmxaM1ZzWVhJZ2UxeHlYRzRnSUNBZ0lDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNjbHh1SUNBZ0lDQWdJQ0FnSUdKdmRIUnZiVG9nTFRReE1IQjRPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5dFpXUnBkVzBnZTF4eVhHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2NseHVJQ0FnSUNBZ0lDQWdJR0p2ZEhSdmJUb2dMVFExTUhCNE8xeHlYRzRnSUNBZ0lDQWdJSDFjY2x4dUlDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdKbDlzWVhKblpTQjdYSEpjYmlBZ0lDQWdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh5WEc0Z0lDQWdJQ0FnSUNBZ1ltOTBkRzl0T2lBdE5Ea3djSGc3WEhKY2JpQWdJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ0lDQjlYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMjl3Wlc1bFpDQjdYSEpjYmlBZ0lDQjJhWE5wWW1sc2FYUjVPaUIyYVhOcFlteGxPMXh5WEc0Z0lDQWdlaTFwYm1SbGVEb2dkbUZ5S0MwdGIzVjBiR2x1WlMxNlNXNWtaWGdwTzF4eVhHNWNjbHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHlYRzRnSUNBZ0lDQndiM05wZEdsdmJqb2dabWw0WldRN1hISmNibHh5WEc0Z0lDQWdJQ0FtWDNKMGJDQjdYSEpjYmlBZ0lDQWdJQ0FnY21sbmFIUTZJREE3WEhKY2JpQWdJQ0FnSUgxY2NseHVYSEpjYmlBZ0lDQWdJQ1pmYkhSeUlIdGNjbHh1SUNBZ0lDQWdJQ0JzWldaME9pQXdPMXh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YM1IwWWlCN1hISmNiaUFnSUNBZ0lDQWdkRzl3T2lBd08xeHlYRzRnSUNBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSUNBbVgySjBkQ0I3WEhKY2JpQWdJQ0FnSUNBZ1ltOTBkRzl0T2lBd08xeHlYRzRnSUNBZ0lDQjlYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMjltWm5ObGRDQjdYSEpjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNjbHh1SUNBZ0lDQWdKbDl5ZEd3c1hISmNiaUFnSUNBZ0lDWmZiSFJ5SUh0Y2NseHVJQ0FnSUNBZ0lDQm9aV2xuYUhRNklHTmhiR01vTVRBd0pTQXRJRFJsYlNrN1hISmNiaUFnSUNBZ0lDQWdkRzl3T2lBMU1DVTdYSEpjYmlBZ0lDQWdJQ0FnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWktDMDFNQ1VwTzF4eVhHNGdJQ0FnSUNCOVhISmNibHh5WEc0Z0lDQWdJQ0FtWDNSMFlpeGNjbHh1SUNBZ0lDQWdKbDlpZEhRZ2UxeHlYRzRnSUNBZ0lDQWdJSGRwWkhSb09pQmpZV3hqS0RFd01DVWdMU0EwWlcwcE8xeHlYRzRnSUNBZ0lDQWdJR3hsWm5RNklEVXdKVHRjY2x4dUlDQWdJQ0FnSUNCMGNtRnVjMlp2Y20wNklIUnlZVzV6YkdGMFpWZ29MVFV3SlNrN1hISmNiaUFnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNaZmIzQmxibVZrSUh0Y2NseHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNjbHh1SUNBZ0lDQWdJQ0FnSUNaZmNuUnNJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdjbWxuYUhRNklESmxiVHRjY2x4dUlDQWdJQ0FnSUNBZ0lIMWNjbHh1WEhKY2JpQWdJQ0FnSUNBZ0lDQW1YMngwY2lCN1hISmNiaUFnSUNBZ0lDQWdJQ0FnSUd4bFpuUTZJREpsYlR0Y2NseHVJQ0FnSUNBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDQWdJQ0FtWDNSMFlpQjdYSEpjYmlBZ0lDQWdJQ0FnSUNBZ0lIUnZjRG9nTW1WdE8xeHlYRzRnSUNBZ0lDQWdJQ0FnZlZ4eVhHNWNjbHh1SUNBZ0lDQWdJQ0FnSUNaZlluUjBJSHRjY2x4dUlDQWdJQ0FnSUNBZ0lDQWdZbTkwZEc5dE9pQXlaVzA3WEhKY2JpQWdJQ0FnSUNBZ0lDQjlYSEpjYmlBZ0lDQWdJQ0FnZlZ4eVhHNGdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgyRjFkRzhnZTF4eVhHNGdJQ0FnSmk1dmRYUnNhVzVsTFdSeVlYZGxjaUI3WEhKY2JpQWdJQ0FnSUNaZmNuUnNMRnh5WEc0Z0lDQWdJQ0FtWDJ4MGNpQjdYSEpjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBPaUJoZFhSdk8xeHlYRzRnSUNBZ0lDQWdJRzFoZUMxb1pXbG5hSFE2SUdOaGJHTW9NVEF3SlNBdElEUmxiU2s3WEhKY2JpQWdJQ0FnSUgxY2NseHVJQ0FnSUgxY2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlpuVnNiQ0I3WEhKY2JpQWdJQ0J3WVdSa2FXNW5PaUF3TzF4eVhHNGdJSDFjY2x4dWZWeHlYRzRpTENJdktpcGNjbHh1SUNvZ2MyaGhaRzkzTG14bGMzTWdMU0RwbUxUbHZiSG1vTGZsdkkvb3JyN252YTRnYldsNGFXNTRJT1dIdmVhVnNGeHlYRzRnS2lBOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5WEhKY2JpQXFJRU55WldGMFpXUWdRbms2SUZsaGIyaGhhWGhwWVc5Y2NseHVJQ29nVlhCa1lYUmxPaUF5TURJeUxqTXVNakJjY2x4dUlDb3ZYSEpjYmtCcGJYQnZjblFnSnk0dlkyOXNiM0p6Snp0Y2NseHVYSEpjYmk4cUlEMDlQVDA5UFNEcG1MVGx2Ykhtb0xmbHZJL29ycjdudmE3bGg3M21sYkFnUFQwOVBUMDlJQ292WEhKY2JpNXphR0ZrYjNjb1FHOW1abk5sZERvZ01DQXdJRFp3ZUNBeGNIZ3NJRUJqYjJ4dmNqb2dRSEJ5YVcxaGNubGZZbTl5WkdWeVgyTnZiRzl5S1NCN1hISmNiaUFnWW05NExYTm9ZV1J2ZHpvZ1FHOW1abk5sZENCQVkyOXNiM0k3WEhKY2JuMWNjbHh1WEhKY2JpNXphR0ZrYjNkZmNtVm5kV3hoY2loQVkyOXNiM0k2SUVCd2NtbHRZWEo1WDJKdmNtUmxjbDlqYjJ4dmNpa2dlMXh5WEc0Z0lDNXphR0ZrYjNjb01DQXdJRFp3ZUNBeGNIZ3NJRUJqYjJ4dmNpazdYSEpjYm4xY2NseHVYSEpjYmk1emFHRmtiM2RmYkdGeVoyVW9RR052Ykc5eU9pQkFjSEpwYldGeWVWOWliM0prWlhKZlkyOXNiM0lwSUh0Y2NseHVJQ0F1YzJoaFpHOTNLREFnTUNBeE1uQjRJREZ3ZUN3Z1FHTnZiRzl5S1R0Y2NseHVmVnh5WEc1Y2NseHVMbk5vWVdSdmQxOXNhV2RvZEY5eVpXZDFiR0Z5S0NrZ2UxeHlYRzRnSUM1emFHRmtiM2RmY21WbmRXeGhjaWdwTzF4eVhHNTlYSEpjYmx4eVhHNHVjMmhoWkc5M1gyeHBaMmgwWDJ4aGNtZGxLQ2tnZTF4eVhHNGdJQzV6YUdGa2IzZGZiR0Z5WjJVb0tUdGNjbHh1ZlZ4eVhHNWNjbHh1TG5Ob1lXUnZkMTlrWVhKclgzSmxaM1ZzWVhJb0tTQjdYSEpjYmlBZ0xuTm9ZV1J2ZDE5eVpXZDFiR0Z5S0VCelpXTnZibVJoY25sZlltOXlaR1Z5WDJOdmJHOXlLVHRjY2x4dWZWeHlYRzVjY2x4dUxuTm9ZV1J2ZDE5a1lYSnJYMnhoY21kbEtDa2dlMXh5WEc0Z0lDNXphR0ZrYjNkZmJHRnlaMlVvUUhObFkyOXVaR0Z5ZVY5aWIzSmtaWEpmWTI5c2IzSXBPMXh5WEc1OVhISmNiaUlzSWtCcGJYQnZjblFnSnk0dmRtRnlhV0ZpYkdWekp6dGNjbHh1UUdsdGNHOXlkQ0FuTGk5amIyeHZjbk1uTzF4eVhHNUFhVzF3YjNKMElDY3VMMlZzYkdsd2MybHpKenRjY2x4dVhISmNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpJSHRjY2x4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYSEpjYmlBZ2VpMXBibVJsZURvZ01UdGNjbHh1SUNCdFlYSm5hVzQ2SURBN1hISmNiaUFnZDJsa2RHZzZJSFpoY2lndExXOTFkR3hwYm1VdFkyaGhjSFJsY25NdGQybGtkR2dwTzF4eVhHNGdJSFJ5WVc1emFYUnBiMjR0WkhWeVlYUnBiMjQ2SURBdU0zTTdYSEpjYmlBZ2IzWmxjbVpzYjNjNklHRjFkRzg3WEhKY2JseHlYRzRnSUNaZlgzUnBkR3hsSUh0Y2NseHVJQ0FnSUcxaGNtZHBiam9nTUNBeE5uQjRPMXh5WEc0Z0lDQWdhR1ZwWjJoME9pQTBNSEI0TzF4eVhHNGdJQ0FnYkdsdVpTMW9aV2xuYUhRNklEUXdjSGc3WEhKY2JpQWdJQ0J3WVdSa2FXNW5PaUF3SURFMmNIZzdYSEpjYmlBZ0lDQmliM0prWlhJdFltOTBkRzl0T2lBeGNIZ2djMjlzYVdRZ1FIQnlhVzFoY25sZlltOXlaR1Z5WDJOdmJHOXlPMXh5WEc0Z0lDQWdabTl1ZEMxemFYcGxPaUF4Tm5CNE8xeHlYRzRnSUNBZ1ptOXVkQzEzWldsbmFIUTZJRFF3TUR0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5dFlXbHVJSHRjY2x4dUlDQWdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjY2x4dUlDQWdJSG90YVc1a1pYZzZJREU3WEhKY2JpQWdJQ0J0WVhKbmFXNDZJREE3WEhKY2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDlmYkdsemRDeGNjbHh1SUNBbVgxOXpkV0pxWldOMExGeHlYRzRnSUNaZlgybDBaVzBnZTF4eVhHNGdJQ0FnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4eVhHNGdJQ0FnZWkxcGJtUmxlRG9nTWp0Y2NseHVJQ0FnSUcxaGNtZHBiam9nTUR0Y2NseHVJQ0FnSUhCaFpHUnBibWM2SURBN1hISmNiaUFnSUNCc2FYTjBMWE4wZVd4bExYUjVjR1U2SUc1dmJtVTdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZiR2x6ZENCN1hISmNiaUFnSUNCd1lXUmthVzVuT2lBd0xqVmxiU0F3TzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5ZmMzVmlhbVZqZENCN1hISmNiaUFnSUNCd1lXUmthVzVuTFd4bFpuUTZJREZsYlR0Y2NseHVJQ0I5WEhKY2JseHlYRzRnSUNaZlgybDBaVzBnZTF4eVhHNGdJQ0FnYldGeVoybHVPaUF3TzF4eVhHNGdJQ0FnYkdsdVpTMW9aV2xuYUhRNklETXdjSGc3WEhKY2JpQWdJQ0JtYjI1MExYTnBlbVU2SURFemNIZzdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWZjR3hoWTJWb2IyeGtaWElnZTF4eVhHNGdJQ0FnY0c5emFYUnBiMjQ2SUdGaWMyOXNkWFJsTzF4eVhHNGdJQ0FnZWkxcGJtUmxlRG9nTVR0Y2NseHVJQ0FnSUhSdmNEb2dNRHRjY2x4dUlDQWdJR3hsWm5RNklEQTdYSEpjYmlBZ0lDQjNhV1IwYURvZ01UQXdKVHRjY2x4dUlDQWdJR2hsYVdkb2REb2dNekJ3ZUR0Y2NseHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCb2IzWmxjbDlpWjE5amIyeHZjanRjY2x4dUlDQWdJR0p2Y21SbGNpMXNaV1owT2lBeWNIZ2djMjlzYVdRZ1FITjFZMk5sYzNOZlkyOXNiM0k3WEhKY2JpQWdJQ0IwY21GdWMybDBhVzl1TFdSMWNtRjBhVzl1T2lBd0xqSnpPMXh5WEc0Z0lDQWdZbTk0TFhOcGVtbHVaem9nWW05eVpHVnlMV0p2ZUR0Y2NseHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDE5aGJtTm9iM0lnZTF4eVhHNGdJQ0FnTG1Wc2JHbHdjMmx6S0RFcE8xeHlYRzRnSUNBZ1pHbHpjR3hoZVRvZ1lteHZZMnM3WEhKY2JpQWdJQ0J3WVdSa2FXNW5PaUF3SURFdU5XVnRPMXh5WEc1Y2NseHVJQ0FnSUNZNmJHbHVheXhjY2x4dUlDQWdJQ1k2ZG1semFYUmxaQ3hjY2x4dUlDQWdJQ1k2YUc5MlpYSWdlMXh5WEc0Z0lDQWdJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hISmNiaUFnSUNBZ0lHTnZiRzl5T2lCQWMyVmpiMjVrWVhKNVgzUmxlSFJmWTI5c2IzSTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSmpwb2IzWmxjaUI3WEhKY2JpQWdJQ0FnSUdOdmJHOXlPaUJBYzNWalkyVnpjMTlqYjJ4dmNqdGNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMk52WkdVZ2UxeHlYRzRnSUNBZ2NHRmtaR2x1WnkxeWFXZG9kRG9nTUM0MVpXMDdYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMkZqZEdsMlpTQjdYSEpjYmlBZ0lDQW1MbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMkZ1WTJodmNpQjdYSEpjYmlBZ0lDQWdJQ1k2YkdsdWF5eGNjbHh1SUNBZ0lDQWdKanAyYVhOcGRHVmtMRnh5WEc0Z0lDQWdJQ0FtT21odmRtVnlJSHRjY2x4dUlDQWdJQ0FnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQWdJQ0FnWm05dWRDMTNaV2xuYUhRNklEUXdNRHRjY2x4dUlDQWdJQ0FnZlZ4eVhHNGdJQ0FnZlZ4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5emRHbGphM2tzWEhKY2JpQWdKbDltYVhobFpDQjdYSEpjYmlBZ0lDQmthWE53YkdGNU9pQm1iR1Y0TzF4eVhHNGdJQ0FnWm14bGVDMTNjbUZ3T2lCdWIzZHlZWEE3WEhKY2JpQWdJQ0JtYkdWNExXUnBjbVZqZEdsdmJqb2dZMjlzZFcxdU8xeHlYRzRnSUNBZ2VpMXBibVJsZURvZ2RtRnlLQzB0YjNWMGJHbHVaUzE2U1c1a1pYZ3BPMXh5WEc0Z0lDQWdkRzl3T2lBd08xeHlYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2NseHVYSEpjYmlBZ0lDQXViM1YwYkdsdVpTMWphR0Z3ZEdWeWN5QjdYSEpjYmlBZ0lDQWdJQ1pmWDNScGRHeGxMRnh5WEc0Z0lDQWdJQ0FtWDE5dFlXbHVJSHRjY2x4dUlDQWdJQ0FnSUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh5WEc0Z0lDQWdJQ0I5WEhKY2JseHlYRzRnSUNBZ0lDQW1YMTkwYVhSc1pTQjdYSEpjYmlBZ0lDQWdJQ0FnWm14bGVDMXphSEpwYm1zNklEQTdYSEpjYmlBZ0lDQWdJSDFjY2x4dVhISmNiaUFnSUNBZ0lDWmZYMjFoYVc0Z2UxeHlYRzRnSUNBZ0lDQWdJR1pzWlhnNklERTdYSEpjYmlBZ0lDQWdJQ0FnYjNabGNtWnNiM2M2SUdGMWRHODdYSEpjYmlBZ0lDQWdJSDFjY2x4dUlDQWdJSDFjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmYzNScFkydDVJSHRjY2x4dUlDQWdJSEJ2YzJsMGFXOXVPaUJ6ZEdsamEzazdYSEpjYmlBZ0lDQnRZWGd0YUdWcFoyaDBPaUIyWVhJb0xTMXZkWFJzYVc1bExYTjBhV05yZVMxb1pXbG5hSFFwTzF4eVhHNGdJSDFjY2x4dVhISmNiaUFnSmw5bWFYaGxaQ0I3WEhKY2JpQWdJQ0J3YjNOcGRHbHZiam9nWm1sNFpXUTdYSEpjYmlBZ0lDQnRZWGd0YUdWcFoyaDBPaUF4TURBbE8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOW9hV1JrWlc0Z2UxeHlYRzRnSUNBZ1pHbHpjR3hoZVRvZ2JtOXVaVHRjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWm05c1pHVmtJSHRjY2x4dUlDQWdJSGRwWkhSb09pQXdPMXh5WEc0Z0lIMWNjbHh1ZlZ4eVhHNGlMQ0l2S2lwY2JpQXFJR1ZzYkdsd2MybHpMbXhsYzNNZ0xTRG1sb2Ztbkt6bm5JSG5sYVVnYldsNGFXNTRJT1dIdmVhVnNGeHVJQ29nUFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVnh1SUNvZ1EzSmxZWFJsWkNCQ2VUb2dXV0Z2YUdGcGVHbGhiMXh1SUNvZ1ZYQmtZWFJsT2lBeU1ESXlMak11TVRGY2JpQXFMMXh1WEc0dktpQTlQVDA5UFQwZzVwYUg1cHlzNTV5QjU1V2w1WWU5NXBXd0lEMDlQVDA5UFNBcUwxeHVMbVZzYkdsd2MybHpJQ2hBYkdsdVpYTXBJSGRvWlc0Z0tFQnNhVzVsY3oweEtTQjdYRzRnSUhkb2FYUmxMWE53WVdObE9pQnViM2R5WVhBN1hHNGdJSFJsZUhRdGIzWmxjbVpzYjNjNklHVnNiR2x3YzJsek8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dVhHNHVaV3hzYVhCemFYTWdLRUJzYVc1bGN5a2dkMmhsYmlBb1FHeHBibVZ6UGoweUtTQjdYRzRnSUMxM1pXSnJhWFF0YkdsdVpTMWpiR0Z0Y0RvZ1FHeHBibVZ6TzF4dUlDQmthWE53YkdGNU9pQmliM2c3WEc0Z0lDMTNaV0pyYVhRdFltOTRMVzl5YVdWdWREb2dkbVZ5ZEdsallXdzdYRzRnSUhSbGVIUXRiM1psY21ac2IzYzZJR1ZzYkdsd2MybHpPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVJaXdpTHlvZ1BUMDlQVDA5UFQwOVBTQmlkWFIwYjI1ekxuUm9aVzFsSUMwZzVveUo2Wkt1NWErODZJaXE1cUMzNWJ5UElEMDlQVDA5UFQwOVBUMGdLaTljY2x4dVFHbHRjRzl5ZENBbkxpOWpiMnh2Y25Nbk8xeHlYRzVBYVcxd2IzSjBJQ2N1TDNOb1lXUnZkeWM3WEhKY2JseHlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlJSHRjY2x4dUlDQndiM05wZEdsdmJqb2dabWw0WldRN1hISmNiaUFnZWkxcGJtUmxlRG9nT1RrNU9UazdYSEpjYmlBZ2JXRnlaMmx1T2lBd08xeHlYRzRnSUhSeVlXNXphWFJwYjI0dFpIVnlZWFJwYjI0NklEQXVNM003WEhKY2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNjbHh1WEhKY2JpQWdKbDlmWW5WMGRHOXVJSHRjY2x4dUlDQWdJQzV6YUdGa2IzZGZiR2xuYUhSZmNtVm5kV3hoY2lncE8xeHlYRzRnSUNBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHlYRzRnSUNBZ2VpMXBibVJsZURvZ01UdGNjbHh1SUNBZ0lHMWhjbWRwYmpvZ01UQndlRHRjY2x4dUlDQWdJSGRwWkhSb09pQXpObkI0TzF4eVhHNGdJQ0FnYUdWcFoyaDBPaUF6Tm5CNE8xeHlYRzRnSUNBZ1ltOXlaR1Z5T2lBeGNIZ2djMjlzYVdRZ1FIQnlhVzFoY25sZlltOXlaR1Z5WDJOdmJHOXlPMXh5WEc0Z0lDQWdZbTl5WkdWeUxYSmhaR2wxY3pvZ00zQjRPMXh5WEc0Z0lDQWdZbTk0TFhOcGVtbHVaem9nWW05eVpHVnlMV0p2ZUR0Y2NseHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCM2FHbDBaVHRjY2x4dUlDQWdJR04xY25OdmNqb2djRzlwYm5SbGNqdGNjbHh1SUNBZ0lIUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdGNjbHh1SUNBZ0lHTnZiRzl5T2lCQWMyVmpiMjVrWVhKNVgzUmxlSFJmWTI5c2IzSTdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzVjY2x4dUlDQWdJQ1k2YUc5MlpYSWdlMXh5WEc0Z0lDQWdJQ0JqYjJ4dmNqb2dRSE4xWTJObGMzTmZZMjlzYjNJN1hISmNiaUFnSUNBZ0lHSnZjbVJsY2kxamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSmk1b2FXUmxJSHRjY2x4dUlDQWdJQ0FnWkdsemNHeGhlVG9nYm05dVpUdGNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMkZ1WTJodmNpQjdYSEpjYmlBZ0lDQW1PbXhwYm1zc1hISmNiaUFnSUNBbU9uWnBjMmwwWldRc1hISmNiaUFnSUNBbU9taHZkbVZ5SUh0Y2NseHVJQ0FnSUNBZ1kyOXNiM0k2SUVCbWIzVnlkR2hmZEdWNGRGOWpiMnh2Y2p0Y2NseHVJQ0FnSUNBZ2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNZNmFHOTJaWElnZTF4eVhHNGdJQ0FnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTlwWTI5dUlIdGNjbHh1SUNBZ0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNjbHh1SUNBZ0lIb3RhVzVrWlhnNklESTdYSEpjYmlBZ0lDQjBiM0E2SURVd0pUdGNjbHh1SUNBZ0lHeGxablE2SURVd0pUdGNjbHh1SUNBZ0lIZHBaSFJvT2lBeU1IQjRPMXh5WEc0Z0lDQWdhR1ZwWjJoME9pQXlNSEI0TzF4eVhHNGdJQ0FnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdVb0xUVXdKU3dnTFRVd0pTazdYSEpjYmlBZ0lDQm1hV3hzT2lCamRYSnlaVzUwWTI5c2IzSTdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWhZM1JwZG1VZ2UxeHlYRzRnSUNBZ0ppNXZkWFJzYVc1bExYUnZiMnhpWVhJZ2UxeHlYRzRnSUNBZ0lDQW1YMTlpZFhSMGIyNGdlMXh5WEc0Z0lDQWdJQ0FnSUdOdmJHOXlPaUJBZDJocGRHVTdYSEpjYmlBZ0lDQWdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQWdJQ0FnWW05eVpHVnlMV052Ykc5eU9pQkFjM1ZqWTJWemMxOWpiMnh2Y2p0Y2NseHVYSEpjYmlBZ0lDQWdJQ0FnSmpwb2IzWmxjaUI3WEhKY2JpQWdJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ1FIZG9hWFJsTzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjaUI3WEhKY2JpQWdJQ0FnSUNZNmJHbHVheXhjY2x4dUlDQWdJQ0FnSmpwMmFYTnBkR1ZrTEZ4eVhHNGdJQ0FnSUNBbU9taHZkbVZ5SUh0Y2NseHVJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ1FIZG9hWFJsTzF4eVhHNGdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgzSnZkVzVrWldRZ2UxeHlYRzRnSUNBZ0ppNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2YmlCN1hISmNiaUFnSUNBZ0lHSnZjbVJsY2kxeVlXUnBkWE02SURFNGNIZzdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMlJwYzJGaWJHVmtJSHRjY2x4dUlDQWdJQ1l1YjNWMGJHbHVaUzEwYjI5c1ltRnlMRnh5WEc0Z0lDQWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNpQjdYSEpjYmlBZ0lDQWdJQ1pmWDJGdVkyaHZjanBzYVc1ckxGeHlYRzRnSUNBZ0lDQW1YMTloYm1Ob2IzSTZkbWx6YVhSbFpDeGNjbHh1SUNBZ0lDQWdKbDlmWVc1amFHOXlPbWh2ZG1WeUxGeHlYRzRnSUNBZ0lDQW1YMTlpZFhSMGIyNGdlMXh5WEc0Z0lDQWdJQ0FnSUdOMWNuTnZjam9nYm05MExXRnNiRzkzWldRN1hISmNiaUFnSUNBZ0lDQWdZMjlzYjNJNklFQm1iM1Z5ZEdoZmRHVjRkRjlqYjJ4dmNqdGNjbHh1WEhKY2JpQWdJQ0FnSUNBZ0pqcG9iM1psY2lCN1hISmNiaUFnSUNBZ0lDQWdJQ0JqYjJ4dmNqb2dRR1p2ZFhKMGFGOTBaWGgwWDJOdmJHOXlPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5ZlluVjBkRzl1SUh0Y2NseHVJQ0FnSUNBZ0lDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQkFaR2x6WVdKc1pXUmZZbWRmWTI5c2IzSTdYSEpjYmlBZ0lDQWdJSDFjY2x4dUlDQWdJSDFjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmZEhSaUxGeHlYRzRnSUNaZlluUjBJSHRjY2x4dUlDQWdJR3hsWm5RNklEVXdKVHRjY2x4dUlDQWdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV0NndE5UQWxLVHRjY2x4dVhISmNiaUFnSUNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aWRYUjBiMjRnZTF4eVhHNGdJQ0FnSUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YM1IwWWlCN1hISmNiaUFnSUNCMGIzQTZJREV5Y0hnN1hISmNibHh5WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZhR2xrWkdWdUlIdGNjbHh1SUNBZ0lDQWdkRzl3T2lBdE5UWndlRHRjY2x4dUlDQWdJSDFjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWW5SMElIdGNjbHh1SUNBZ0lHSnZkSFJ2YlRvZ01USndlRHRjY2x4dVhISmNiaUFnSUNBbUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRnZTF4eVhHNGdJQ0FnSUNCaWIzUjBiMjA2SUMwMU5uQjRPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDl5ZEd3c1hISmNiaUFnSmw5c2RISWdlMXh5WEc0Z0lDQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZaS0MwMU1DVXBPMXh5WEc0Z0lDQWdkMmxrZEdnNklEVTJjSGc3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDNKMGJDQjdYSEpjYmlBZ0lDQjBiM0E2SURVd0pUdGNjbHh1SUNBZ0lISnBaMmgwT2lBeE1uQjRPMXh5WEc1Y2NseHVJQ0FnSUNZdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEhKY2JpQWdJQ0FnSUhKcFoyaDBPaUF0T0Rad2VEdGNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZiSFJ5SUh0Y2NseHVJQ0FnSUhSdmNEb2dOVEFsTzF4eVhHNGdJQ0FnYkdWbWREb2dNVEp3ZUR0Y2NseHVYSEpjYmlBZ0lDQW1MbTkxZEd4cGJtVXRkRzl2YkdKaGNsOW9hV1JrWlc0Z2UxeHlYRzRnSUNBZ0lDQnNaV1owT2lBdE9EWndlRHRjY2x4dUlDQWdJSDFjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmZEhSaUxGeHlYRzRnSUNaZmNuUnNMRnh5WEc0Z0lDWmZZblIwTEZ4eVhHNGdJQ1pmYkhSeUlIdGNjbHh1SUNBZ0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2YmlCN1hISmNiaUFnSUNBZ0lDWXViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYmlCN1hISmNiaUFnSUNBZ0lDQWdaR2x6Y0d4aGVUb2dibTl1WlR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVmVnh5WEc0aUxDSXZLaUE5UFQwOVBTQlRZM0p2Ykd4aVlYSWdQVDA5UFQwZ0tpOWNjbHh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2lCN1hISmNiaUFnZDJsa2RHZzZJRGR3ZUR0Y2NseHVJQ0JvWldsbmFIUTZJRGR3ZUR0Y2NseHVJQ0F0ZDJWaWEybDBMV0p2Y21SbGNpMXlZV1JwZFhNNklEVndlRHRjY2x4dWZWeHlYRzVjY2x4dU9qb3RkMlZpYTJsMExYTmpjbTlzYkdKaGNpMTBjbUZqYXkxd2FXVmpaU0I3WEhKY2JpQWdMWGRsWW10cGRDMWliM0prWlhJdGNtRmthWFZ6T2lBMWNIZzdYSEpjYm4xY2NseHVYSEpjYmpvNkxYZGxZbXRwZEMxelkzSnZiR3hpWVhJdGRHaDFiV0k2ZG1WeWRHbGpZV3dnZTF4eVhHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJSEpuWW1Fb01Dd2dNQ3dnTUN3Z01DNHlOU2s3WEhKY2JpQWdMWGRsWW10cGRDMWliM0prWlhJdGNtRmthWFZ6T2lBMWNIZzdYSEpjYm4xY2NseHVYSEpjYmpvNkxYZGxZbXRwZEMxelkzSnZiR3hpWVhJdGRHaDFiV0k2YUc5eWFYcHZiblJoYkNCN1hISmNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nY21kaVlTZ3dMQ0F3TENBd0xDQXdMakkxS1R0Y2NseHVJQ0F0ZDJWaWEybDBMV0p2Y21SbGNpMXlZV1JwZFhNNklEVndlRHRjY2x4dWZWeHlYRzVjY2x4dU9qb3RkMlZpYTJsMExYTmpjbTlzYkdKaGNqcG9iM1psY2lCN1hISmNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nY21kaVlTZ3dMQ0F3TENBd0xDQXdMakUxS1R0Y2NseHVmVnh5WEc1Y2NseHVPam90ZDJWaWEybDBMWE5qY205c2JHSmhjaTEwYUhWdFlqcG9iM1psY2lCN1hISmNiaUFnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nY21kaVlTZ3dMQ0F3TENBd0xDQXdMak0xS1R0Y2NseHVmVnh5WEc0aVhYMD0gKi9cbiJdLCJmaWxlIjoib3V0bGluZS5taW4uY3NzIn0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJvdXRsaW5lLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyI6cm9vdCB7XG4gIC0tb3V0bGluZS16SW5kZXg6IDIwMDA7XG4gIC0tb3V0bGluZS1zdGlja3ktaGVpZ2h0OiAxMDAlO1xuICAtLW91dGxpbmUtY2hhcHRlcnMtd2lkdGg6IDEwMCU7XG59XG4vKiA9PT09PT09PT09IGNvbG9ycy50aGVtZSAtIOWfuuehgOminOiJsuWPmOmHj+mbhuWQiCA9PT09PT09PT09ICovXG4vKipcbiAqIGVsbGlwc2lzLmxlc3MgLSDmlofmnKznnIHnlaUgbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMTFcbiAqL1xuLyogPT09PT09IOaWh+acrOecgeeVpeWHveaVsCA9PT09PT0gKi9cbi8qKlxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMjBcbiAqL1xuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cbi8qID09PT09PT09PT0gaWNvbi50aGVtZSAtIHN2ZyDlm77moIfnmoTmoLflvI8gPT09PT09PT09PSAqL1xuLm91dGxpbmUtaWNvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMWVtO1xuICBoZWlnaHQ6IDFlbTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWljb25fX3N2ZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDFlbTtcbiAgaGVpZ2h0OiAxZW07XG4gIGZpbGw6IGN1cnJlbnRjb2xvcjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWhlYWRpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yOmxpbmssXG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWhlYWRpbmdfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ub3V0bGluZS1oZWFkaW5nX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzFmOGRkNjtcbn1cbi5vdXRsaW5lLWhlYWRpbmc6aG92ZXIgLm91dGxpbmUtaGVhZGluZ19fYW5jaG9yIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLm91dGxpbmUtaGVhZGluZ19zdGFydDpob3ZlciB7XG4gIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuLm91dGxpbmUtaGVhZGluZ19zdGFydCAub3V0bGluZS1oZWFkaW5nX19hbmNob3Ige1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIGxlZnQ6IC0xZW07XG59XG4ub3V0bGluZS1kcmF3ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IC0xO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fbW9kYWwge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAtd2Via2l0LWJveC1kaXJlY3Rpb246IG5vcm1hbDtcbiAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDIxO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMC40cztcbiAgICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjRzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX21haW4sXG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIHdpZHRoOiAxMDAlO1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9faGVhZGVyLFxuLm91dGxpbmUtZHJhd2VyX19mb290ZXIge1xuICAtbXMtZmxleC1uZWdhdGl2ZTogMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX190aXRsZSxcbi5vdXRsaW5lLWRyYXdlcl9fbWFpbixcbi5vdXRsaW5lLWRyYXdlcl9fZm9vdGVyIHtcbiAgcGFkZGluZzogMCAxNnB4O1xufVxuLm91dGxpbmUtZHJhd2VyX19oZWFkZXIsXG4ub3V0bGluZS1kcmF3ZXJfX3RpdGxlIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDAgYXV0bztcbiAgaGVpZ2h0OiA1MnB4O1xuICBsaW5lLWhlaWdodDogNTJweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fdGl0bGUge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIG1hcmdpbjogMCAxNnB4O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDEycHg7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBjb2xvcjogIzk5OTtcbiAgZm9udC1zaXplOiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX19jbG9zZSAub3V0bGluZS1pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Nsb3NlOmhvdmVyIHtcbiAgY29sb3I6ICM2NjY7XG59XG4ub3V0bGluZS1kcmF3ZXJfX21haW4ge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4ub3V0bGluZS1kcmF3ZXJfX2Zvb3RlciB7XG4gIG1hcmdpbjogMCBhdXRvO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9fb3ZlcmxheSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgb3BhY2l0eTogMC4xO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl90aW55LFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl90aW55IHtcbiAgd2lkdGg6IDI4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9taW5pLFxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl9taW5pIHtcbiAgd2lkdGg6IDQ4MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9zbWFsbCxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfc21hbGwge1xuICB3aWR0aDogNTQwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIsXG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIge1xuICB3aWR0aDogNjgwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21lZGl1bSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWVkaXVtIHtcbiAgd2lkdGg6IDcyMHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9sYXJnZSxcbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uge1xuICB3aWR0aDogOTYwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIHJpZ2h0OiAtMjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfcnRsLm91dGxpbmUtZHJhd2VyX21pbmkub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC00OTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC01NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICByaWdodDogLTY5MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3J0bC5vdXRsaW5lLWRyYXdlcl9tZWRpdW0ub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC03MzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9ydGwub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgcmlnaHQ6IC05NzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIge1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGNkZmU2O1xufVxuLm91dGxpbmUtZHJhd2VyX2x0ci5vdXRsaW5lLWRyYXdlcl90aW55Lm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC0yOTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX3NtYWxsLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC01NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9sdHIub3V0bGluZS1kcmF3ZXJfcmVndWxhci5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNjkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBsZWZ0OiAtNzMwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfbHRyLm91dGxpbmUtZHJhd2VyX2xhcmdlLm91dGxpbmUtZHJhd2VyX2Nsb3NlZCB7XG4gIGxlZnQ6IC05NzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIsXG4ub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3RpbnksXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3Rpbnkge1xuICBoZWlnaHQ6IDI0MHB4O1xufVxuLm91dGxpbmUtZHJhd2VyX3R0Yi5vdXRsaW5lLWRyYXdlcl9taW5pLFxuLm91dGxpbmUtZHJhd2VyX2J0dC5vdXRsaW5lLWRyYXdlcl9taW5pIHtcbiAgaGVpZ2h0OiAzMjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfc21hbGwsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3NtYWxsIHtcbiAgaGVpZ2h0OiAzNjBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfcmVndWxhcixcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfcmVndWxhciB7XG4gIGhlaWdodDogNDAwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21lZGl1bSxcbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWVkaXVtIHtcbiAgaGVpZ2h0OiA0NDBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbGFyZ2UsXG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX2xhcmdlIHtcbiAgaGVpZ2h0OiA0ODBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0yNTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC0zMzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtMzcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDEwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfdHRiLm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICB0b3A6IC00NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl90dGIub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgdG9wOiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgdG9wOiBpbml0aWFsO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgI2RjZGZlNjtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfdGlueS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0yNTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbWluaS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC0zMzBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfc21hbGwub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtMzcwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX3JlZ3VsYXIub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDEwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfYnR0Lm91dGxpbmUtZHJhd2VyX21lZGl1bS5vdXRsaW5lLWRyYXdlcl9jbG9zZWQge1xuICBib3R0b206IC00NTBweDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9idHQub3V0bGluZS1kcmF3ZXJfbGFyZ2Uub3V0bGluZS1kcmF3ZXJfY2xvc2VkIHtcbiAgYm90dG9tOiAtNDkwcHg7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgei1pbmRleDogdmFyKC0tb3V0bGluZS16SW5kZXgpO1xufVxuLm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfcnRsIHtcbiAgcmlnaHQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGxlZnQ6IDA7XG59XG4ub3V0bGluZS1kcmF3ZXJfb3BlbmVkLm91dGxpbmUtZHJhd2VyX3R0YiB7XG4gIHRvcDogMDtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfYnR0IHtcbiAgYm90dG9tOiAwO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9ydGwsXG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcbiAgdG9wOiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9vZmZzZXQub3V0bGluZS1kcmF3ZXJfdHRiLFxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICB3aWR0aDogY2FsYygxMDAlIC0gNGVtKTtcbiAgbGVmdDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9ydGwge1xuICByaWdodDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfbHRyIHtcbiAgbGVmdDogMmVtO1xufVxuLm91dGxpbmUtZHJhd2VyX29mZnNldC5vdXRsaW5lLWRyYXdlcl9vcGVuZWQub3V0bGluZS1kcmF3ZXJfdHRiIHtcbiAgdG9wOiAyZW07XG59XG4ub3V0bGluZS1kcmF3ZXJfb2Zmc2V0Lm91dGxpbmUtZHJhd2VyX29wZW5lZC5vdXRsaW5lLWRyYXdlcl9idHQge1xuICBib3R0b206IDJlbTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9hdXRvLm91dGxpbmUtZHJhd2VyX3J0bCxcbi5vdXRsaW5lLWRyYXdlcl9hdXRvLm91dGxpbmUtZHJhd2VyX2x0ciB7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gNGVtKTtcbn1cbi5vdXRsaW5lLWRyYXdlcl9mdWxsIHtcbiAgcGFkZGluZzogMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiB2YXIoLS1vdXRsaW5lLWNoYXB0ZXJzLXdpZHRoKTtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3RpdGxlIHtcbiAgbWFyZ2luOiAwIDE2cHg7XG4gIGhlaWdodDogNDBweDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmc6IDAgMTZweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkY2RmZTY7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19tYWluIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS1jaGFwdGVyc19fbGlzdCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19zdWJqZWN0LFxuLm91dGxpbmUtY2hhcHRlcnNfX2l0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDI7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2xpc3Qge1xuICBwYWRkaW5nOiAwLjVlbSAwO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3N1YmplY3Qge1xuICBwYWRkaW5nLWxlZnQ6IDFlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19pdGVtIHtcbiAgbWFyZ2luOiAwO1xuICBsaW5lLWhlaWdodDogMzBweDtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX3BsYWNlaG9sZGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDMwcHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmN2Y4Zjk7XG4gIGJvcmRlci1sZWZ0OiAycHggc29saWQgIzA1ODk0MjtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjJzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMnM7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvciB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMCAxLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGNvbG9yOiAjNTU1O1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtY2hhcHRlcnNfX2NvZGUge1xuICBwYWRkaW5nLXJpZ2h0OiAwLjVlbTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6bGluayxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLWNoYXB0ZXJzX2FjdGl2ZS5vdXRsaW5lLWNoYXB0ZXJzX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbiAgLXdlYmtpdC1ib3gtZGlyZWN0aW9uOiBub3JtYWw7XG4gICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB6LWluZGV4OiB2YXIoLS1vdXRsaW5lLXpJbmRleCk7XG4gIHRvcDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fdGl0bGUsXG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX21haW4sXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLm91dGxpbmUtY2hhcHRlcnNfc3RpY2t5IC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSxcbi5vdXRsaW5lLWNoYXB0ZXJzX2ZpeGVkIC5vdXRsaW5lLWNoYXB0ZXJzX190aXRsZSB7XG4gIC1tcy1mbGV4LW5lZ2F0aXZlOiAwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG59XG4ub3V0bGluZS1jaGFwdGVyc19zdGlja3kgLm91dGxpbmUtY2hhcHRlcnNfX21haW4sXG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCAub3V0bGluZS1jaGFwdGVyc19fbWFpbiB7XG4gIC13ZWJraXQtYm94LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX3N0aWNreSB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIG1heC1oZWlnaHQ6IHZhcigtLW91dGxpbmUtc3RpY2t5LWhlaWdodCk7XG59XG4ub3V0bGluZS1jaGFwdGVyc19maXhlZCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbWF4LWhlaWdodDogMTAwJTtcbn1cbi5vdXRsaW5lLWNoYXB0ZXJzX2hpZGRlbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS1jaGFwdGVyc19mb2xkZWQge1xuICB3aWR0aDogMDtcbn1cbi8qID09PT09PT09PT0gYnV0dG9ucy50aGVtZSAtIOaMiemSruWvvOiIquagt+W8jyA9PT09PT09PT09ICovXG4ub3V0bGluZS10b29sYmFyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB6LWluZGV4OiA5OTk5OTtcbiAgbWFyZ2luOiAwO1xuICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gICAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMTBweDtcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RjZGZlNjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjNTU1O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG4gIGJvcmRlci1jb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5oaWRlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX19pY29uIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAyO1xuICB0b3A6IDUwJTtcbiAgbGVmdDogNTAlO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDU4OTQyO1xuICBib3JkZXItY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9yb3VuZGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogMThweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgY29sb3I6ICM5OTk7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbms6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZDpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXI6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiLFxuLm91dGxpbmUtdG9vbGJhcl9idHQge1xuICBsZWZ0OiA1MCU7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIHtcbiAgdG9wOiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIHRvcDogLTU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2J0dCB7XG4gIGJvdHRvbTogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYnR0Lm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBib3R0b206IC01NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwsXG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgd2lkdGg6IDU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bCB7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICByaWdodDogLTg2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9sdHIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGxlZnQ6IC04NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX3J0bCAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9sdHIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuLyogPT09PT0gU2Nyb2xsYmFyID09PT09ICovXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDdweDtcbiAgaGVpZ2h0OiA3cHg7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZSB7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjp2ZXJ0aWNhbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4O1xufVxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3Jpem9udGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjI1KTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7XG59XG46Oi13ZWJraXQtc2Nyb2xsYmFyOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjE1KTtcbn1cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMzUpO1xufVxuXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGY4O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkluWmhjbWxoWW14bGN5NXNaWE56SWl3aUxpNHZMaTR2UEdsdWNIVjBJR056Y3lBMVBpSXNJbWxqYjI1ekxteGxjM01pTENKaGJtTm9iM0p6TG14bGMzTWlMQ0prY21GM1pYSXViR1Z6Y3lJc0luTm9ZV1J2ZHk1c1pYTnpJaXdpWTJoaGNIUmxjbk11YkdWemN5SXNJbVZzYkdsd2MybHpMbXhsYzNNaUxDSjBiMjlzWW1GeUxteGxjM01pTENKelkzSnZiR3hpWVhJdWJHVnpjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVR0RlFVTkZMSFZDUVVGQk8wVkJRMEVzT0VKQlFVRTdSVUZEUVN3clFrRkJRVHREUTBORU8wRkJRMFFzYlVSQlFXMUVPMEZCUTI1RU96czdPenRIUVV0SE8wRkJRMGdzTUVKQlFUQkNPMEZCUXpGQ096czdPenRIUVV0SE8wRkJRMGdzTkVKQlFUUkNPMEZCUXpWQ0xHdEVRVUZyUkR0QlEyNUNiRVE3UlVGRFJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3h6UWtGQlFUdEZRVU5CTEhWQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeHBRa0ZCUVR0RFJIRkNSRHRCUTI1Q1F6dEZRVU5GTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxGTkJRVUU3UlVGRFFTeFZRVUZCTzBWQlEwRXNWMEZCUVR0RlFVTkJMRmxCUVVFN1JVRkRRU3h0UWtGQlFUdEZRVU5CTEhsRFFVRkJPMVZCUVVFc2FVTkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFJIRkNTRHRCUlhSRFJEdEZRVU5GTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxHbENRVUZCTzBOR2QwTkVPMEZGZEVORE8wVkJRMFVzWTBGQlFUdERSbmREU0R0QlJYUkRSenM3TzBWQlIwVXNXVUZCUVR0RlFVTkJMSE5DUVVGQk8wTkdkME5NTzBGRmNrTkhPMFZCUTBVc1pVRkJRVHREUm5WRFREdEJSVzVEUXp0RlFVVkpMSE5DUVVGQk8wTkdiME5NTzBGRkwwSkhPMFZCUTBVc2EwSkJRVUU3UTBacFEwdzdRVVZ1UTBNN1JVRk5TU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VFFVRkJPMFZCUTBFc2IwTkJRVUU3VlVGQlFTdzBRa0ZCUVR0RlFVTkJMRmRCUVVFN1EwWm5RMHc3UVVkc1JVUTdSVUZEUlN4dFFrRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeFBRVUZCTzBWQlEwRXNVVUZCUVR0RlFVTkJMRlZCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEN0Q1FVRkJPMVZCUVVFc2RVSkJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMR2xDUVVGQk8wTkliMFZFTzBGSGJFVkRPMFZEVGtFc2QwTkJRVUU3VlVGQlFTeG5RMEZCUVR0RlJGRkZMSEZDUVVGQk8wVkJRVUVzY1VKQlFVRTdSVUZCUVN4alFVRkJPMFZCUTBFc05rSkJRVUU3UlVGQlFTdzRRa0ZCUVR0TlFVRkJMREpDUVVGQk8xVkJRVUVzZFVKQlFVRTdSVUZEUVN4elFrRkJRVHROUVVGQkxHdENRVUZCTzBWQlEwRXNiVUpCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEhWQ1FVRkJPMFZCUTBFc2EwTkJRVUU3VlVGQlFTd3dRa0ZCUVR0RlFVTkJMR2xDUVVGQk8wTkliMFZJTzBGSGFrVkRPenM3UlVGSFJTeFpRVUZCTzBWQlEwRXNLMEpCUVVFN1ZVRkJRU3gxUWtGQlFUdERTRzFGU0R0QlIyaEZRenM3UlVGRlJTeHhRa0ZCUVR0TlFVRkJMR1ZCUVVFN1EwaHJSVWc3UVVjdlJFTTdPenRGUVVkRkxHZENRVUZCTzBOSWFVVklPMEZIT1VSRE96dEZRVVZGTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxHVkJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNhMEpCUVVFN1JVRkRRU3hwUWtGQlFUdERTR2RGU0R0QlJ6ZEVRenRGUVVORkxHZENRVUZCTzBWQlEwRXNhVUpCUVVFN1JVRkRRU3hsUVVGQk8wVkJRMEVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHRGUVVOQkxHbERRVUZCTzBOSUswUklPMEZITlVSRE8wVkJRMFVzYlVKQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc1UwRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeFpRVUZCTzBWQlEwRXNZVUZCUVR0RlFVTkJMR3RDUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2JVSkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMRzlEUVVGQk8xVkJRVUVzTkVKQlFVRTdSVUZEUVN4cFFrRkJRVHREU0RoRVNEdEJSek5GUXp0RlFXZENTU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4UFFVRkJPMFZCUTBFc1VVRkJRVHREU0RoRVREdEJSek5FUnp0RlFVTkZMRmxCUVVFN1EwZzJSRXc3UVVkNlJFTTdSVUZEUlN4dlFrRkJRVHROUVVGQkxGbEJRVUU3VlVGQlFTeFJRVUZCTzBWQlEwRXNaVUZCUVR0RFNESkVTRHRCUjNoRVF6dEZRVU5GTEdWQlFVRTdSVUZEUVN4clFrRkJRVHRGUVVOQkxHbENRVUZCTzBOSU1FUklPMEZIZGtSRE8wVkJRMFVzV1VGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxFOUJRVUU3UlVGRFFTeFJRVUZCTzBWQlEwRXNXVUZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3gxUWtGQlFUdEZRVU5CTEdGQlFVRTdSVUZEUVN4cFFrRkJRVHREU0hsRVNEdEJSMjVFU3pzN1JVRkRSU3hoUVVGQk8wTkljMFJRTzBGSGJrUkxPenRGUVVORkxHRkJRVUU3UTBoelJGQTdRVWR1UkVzN08wVkJRMFVzWVVGQlFUdERTSE5FVUR0QlIyNUVTenM3UlVGRFJTeGhRVUZCTzBOSWMwUlFPMEZIYmtSTE96dEZRVU5GTEdGQlFVRTdRMGh6UkZBN1FVZHVSRXM3TzBWQlEwVXNZVUZCUVR0RFNITkVVRHRCUjJwRVF6dEZRVU5GTEN0Q1FVRkJPME5JYlVSSU8wRkhMME5QTzBWQlEwVXNZMEZCUVR0RFNHbEVWRHRCUnpWRFR6dEZRVU5GTEdOQlFVRTdRMGc0UTFRN1FVZDZRMDg3UlVGRFJTeGpRVUZCTzBOSU1rTlVPMEZIZEVOUE8wVkJRMFVzWTBGQlFUdERTSGREVkR0QlIyNURUenRGUVVORkxHTkJRVUU3UTBoeFExUTdRVWRvUTA4N1JVRkRSU3hqUVVGQk8wTklhME5VTzBGSE5VSkRPMFZCUTBVc1owTkJRVUU3UTBnNFFrZzdRVWN4UWs4N1JVRkRSU3hoUVVGQk8wTklORUpVTzBGSGRrSlBPMFZCUTBVc1lVRkJRVHREU0hsQ1ZEdEJSM0JDVHp0RlFVTkZMR0ZCUVVFN1EwaHpRbFE3UVVkcVFrODdSVUZEUlN4aFFVRkJPME5JYlVKVU8wRkhaRTg3UlVGRFJTeGhRVUZCTzBOSVowSlVPMEZIV0U4N1JVRkRSU3hoUVVGQk8wTklZVlE3UVVkUVF6czdSVUZGUlN4UlFVRkJPMFZCUTBFc1dVRkJRVHREU0ZOSU8wRkhUa3M3TzBWQlEwVXNZMEZCUVR0RFNGTlFPMEZIVGtzN08wVkJRMFVzWTBGQlFUdERTRk5RTzBGSFRrczdPMFZCUTBVc1kwRkJRVHREU0ZOUU8wRkhUa3M3TzBWQlEwVXNZMEZCUVR0RFNGTlFPMEZIVGtzN08wVkJRMFVzWTBGQlFUdERTRk5RTzBGSFRrczdPMFZCUTBVc1kwRkJRVHREU0ZOUU8wRkhTa003UlVGRFJTeHBRMEZCUVR0RFNFMUlPMEZIUms4N1JVRkRSU3haUVVGQk8wTklTVlE3UVVkRFR6dEZRVU5GTEZsQlFVRTdRMGhEVkR0QlIwbFBPMFZCUTBVc1dVRkJRVHREU0VaVU8wRkhUMDg3UlVGRFJTeFpRVUZCTzBOSVRGUTdRVWRWVHp0RlFVTkZMRmxCUVVFN1EwaFNWRHRCUjJGUE8wVkJRMFVzV1VGQlFUdERTRmhVTzBGSGFVSkRPMFZCUTBVc1lVRkJRVHRGUVVOQkxEaENRVUZCTzBOSVprZzdRVWR0UWs4N1JVRkRSU3hsUVVGQk8wTklha0pVTzBGSGMwSlBPMFZCUTBVc1pVRkJRVHREU0hCQ1ZEdEJSM2xDVHp0RlFVTkZMR1ZCUVVFN1EwaDJRbFE3UVVjMFFrODdSVUZEUlN4bFFVRkJPME5JTVVKVU8wRkhLMEpQTzBWQlEwVXNaVUZCUVR0RFNEZENWRHRCUjJ0RFR6dEZRVU5GTEdWQlFVRTdRMGhvUTFRN1FVZHpRME03UlVGRFJTeHZRa0ZCUVR0RlFVTkJMQ3RDUVVGQk8wTkljRU5JTzBGSGMwTkhPMFZCUTBVc1owSkJRVUU3UTBod1EwdzdRVWR6UTBzN1JVRkRSU3hUUVVGQk8wTkljRU5RTzBGSGRVTkxPMFZCUTBVc1VVRkJRVHREU0hKRFVEdEJSM2REU3p0RlFVTkZMRTlCUVVFN1EwaDBRMUE3UVVkNVEwczdSVUZEUlN4VlFVRkJPME5JZGtOUU8wRkhPRU5MT3p0RlFVVkZMSGxDUVVGQk8wVkJRMEVzVTBGQlFUdEZRVU5CTEc5RFFVRkJPMVZCUVVFc05FSkJRVUU3UTBnMVExQTdRVWNyUTBzN08wVkJSVVVzZDBKQlFVRTdSVUZEUVN4VlFVRkJPMFZCUTBFc2IwTkJRVUU3VlVGQlFTdzBRa0ZCUVR0RFNEZERVRHRCUjJ0RVV6dEZRVU5GTEZkQlFVRTdRMGhvUkZnN1FVZHRSRk03UlVGRFJTeFZRVUZCTzBOSWFrUllPMEZIYjBSVE8wVkJRMFVzVTBGQlFUdERTR3hFV0R0QlIzRkVVenRGUVVORkxGbEJRVUU3UTBodVJGZzdRVWMwUkVzN08wVkJSVVVzWVVGQlFUdEZRVU5CTERaQ1FVRkJPME5JTVVSUU8wRkhLMFJETzBWQlEwVXNWMEZCUVR0RFNEZEVTRHRCUzI1WFJEdEZRVU5GTEcxQ1FVRkJPMFZCUTBFc1YwRkJRVHRGUVVOQkxGVkJRVUU3UlVGRFFTeHhRMEZCUVR0RlFVTkJMR3REUVVGQk8xVkJRVUVzTUVKQlFVRTdSVUZEUVN4bFFVRkJPME5NY1ZkRU8wRkxibGRETzBWQlEwVXNaVUZCUVR0RlFVTkJMR0ZCUVVFN1JVRkRRU3hyUWtGQlFUdEZRVU5CTEdkQ1FVRkJPMFZCUTBFc2FVTkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMR2xDUVVGQk8wVkJRMEVzYVVKQlFVRTdRMHh4VjBnN1FVdHNWME03UlVGRFJTeHRRa0ZCUVR0RlFVTkJMRmRCUVVFN1JVRkRRU3hWUVVGQk8wVkJRMEVzYVVKQlFVRTdRMHh2VjBnN1FVdHFWME03T3p0RlFVZEZMRzFDUVVGQk8wVkJRMEVzVjBGQlFUdEZRVU5CTEZWQlFVRTdSVUZEUVN4WFFVRkJPMFZCUTBFc2MwSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RFRHMVhTRHRCUzJoWFF6dEZRVU5GTEdsQ1FVRkJPME5NYTFkSU8wRkxMMVpETzBWQlEwVXNhMEpCUVVFN1EweHBWMGc3UVVzNVZrTTdSVUZEUlN4VlFVRkJPMFZCUTBFc2EwSkJRVUU3UlVGRFFTeG5Ra0ZCUVR0RlFVTkJMR2xDUVVGQk8wTk1aMWRJTzBGTE4xWkRPMFZCUTBVc2JVSkJRVUU3UlVGRFFTeFhRVUZCTzBWQlEwRXNUMEZCUVR0RlFVTkJMRkZCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTERCQ1FVRkJPMFZCUTBFc0swSkJRVUU3UlVGRFFTeHJRMEZCUVR0VlFVRkJMREJDUVVGQk8wVkJRMEVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHRGUVVOQkxHbENRVUZCTzBOTUsxWklPMEZMTlZaRE8wVkROMFJCTEc5Q1FVRkJPMFZCUTBFc2QwSkJRVUU3UlVGRFFTeHBRa0ZCUVR0RlJEWkVSU3hsUVVGQk8wVkJRMEVzYVVKQlFVRTdRMHhuVjBnN1FVczVWa2M3T3p0RlFVZEZMSE5DUVVGQk8wVkJRMEVzV1VGQlFUdERUR2RYVER0QlN6ZFdSenRGUVVORkxHVkJRVUU3UTB3clZrdzdRVXN6VmtNN1JVRkRSU3h4UWtGQlFUdERURFpXU0R0QlMzaFdTenM3TzBWQlIwVXNaVUZCUVR0RlFVTkJMR2xDUVVGQk8wTk1NRlpRTzBGTGNsWkRPenRGUVVWRkxIRkNRVUZCTzBWQlFVRXNjVUpCUVVFN1JVRkJRU3hqUVVGQk8wVkJRMEVzYzBKQlFVRTdUVUZCUVN4clFrRkJRVHRGUVVOQkxEWkNRVUZCTzBWQlFVRXNPRUpCUVVFN1RVRkJRU3d5UWtGQlFUdFZRVUZCTEhWQ1FVRkJPMFZCUTBFc0swSkJRVUU3UlVGRFFTeFBRVUZCTzBWQlEwRXNhVUpCUVVFN1EweDFWa2c3UVV0d1ZrczdPenM3UlVGRlJTd3JRa0ZCUVR0VlFVRkJMSFZDUVVGQk8wTk1kMVpRTzBGTGNsWkxPenRGUVVORkxIRkNRVUZCTzAxQlFVRXNaVUZCUVR0RFRIZFdVRHRCUzNKV1N6czdSVUZEUlN4dlFrRkJRVHROUVVGQkxGbEJRVUU3VlVGQlFTeFJRVUZCTzBWQlEwRXNaVUZCUVR0RFRIZFdVRHRCUzI1V1F6dEZRVU5GTEdsQ1FVRkJPMFZCUTBFc2VVTkJRVUU3UTB4eFZrZzdRVXRzVmtNN1JVRkRSU3huUWtGQlFUdEZRVU5CTEdsQ1FVRkJPME5NYjFaSU8wRkxhbFpETzBWQlEwVXNZMEZCUVR0RFRHMVdTRHRCUzJoV1F6dEZRVU5GTEZOQlFVRTdRMHhyVmtnN1FVRkRSQ3hyUkVGQmEwUTdRVTg1Wkd4RU8wVkJRMFVzWjBKQlFVRTdSVUZEUVN4bFFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxHdERRVUZCTzFWQlFVRXNNRUpCUVVFN1JVRkRRU3hwUWtGQlFUdERVR2RsUkR0QlR6bGtRenRGU0VSQkxIZERRVUZCTzFWQlFVRXNaME5CUVVFN1JVZEhSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc1dVRkJRVHRGUVVOQkxHRkJRVUU3UlVGRFFTd3dRa0ZCUVR0RlFVTkJMRzFDUVVGQk8wVkJRMEVzSzBKQlFVRTdWVUZCUVN4MVFrRkJRVHRGUVVOQkxIVkNRVUZCTzBWQlEwRXNaMEpCUVVFN1JVRkRRU3h0UWtGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4cFFrRkJRVHREVUdkbFNEdEJUemxrUnp0RlFVTkZMR1ZCUVVFN1JVRkRRU3h6UWtGQlFUdERVR2RsVER0QlR6ZGtSenRGUVVORkxHTkJRVUU3UTFBclpFdzdRVTh4WkVjN096dEZRVWRGTEZsQlFVRTdSVUZEUVN4elFrRkJRVHREVURSa1REdEJUM3BrUnp0RlFVTkZMR1ZCUVVFN1ExQXlaRXc3UVU5MlpFTTdSVUZEUlN4dFFrRkJRVHRGUVVOQkxGZEJRVUU3UlVGRFFTeFRRVUZCTzBWQlEwRXNWVUZCUVR0RlFVTkJMRmxCUVVFN1JVRkRRU3hoUVVGQk8wVkJRMEVzZVVOQlFVRTdWVUZCUVN4cFEwRkJRVHRGUVVOQkxHMUNRVUZCTzBWQlEwRXNhVUpCUVVFN1ExQjVaRWc3UVU5d1pFczdSVUZEUlN4WlFVRkJPMFZCUTBFc01FSkJRVUU3UlVGRFFTeHpRa0ZCUVR0RFVITmtVRHRCVDNCa1R6dEZRVU5GTEZsQlFVRTdRMUJ6WkZRN1FVOW9aRXM3T3p0RlFVZEZMRmxCUVVFN1ExQnJaRkE3UVU4MVkwYzdSVUZEUlN4dlFrRkJRVHREVURoalREdEJUM1pqU3pzN096czdPenM3UlVGSlJTeHZRa0ZCUVR0RlFVTkJMRmxCUVVFN1ExQTJZMUE3UVU4elkwODdPenM3T3pzN08wVkJRMFVzV1VGQlFUdERVRzlrVkR0QlQyaGtTenM3UlVGRFJTd3dRa0ZCUVR0RFVHMWtVRHRCVHpsalF6czdSVUZGUlN4VlFVRkJPMFZCUTBFc2IwTkJRVUU3VlVGQlFTdzBRa0ZCUVR0RFVHZGtTRHRCVDI1a1F6czdSVUZOU1N4elFrRkJRVHREVUdsa1REdEJUemRqUXp0RlFVTkZMRlZCUVVFN1ExQXJZMGc3UVU4M1kwYzdSVUZEUlN4WFFVRkJPME5RSzJOTU8wRlBNMk5ETzBWQlEwVXNZVUZCUVR0RFVEWmpTRHRCVHpOalJ6dEZRVU5GTEdOQlFVRTdRMUEyWTB3N1FVOTZZME03TzBWQlJVVXNiME5CUVVFN1ZVRkJRU3cwUWtGQlFUdEZRVU5CTEZsQlFVRTdRMUF5WTBnN1FVOTRZME03UlVGRFJTeFRRVUZCTzBWQlEwRXNXVUZCUVR0RFVEQmpTRHRCVDNoalJ6dEZRVU5GTEdGQlFVRTdRMUF3WTB3N1FVOTBZME03UlVGRFJTeFRRVUZCTzBWQlEwRXNWMEZCUVR0RFVIZGpTRHRCVDNSalJ6dEZRVU5GTEZsQlFVRTdRMUIzWTB3N1FVOHZZa3M3T3pzN1JVRkRSU3hqUVVGQk8wTlFiMk5RTzBGQlEwUXNNa0pCUVRKQ08wRlJNMjFDTTBJN1JVRkRSU3hYUVVGQk8wVkJRMEVzV1VGQlFUdEZRVU5CTERKQ1FVRkJPME5TTm0xQ1JEdEJVVEZ0UWtRN1JVRkRSU3d5UWtGQlFUdERValJ0UWtRN1FWRjZiVUpFTzBWQlEwVXNjME5CUVVFN1JVRkRRU3d5UWtGQlFUdERVakp0UWtRN1FWRjRiVUpFTzBWQlEwVXNjME5CUVVFN1JVRkRRU3d5UWtGQlFUdERVakJ0UWtRN1FWRjJiVUpFTzBWQlEwVXNjME5CUVVFN1ExSjViVUpFTzBGUmRHMUNSRHRGUVVORkxITkRRVUZCTzBOU2QyMUNSQ0lzSW1acGJHVWlPaUp2ZFhSc2FXNWxMbU56Y3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklqcHliMjkwSUh0Y2JpQWdMUzF2ZFhSc2FXNWxMWHBKYm1SbGVEb2dNakF3TUR0Y2JpQWdMUzF2ZFhSc2FXNWxMWE4wYVdOcmVTMW9aV2xuYUhRNklERXdNQ1U3WEc0Z0lDMHRiM1YwYkdsdVpTMWphR0Z3ZEdWeWN5MTNhV1IwYURvZ01UQXdKVHRjYm4xY2JpSXNJanB5YjI5MElIdGNiaUFnTFMxdmRYUnNhVzVsTFhwSmJtUmxlRG9nTWpBd01EdGNiaUFnTFMxdmRYUnNhVzVsTFhOMGFXTnJlUzFvWldsbmFIUTZJREV3TUNVN1hHNGdJQzB0YjNWMGJHbHVaUzFqYUdGd2RHVnljeTEzYVdSMGFEb2dNVEF3SlR0Y2JuMWNiaThxSUQwOVBUMDlQVDA5UFQwZ1kyOXNiM0p6TG5Sb1pXMWxJQzBnNVorNjU2R0E2YUtjNklteTVZK1k2WWVQNlp1RzVaQ0lJRDA5UFQwOVBUMDlQVDBnS2k5Y2JpOHFLbHh1SUNvZ1pXeHNhWEJ6YVhNdWJHVnpjeUF0SU9hV2grYWNyT2VjZ2VlVnBTQnRhWGhwYm5nZzVZZTk1cFd3WEc0Z0tpQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNGdLaUJEY21WaGRHVmtJRUo1T2lCWllXOW9ZV2w0YVdGdlhHNGdLaUJWY0dSaGRHVTZJREl3TWpJdU15NHhNVnh1SUNvdlhHNHZLaUE5UFQwOVBUMGc1cGFINXB5czU1eUI1NVdsNVllOTVwV3dJRDA5UFQwOVBTQXFMMXh1THlvcVhHNGdLaUJ6YUdGa2IzY3ViR1Z6Y3lBdElPbVl0T1c5c2VhZ3QrVzhqK2l1dnVlOXJpQnRhWGhwYm5nZzVZZTk1cFd3WEc0Z0tpQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNGdLaUJEY21WaGRHVmtJRUo1T2lCWllXOW9ZV2w0YVdGdlhHNGdLaUJWY0dSaGRHVTZJREl3TWpJdU15NHlNRnh1SUNvdlhHNHZLaUE5UFQwOVBUMGc2WmkwNWIyeDVxQzM1YnlQNks2KzU3MnU1WWU5NXBXd0lEMDlQVDA5UFNBcUwxeHVMeW9nUFQwOVBUMDlQVDA5UFNCcFkyOXVMblJvWlcxbElDMGdjM1puSU9XYnZ1YWdoK2VhaE9hZ3QrVzhqeUE5UFQwOVBUMDlQVDA5SUNvdlhHNHViM1YwYkdsdVpTMXBZMjl1SUh0Y2JpQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0JrYVhOd2JHRjVPaUJwYm14cGJtVXRZbXh2WTJzN1hHNGdJSFpsY25ScFkyRnNMV0ZzYVdkdU9pQnRhV1JrYkdVN1hHNGdJSGRwWkhSb09pQXhaVzA3WEc0Z0lHaGxhV2RvZERvZ01XVnRPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRhV052Ymw5ZmMzWm5JSHRjYmlBZ2NHOXphWFJwYjI0NklHRmljMjlzZFhSbE8xeHVJQ0I2TFdsdVpHVjRPaUF5TzF4dUlDQjBiM0E2SURVd0pUdGNiaUFnYkdWbWREb2dOVEFsTzF4dUlDQjNhV1IwYURvZ01XVnRPMXh1SUNCb1pXbG5hSFE2SURGbGJUdGNiaUFnWm1sc2JEb2dZM1Z5Y21WdWRHTnZiRzl5TzF4dUlDQjBjbUZ1YzJadmNtMDZJSFJ5WVc1emJHRjBaU2d0TlRBbExDQXROVEFsS1R0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibjFjYmk1dmRYUnNhVzVsTFdobFlXUnBibWNnZTF4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUhvdGFXNWtaWGc2SURFN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWIzVjBiR2x1WlMxb1pXRmthVzVuWDE5aGJtTm9iM0lnZTF4dUlDQmthWE53YkdGNU9pQnViMjVsTzF4dWZWeHVMbTkxZEd4cGJtVXRhR1ZoWkdsdVoxOWZZVzVqYUc5eU9teHBibXNzWEc0dWIzVjBiR2x1WlMxb1pXRmthVzVuWDE5aGJtTm9iM0k2ZG1semFYUmxaQ3hjYmk1dmRYUnNhVzVsTFdobFlXUnBibWRmWDJGdVkyaHZjanBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqT1RrNU8xeHVJQ0IwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN1hHNTlYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSTZhRzkyWlhJZ2UxeHVJQ0JqYjJ4dmNqb2dJekZtT0dSa05qdGNibjFjYmk1dmRYUnNhVzVsTFdobFlXUnBibWM2YUc5MlpYSWdMbTkxZEd4cGJtVXRhR1ZoWkdsdVoxOWZZVzVqYUc5eUlIdGNiaUFnWkdsemNHeGhlVG9nYVc1c2FXNWxMV0pzYjJOck8xeHVmVnh1TG05MWRHeHBibVV0YUdWaFpHbHVaMTl6ZEdGeWREcG9iM1psY2lCN1hHNGdJRzkyWlhKbWJHOTNPaUIyYVhOcFlteGxPMXh1ZlZ4dUxtOTFkR3hwYm1VdGFHVmhaR2x1WjE5emRHRnlkQ0F1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSWdlMXh1SUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJSG90YVc1a1pYZzZJREk3WEc0Z0lIUnZjRG9nTlRBbE8xeHVJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZrb0xUVXdKU2s3WEc0Z0lHeGxablE2SUMweFpXMDdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWElnZTF4dUlDQndiM05wZEdsdmJqb2djbVZzWVhScGRtVTdYRzRnSUhvdGFXNWtaWGc2SUMweE8xeHVJQ0IwYjNBNklEQTdYRzRnSUd4bFpuUTZJREE3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnZDJsa2RHZzZJREV3TUNVN1hHNGdJR2hsYVdkb2REb2dNVEF3SlR0Y2JpQWdZbTk0TFhOcGVtbHVaem9nWW05eVpHVnlMV0p2ZUR0Y2JpQWdkbWx6YVdKcGJHbDBlVG9nYUdsa1pHVnVPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgxOXRiMlJoYkNCN1hHNGdJR0p2ZUMxemFHRmtiM2M2SURBZ01DQTJjSGdnTVhCNElDTmtZMlJtWlRZN1hHNGdJR1JwYzNCc1lYazZJR1pzWlhnN1hHNGdJR1pzWlhndFpHbHlaV04wYVc5dU9pQmpiMngxYlc0N1hHNGdJR1pzWlhndGQzSmhjRG9nYm05M2NtRndPMXh1SUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJSG90YVc1a1pYZzZJREl4TzF4dUlDQm9aV2xuYUhRNklERXdNQ1U3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3WEc0Z0lIUnlZVzV6YVhScGIyNHRaSFZ5WVhScGIyNDZJREF1TkhNN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDJobFlXUmxjaXhjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmYldGcGJpeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZabTl2ZEdWeUlIdGNiaUFnZDJsa2RHZzZJREV3TUNVN1hHNGdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZYMmhsWVdSbGNpeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZabTl2ZEdWeUlIdGNiaUFnWm14bGVDMXphSEpwYm1zNklEQTdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDNScGRHeGxMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTl0WVdsdUxGeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgxOW1iMjkwWlhJZ2UxeHVJQ0J3WVdSa2FXNW5PaUF3SURFMmNIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWDJobFlXUmxjaXhjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlmZEdsMGJHVWdlMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lHMWhjbWRwYmpvZ01DQmhkWFJ2TzF4dUlDQm9aV2xuYUhRNklEVXljSGc3WEc0Z0lHeHBibVV0YUdWcFoyaDBPaUExTW5CNE8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5MGFYUnNaU0I3WEc0Z0lHWnZiblF0YzJsNlpUb2dNVFp3ZUR0Y2JpQWdabTl1ZEMxM1pXbG5hSFE2SURRd01EdGNiaUFnYldGeVoybHVPaUF3SURFMmNIZzdYRzRnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzRnSUdKdmNtUmxjaTFpYjNSMGIyMDZJREZ3ZUNCemIyeHBaQ0FqWkdOa1ptVTJPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5amJHOXpaU0I3WEc0Z0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnZWkxcGJtUmxlRG9nTWp0Y2JpQWdkRzl3T2lBMU1DVTdYRzRnSUhKcFoyaDBPaUF4TW5CNE8xeHVJQ0IzYVdSMGFEb2dNakJ3ZUR0Y2JpQWdhR1ZwWjJoME9pQXlNSEI0TzF4dUlDQnNhVzVsTFdobGFXZG9kRG9nTWpCd2VEdGNiaUFnWTI5c2IzSTZJQ001T1RrN1hHNGdJR1p2Ym5RdGMybDZaVG9nTWpCd2VEdGNiaUFnZEdWNGRDMWhiR2xuYmpvZ1kyVnVkR1Z5TzF4dUlDQmpkWEp6YjNJNklIQnZhVzUwWlhJN1hHNGdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV1NndE5UQWxLVHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZZMnh2YzJVZ0xtOTFkR3hwYm1VdGFXTnZiaUI3WEc0Z0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnZWkxcGJtUmxlRG9nTWp0Y2JpQWdkRzl3T2lBd08xeHVJQ0JzWldaME9pQXdPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDE5amJHOXpaVHBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqTmpZMk8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMTl0WVdsdUlIdGNiaUFnWm14bGVEb2dNVHRjYmlBZ2IzWmxjbVpzYjNjNklHRjFkRzg3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlgyWnZiM1JsY2lCN1hHNGdJRzFoY21kcGJqb2dNQ0JoZFhSdk8xeHVJQ0IwWlhoMExXRnNhV2R1T2lCeWFXZG9kRHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWZiM1psY214aGVTQjdYRzRnSUdOdmJuUmxiblE2SUNjbk8xeHVJQ0J3YjNOcGRHbHZiam9nY21Wc1lYUnBkbVU3WEc0Z0lIb3RhVzVrWlhnNklERTdYRzRnSUhSdmNEb2dNRHRjYmlBZ2JHVm1kRG9nTUR0Y2JpQWdkMmxrZEdnNklERXdNQ1U3WEc0Z0lHaGxhV2RvZERvZ01UQXdKVHRjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWm1aanRjYmlBZ2IzQmhZMmwwZVRvZ01DNHhPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBhVzU1TEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGFXNTVJSHRjYmlBZ2QybGtkR2c2SURJNE1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDNXZkWFJzYVc1bExXUnlZWGRsY2w5dGFXNXBMRnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMngwY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDl0YVc1cElIdGNiaUFnZDJsa2RHZzZJRFE0TUhCNE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkM1dmRYUnNhVzVsTFdSeVlYZGxjbDl6YldGc2JDeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXNkSEl1YjNWMGJHbHVaUzFrY21GM1pYSmZjMjFoYkd3Z2UxeHVJQ0IzYVdSMGFEb2dOVFF3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZjblJzTG05MWRHeHBibVV0WkhKaGQyVnlYM0psWjNWc1lYSXNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiSFJ5TG05MWRHeHBibVV0WkhKaGQyVnlYM0psWjNWc1lYSWdlMXh1SUNCM2FXUjBhRG9nTmpnd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0xtOTFkR3hwYm1VdFpISmhkMlZ5WDIxbFpHbDFiU3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYldWa2FYVnRJSHRjYmlBZ2QybGtkR2c2SURjeU1IQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKMGJDNXZkWFJzYVc1bExXUnlZWGRsY2w5c1lYSm5aU3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYkdGeVoyVWdlMXh1SUNCM2FXUjBhRG9nT1RZd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmY25Sc0lIdGNiaUFnWW05eVpHVnlMV3hsWm5RNklERndlQ0J6YjJ4cFpDQWpaR05rWm1VMk8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYM0owYkM1dmRYUnNhVzVsTFdSeVlYZGxjbDkwYVc1NUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lISnBaMmgwT2lBdE1qa3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMXBibWt1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnY21sbmFIUTZJQzAwT1RCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl5ZEd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmYzIxaGJHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdjbWxuYUhRNklDMDFOVEJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3d1YjNWMGJHbHVaUzFrY21GM1pYSmZjbVZuZFd4aGNpNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQnlhV2RvZERvZ0xUWTVNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRaV1JwZFcwdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2NtbG5hSFE2SUMwM016QndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3ViM1YwYkdsdVpTMWtjbUYzWlhKZmJHRnlaMlV1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnY21sbmFIUTZJQzA1TnpCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlzZEhJZ2UxeHVJQ0JpYjNKa1pYSXRjbWxuYUhRNklERndlQ0J6YjJ4cFpDQWpaR05rWm1VMk8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMngwY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDkwYVc1NUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lHeGxablE2SUMweU9UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISXViM1YwYkdsdVpTMWtjbUYzWlhKZmJXbHVhUzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0JzWldaME9pQXRORGt3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiSFJ5TG05MWRHeHBibVV0WkhKaGQyVnlYM050WVd4c0xtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lHeGxablE2SUMwMU5UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5c2RISXViM1YwYkdsdVpTMWtjbUYzWlhKZmNtVm5kV3hoY2k1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCc1pXWjBPaUF0Tmprd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUxtOTFkR3hwYm1VdFpISmhkMlZ5WDIxbFpHbDFiUzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0JzWldaME9pQXROek13Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiSFJ5TG05MWRHeHBibVV0WkhKaGQyVnlYMnhoY21kbExtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lHeGxablE2SUMwNU56QndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwSUh0Y2JpQWdiR1ZtZERvZ01EdGNiaUFnZDJsa2RHZzZJREV3TUNVN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpTG05MWRHeHBibVV0WkhKaGQyVnlYM1JwYm5rc1hHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUnBibmtnZTF4dUlDQm9aV2xuYUhRNklESTBNSEI0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgzUjBZaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOXRhVzVwTEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJKMGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5dGFXNXBJSHRjYmlBZ2FHVnBaMmgwT2lBek1qQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXViM1YwYkdsdVpTMWtjbUYzWlhKZmMyMWhiR3dzWEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmWW5SMExtOTFkR3hwYm1VdFpISmhkMlZ5WDNOdFlXeHNJSHRjYmlBZ2FHVnBaMmgwT2lBek5qQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXViM1YwYkdsdVpTMWtjbUYzWlhKZmNtVm5kV3hoY2l4Y2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5aWRIUXViM1YwYkdsdVpTMWtjbUYzWlhKZmNtVm5kV3hoY2lCN1hHNGdJR2hsYVdkb2REb2dOREF3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpTG05MWRHeHBibVV0WkhKaGQyVnlYMjFsWkdsMWJTeGNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZiV1ZrYVhWdElIdGNiaUFnYUdWcFoyaDBPaUEwTkRCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJdWIzVjBiR2x1WlMxa2NtRjNaWEpmYkdGeVoyVXNYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwTG05MWRHeHBibVV0WkhKaGQyVnlYMnhoY21kbElIdGNiaUFnYUdWcFoyaDBPaUEwT0RCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJZ2UxeHVJQ0JpYjNKa1pYSXRZbTkwZEc5dE9pQXhjSGdnYzI5c2FXUWdJMlJqWkdabE5qdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDkwZEdJdWIzVjBiR2x1WlMxa2NtRjNaWEpmZEdsdWVTNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQjBiM0E2SUMweU5UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXViM1YwYkdsdVpTMWtjbUYzWlhKZmJXbHVhUzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0IwYjNBNklDMHpNekJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOTBkR0l1YjNWMGJHbHVaUzFrY21GM1pYSmZjMjFoYkd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ2RHOXdPaUF0TXpjd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmZEhSaUxtOTFkR3hwYm1VdFpISmhkMlZ5WDNKbFozVnNZWEl1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnZEc5d09pQXROREV3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpTG05MWRHeHBibVV0WkhKaGQyVnlYMjFsWkdsMWJTNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQjBiM0E2SUMwME5UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5MGRHSXViM1YwYkdsdVpTMWtjbUYzWlhKZmJHRnlaMlV1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnZEc5d09pQXRORGt3Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZZblIwSUh0Y2JpQWdkRzl3T2lCcGJtbDBhV0ZzTzF4dUlDQmliM0prWlhJdGRHOXdPaUF4Y0hnZ2MyOXNhV1FnSTJSalpHWmxOanRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5aWRIUXViM1YwYkdsdVpTMWtjbUYzWlhKZmRHbHVlUzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0JpYjNSMGIyMDZJQzB5TlRCd2VEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDlpZEhRdWIzVjBiR2x1WlMxa2NtRjNaWEpmYldsdWFTNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQmliM1IwYjIwNklDMHpNekJ3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFF1YjNWMGJHbHVaUzFrY21GM1pYSmZjMjFoYkd3dWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ1ltOTBkRzl0T2lBdE16Y3djSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSmxaM1ZzWVhJdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ1ltOTBkRzl0T2lBdE5ERXdjSGc3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBMbTkxZEd4cGJtVXRaSEpoZDJWeVgyMWxaR2wxYlM1dmRYUnNhVzVsTFdSeVlYZGxjbDlqYkc5elpXUWdlMXh1SUNCaWIzUjBiMjA2SUMwME5UQndlRHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5aWRIUXViM1YwYkdsdVpTMWtjbUYzWlhKZmJHRnlaMlV1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnWW05MGRHOXRPaUF0TkRrd2NIZzdYRzU5WEc0dWIzVjBiR2x1WlMxa2NtRjNaWEpmYjNCbGJtVmtJSHRjYmlBZ2RtbHphV0pwYkdsMGVUb2dkbWx6YVdKc1pUdGNiaUFnZWkxcGJtUmxlRG9nZG1GeUtDMHRiM1YwYkdsdVpTMTZTVzVrWlhncE8xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMjl3Wlc1bFpDNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hHNGdJSEJ2YzJsMGFXOXVPaUJtYVhobFpEdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Y0dWdVpXUXViM1YwYkdsdVpTMWtjbUYzWlhKZmNuUnNJSHRjYmlBZ2NtbG5hSFE2SURBN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiM0JsYm1Wa0xtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpQjdYRzRnSUd4bFpuUTZJREE3WEc1OVhHNHViM1YwYkdsdVpTMWtjbUYzWlhKZmIzQmxibVZrTG05MWRHeHBibVV0WkhKaGQyVnlYM1IwWWlCN1hHNGdJSFJ2Y0RvZ01EdGNibjFjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Y0dWdVpXUXViM1YwYkdsdVpTMWtjbUYzWlhKZlluUjBJSHRjYmlBZ1ltOTBkRzl0T2lBd08xeHVmVnh1TG05MWRHeHBibVV0WkhKaGQyVnlYMjltWm5ObGRDNXZkWFJzYVc1bExXUnlZWGRsY2w5eWRHd3NYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiMlptYzJWMExtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpQjdYRzRnSUdobGFXZG9kRG9nWTJGc1l5Z3hNREFsSUMwZ05HVnRLVHRjYmlBZ2RHOXdPaUExTUNVN1hHNGdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV1NndE5UQWxLVHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5dlptWnpaWFF1YjNWMGJHbHVaUzFrY21GM1pYSmZkSFJpTEZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5bVpuTmxkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFFnZTF4dUlDQjNhV1IwYURvZ1kyRnNZeWd4TURBbElDMGdOR1Z0S1R0Y2JpQWdiR1ZtZERvZ05UQWxPMXh1SUNCMGNtRnVjMlp2Y20wNklIUnlZVzV6YkdGMFpWZ29MVFV3SlNrN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiMlptYzJWMExtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXlkR3dnZTF4dUlDQnlhV2RvZERvZ01tVnRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFpISmhkMlZ5WDI5bVpuTmxkQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOXZjR1Z1WldRdWIzVjBiR2x1WlMxa2NtRjNaWEpmYkhSeUlIdGNiaUFnYkdWbWREb2dNbVZ0TzF4dWZWeHVMbTkxZEd4cGJtVXRaSEpoZDJWeVgyOW1abk5sZEM1dmRYUnNhVzVsTFdSeVlYZGxjbDl2Y0dWdVpXUXViM1YwYkdsdVpTMWtjbUYzWlhKZmRIUmlJSHRjYmlBZ2RHOXdPaUF5WlcwN1hHNTlYRzR1YjNWMGJHbHVaUzFrY21GM1pYSmZiMlptYzJWMExtOTFkR3hwYm1VdFpISmhkMlZ5WDI5d1pXNWxaQzV2ZFhSc2FXNWxMV1J5WVhkbGNsOWlkSFFnZTF4dUlDQmliM1IwYjIwNklESmxiVHRjYm4xY2JpNXZkWFJzYVc1bExXUnlZWGRsY2w5aGRYUnZMbTkxZEd4cGJtVXRaSEpoZDJWeVgzSjBiQ3hjYmk1dmRYUnNhVzVsTFdSeVlYZGxjbDloZFhSdkxtOTFkR3hwYm1VdFpISmhkMlZ5WDJ4MGNpQjdYRzRnSUdobGFXZG9kRG9nWVhWMGJ6dGNiaUFnYldGNExXaGxhV2RvZERvZ1kyRnNZeWd4TURBbElDMGdOR1Z0S1R0Y2JuMWNiaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOW1kV3hzSUh0Y2JpQWdjR0ZrWkdsdVp6b2dNRHRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKeklIdGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXhPMXh1SUNCdFlYSm5hVzQ2SURBN1hHNGdJSGRwWkhSb09pQjJZWElvTFMxdmRYUnNhVzVsTFdOb1lYQjBaWEp6TFhkcFpIUm9LVHRjYmlBZ2RISmhibk5wZEdsdmJpMWtkWEpoZEdsdmJqb2dNQzR6Y3p0Y2JpQWdiM1psY21ac2IzYzZJR0YxZEc4N1hHNTlYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmZEdsMGJHVWdlMXh1SUNCdFlYSm5hVzQ2SURBZ01UWndlRHRjYmlBZ2FHVnBaMmgwT2lBME1IQjRPMXh1SUNCc2FXNWxMV2hsYVdkb2REb2dOREJ3ZUR0Y2JpQWdjR0ZrWkdsdVp6b2dNQ0F4Tm5CNE8xeHVJQ0JpYjNKa1pYSXRZbTkwZEc5dE9pQXhjSGdnYzI5c2FXUWdJMlJqWkdabE5qdGNiaUFnWm05dWRDMXphWHBsT2lBeE5uQjRPMXh1SUNCbWIyNTBMWGRsYVdkb2REb2dOREF3TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVmVnh1TG05MWRHeHBibVV0WTJoaGNIUmxjbk5mWDIxaGFXNGdlMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOXNhWE4wTEZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgzTjFZbXBsWTNRc1hHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZhWFJsYlNCN1hHNGdJSEJ2YzJsMGFXOXVPaUJ5Wld4aGRHbDJaVHRjYmlBZ2VpMXBibVJsZURvZ01qdGNiaUFnYldGeVoybHVPaUF3TzF4dUlDQndZV1JrYVc1bk9pQXdPMXh1SUNCc2FYTjBMWE4wZVd4bExYUjVjR1U2SUc1dmJtVTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZiR2x6ZENCN1hHNGdJSEJoWkdScGJtYzZJREF1TldWdElEQTdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmMzVmlhbVZqZENCN1hHNGdJSEJoWkdScGJtY3RiR1ZtZERvZ01XVnRPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgybDBaVzBnZTF4dUlDQnRZWEpuYVc0NklEQTdYRzRnSUd4cGJtVXRhR1ZwWjJoME9pQXpNSEI0TzF4dUlDQm1iMjUwTFhOcGVtVTZJREV6Y0hnN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmNHeGhZMlZvYjJ4a1pYSWdlMXh1SUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lIUnZjRG9nTUR0Y2JpQWdiR1ZtZERvZ01EdGNiaUFnZDJsa2RHZzZJREV3TUNVN1hHNGdJR2hsYVdkb2REb2dNekJ3ZUR0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlkzWmpobU9UdGNiaUFnWW05eVpHVnlMV3hsWm5RNklESndlQ0J6YjJ4cFpDQWpNRFU0T1RReU8xeHVJQ0IwY21GdWMybDBhVzl1TFdSMWNtRjBhVzl1T2lBd0xqSnpPMXh1SUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMkZ1WTJodmNpQjdYRzRnSUhkb2FYUmxMWE53WVdObE9pQnViM2R5WVhBN1hHNGdJSFJsZUhRdGIzWmxjbVpzYjNjNklHVnNiR2x3YzJsek8xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1SUNCa2FYTndiR0Y1T2lCaWJHOWphenRjYmlBZ2NHRmtaR2x1WnpvZ01DQXhMalZsYlR0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSTZiR2x1YXl4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWhibU5vYjNJNmRtbHphWFJsWkN4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWhibU5vYjNJNmFHOTJaWElnZTF4dUlDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3WEc0Z0lHTnZiRzl5T2lBak5UVTFPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlgyRnVZMmh2Y2pwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBak1EVTRPVFF5TzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZYMk52WkdVZ2UxeHVJQ0J3WVdSa2FXNW5MWEpwWjJoME9pQXdMalZsYlR0Y2JuMWNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMkZqZEdsMlpTNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWhibU5vYjNJNmJHbHVheXhjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJGamRHbDJaUzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTloYm1Ob2IzSTZkbWx6YVhSbFpDeGNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMkZqZEdsMlpTNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgxOWhibU5vYjNJNmFHOTJaWElnZTF4dUlDQmpiMnh2Y2pvZ0l6QTFPRGswTWp0Y2JpQWdabTl1ZEMxM1pXbG5hSFE2SURRd01EdGNibjFjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDNOMGFXTnJlU3hjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJacGVHVmtJSHRjYmlBZ1pHbHpjR3hoZVRvZ1pteGxlRHRjYmlBZ1pteGxlQzEzY21Gd09pQnViM2R5WVhBN1hHNGdJR1pzWlhndFpHbHlaV04wYVc5dU9pQmpiMngxYlc0N1hHNGdJSG90YVc1a1pYZzZJSFpoY2lndExXOTFkR3hwYm1VdGVrbHVaR1Y0S1R0Y2JpQWdkRzl3T2lBd08xeHVJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZmMzUnBZMnQ1SUM1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5MGFYUnNaU3hjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJacGVHVmtJQzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTkwYVhSc1pTeGNiaTV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYM04wYVdOcmVTQXViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOWZiV0ZwYml4Y2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgyWnBlR1ZrSUM1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDE5dFlXbHVJSHRjYmlBZ1ltOTRMWE5wZW1sdVp6b2dZbTl5WkdWeUxXSnZlRHRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgzTjBhV05yZVNBdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmRHbDBiR1VzWEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5bWFYaGxaQ0F1YjNWMGJHbHVaUzFqYUdGd2RHVnljMTlmZEdsMGJHVWdlMXh1SUNCbWJHVjRMWE5vY21sdWF6b2dNRHRjYm4xY2JpNXZkWFJzYVc1bExXTm9ZWEIwWlhKelgzTjBhV05yZVNBdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZmJXRnBiaXhjYmk1dmRYUnNhVzVsTFdOb1lYQjBaWEp6WDJacGVHVmtJQzV2ZFhSc2FXNWxMV05vWVhCMFpYSnpYMTl0WVdsdUlIdGNiaUFnWm14bGVEb2dNVHRjYmlBZ2IzWmxjbVpzYjNjNklHRjFkRzg3WEc1OVhHNHViM1YwYkdsdVpTMWphR0Z3ZEdWeWMxOXpkR2xqYTNrZ2UxeHVJQ0J3YjNOcGRHbHZiam9nYzNScFkydDVPMXh1SUNCdFlYZ3RhR1ZwWjJoME9pQjJZWElvTFMxdmRYUnNhVzVsTFhOMGFXTnJlUzFvWldsbmFIUXBPMXh1ZlZ4dUxtOTFkR3hwYm1VdFkyaGhjSFJsY25OZlptbDRaV1FnZTF4dUlDQndiM05wZEdsdmJqb2dabWw0WldRN1hHNGdJRzFoZUMxb1pXbG5hSFE2SURFd01DVTdYRzU5WEc0dWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5b2FXUmtaVzRnZTF4dUlDQmthWE53YkdGNU9pQnViMjVsTzF4dWZWeHVMbTkxZEd4cGJtVXRZMmhoY0hSbGNuTmZabTlzWkdWa0lIdGNiaUFnZDJsa2RHZzZJREE3WEc1OVhHNHZLaUE5UFQwOVBUMDlQVDA5SUdKMWRIUnZibk11ZEdobGJXVWdMU0RtaklucGtxN2xyN3pvaUtybW9MZmx2SThnUFQwOVBUMDlQVDA5UFNBcUwxeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNpQjdYRzRnSUhCdmMybDBhVzl1T2lCbWFYaGxaRHRjYmlBZ2VpMXBibVJsZURvZ09UazVPVGs3WEc0Z0lHMWhjbWRwYmpvZ01EdGNiaUFnZEhKaGJuTnBkR2x2Ymkxa2RYSmhkR2x2YmpvZ01DNHpjenRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpQjdYRzRnSUdKdmVDMXphR0ZrYjNjNklEQWdNQ0EyY0hnZ01YQjRJQ05rWTJSbVpUWTdYRzRnSUhCdmMybDBhVzl1T2lCeVpXeGhkR2wyWlR0Y2JpQWdlaTFwYm1SbGVEb2dNVHRjYmlBZ2JXRnlaMmx1T2lBeE1IQjRPMXh1SUNCM2FXUjBhRG9nTXpad2VEdGNiaUFnYUdWcFoyaDBPaUF6Tm5CNE8xeHVJQ0JpYjNKa1pYSTZJREZ3ZUNCemIyeHBaQ0FqWkdOa1ptVTJPMXh1SUNCaWIzSmtaWEl0Y21Ga2FYVnpPaUF6Y0hnN1hHNGdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hHNGdJR0poWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN1hHNGdJR04xY25OdmNqb2djRzlwYm5SbGNqdGNiaUFnZEdWNGRDMWhiR2xuYmpvZ1kyVnVkR1Z5TzF4dUlDQmpiMnh2Y2pvZ0l6VTFOVHRjYmlBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJqcG9iM1psY2lCN1hHNGdJR052Ykc5eU9pQWpNRFU0T1RReU8xeHVJQ0JpYjNKa1pYSXRZMjlzYjNJNklDTXdOVGc1TkRJN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNHVhR2xrWlNCN1hHNGdJR1JwYzNCc1lYazZJRzV2Ym1VN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTloYm1Ob2IzSTZiR2x1YXl4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNNU9UazdYRzRnSUhSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqTURVNE9UUXlPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZmFXTnZiaUI3WEc0Z0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnZWkxcGJtUmxlRG9nTWp0Y2JpQWdkRzl3T2lBMU1DVTdYRzRnSUd4bFpuUTZJRFV3SlR0Y2JpQWdkMmxrZEdnNklESXdjSGc3WEc0Z0lHaGxhV2RvZERvZ01qQndlRHRjYmlBZ2RISmhibk5tYjNKdE9pQjBjbUZ1YzJ4aGRHVW9MVFV3SlN3Z0xUVXdKU2s3WEc0Z0lHWnBiR3c2SUdOMWNuSmxiblJqYjJ4dmNqdGNiaUFnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZllXTjBhWFpsTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1kyOXNiM0k2SUNObVptWTdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNNd05UZzVOREk3WEc0Z0lHSnZjbVJsY2kxamIyeHZjam9nSXpBMU9EazBNanRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZllXTjBhWFpsTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVPbWh2ZG1WeUlIdGNiaUFnWTI5c2IzSTZJQ05tWm1ZN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMkZqZEdsMlpTQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmJHbHVheXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWVdOMGFYWmxJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcDJhWE5wZEdWa0xGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWhZM1JwZG1VZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNObVptWTdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDNKdmRXNWtaV1F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCaWIzSmtaWEl0Y21Ga2FYVnpPaUF4T0hCNE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcHNhVzVyTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2YkdsdWF5eGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmRtbHphWFJsWkN4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlpHbHpZV0pzWldRZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T25acGMybDBaV1FzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWVc1amFHOXlPbWh2ZG1WeUxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWthWE5oWW14bFpDQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmFHOTJaWElzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQ0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCamRYSnpiM0k2SUc1dmRDMWhiR3h2ZDJWa08xeHVJQ0JqYjJ4dmNqb2dJems1T1R0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmJHbHVhenBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9teHBibXM2YUc5MlpYSXNYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9uWnBjMmwwWldRNmFHOTJaWElzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanAyYVhOcGRHVmtPbWh2ZG1WeUxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWthWE5oWW14bFpDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwb2IzWmxjanBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9taHZkbVZ5T21odmRtVnlMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJqcG9iM1psY2l4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlpHbHpZV0pzWldRZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZlluVjBkRzl1T21odmRtVnlJSHRjYmlBZ1kyOXNiM0k2SUNNNU9UazdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJScGMyRmliR1ZrTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQ0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBalpqVm1OV1kxTzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOTBkR0lzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJKMGRDQjdYRzRnSUd4bFpuUTZJRFV3SlR0Y2JpQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZZS0MwMU1DVXBPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5MGRHSWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUxGeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWlkSFFnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1pHbHpjR3hoZVRvZ2FXNXNhVzVsTFdKc2IyTnJPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5MGRHSWdlMXh1SUNCMGIzQTZJREV5Y0hnN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYM1IwWWk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYUdsa1pHVnVJSHRjYmlBZ2RHOXdPaUF0TlRad2VEdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWW5SMElIdGNiaUFnWW05MGRHOXRPaUF4TW5CNE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlpZEhRdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEc0Z0lHSnZkSFJ2YlRvZ0xUVTJjSGc3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzSjBiQ3hjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYkhSeUlIdGNiaUFnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWktDMDFNQ1VwTzF4dUlDQjNhV1IwYURvZ05UWndlRHRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmNuUnNJSHRjYmlBZ2RHOXdPaUExTUNVN1hHNGdJSEpwWjJoME9pQXhNbkI0TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOXlkR3d1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMmhwWkdSbGJpQjdYRzRnSUhKcFoyaDBPaUF0T0Rad2VEdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYkhSeUlIdGNiaUFnZEc5d09pQTFNQ1U3WEc0Z0lHeGxablE2SURFeWNIZzdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJ4MGNpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmFHbGtaR1Z1SUh0Y2JpQWdiR1ZtZERvZ0xUZzJjSGc3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzUjBZaUF1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYml4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmNuUnNJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmFHbGtaR1Z1TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5aWRIUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJ4MGNpQXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEc0Z0lHUnBjM0JzWVhrNklHNXZibVU3WEc1OVhHNHZLaUE5UFQwOVBTQlRZM0p2Ykd4aVlYSWdQVDA5UFQwZ0tpOWNiam82TFhkbFltdHBkQzF6WTNKdmJHeGlZWElnZTF4dUlDQjNhV1IwYURvZ04zQjRPMXh1SUNCb1pXbG5hSFE2SURkd2VEdGNiaUFnTFhkbFltdHBkQzFpYjNKa1pYSXRjbUZrYVhWek9pQTFjSGc3WEc1OVhHNDZPaTEzWldKcmFYUXRjMk55YjJ4c1ltRnlMWFJ5WVdOckxYQnBaV05sSUh0Y2JpQWdMWGRsWW10cGRDMWliM0prWlhJdGNtRmthWFZ6T2lBMWNIZzdYRzU5WEc0Nk9pMTNaV0pyYVhRdGMyTnliMnhzWW1GeUxYUm9kVzFpT25abGNuUnBZMkZzSUh0Y2JpQWdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2djbWRpWVNnd0xDQXdMQ0F3TENBd0xqSTFLVHRjYmlBZ0xYZGxZbXRwZEMxaWIzSmtaWEl0Y21Ga2FYVnpPaUExY0hnN1hHNTlYRzQ2T2kxM1pXSnJhWFF0YzJOeWIyeHNZbUZ5TFhSb2RXMWlPbWh2Y21sNmIyNTBZV3dnZTF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQnlaMkpoS0RBc0lEQXNJREFzSURBdU1qVXBPMXh1SUNBdGQyVmlhMmwwTFdKdmNtUmxjaTF5WVdScGRYTTZJRFZ3ZUR0Y2JuMWNiam82TFhkbFltdHBkQzF6WTNKdmJHeGlZWEk2YUc5MlpYSWdlMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lCeVoySmhLREFzSURBc0lEQXNJREF1TVRVcE8xeHVmVnh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2kxMGFIVnRZanBvYjNabGNpQjdYRzRnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUhKblltRW9NQ3dnTUN3Z01Dd2dNQzR6TlNrN1hHNTlYRzRpTENJdktpQTlQVDA5UFQwOVBUMDlJR2xqYjI0dWRHaGxiV1VnTFNCemRtY2c1WnUrNXFDSDU1cUU1cUMzNWJ5UElEMDlQVDA5UFQwOVBUMGdLaTljYmk1dmRYUnNhVzVsTFdsamIyNGdlMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lHUnBjM0JzWVhrNklHbHViR2x1WlMxaWJHOWphenRjYmlBZ2RtVnlkR2xqWVd3dFlXeHBaMjQ2SUcxcFpHUnNaVHRjYmlBZ2QybGtkR2c2SURGbGJUdGNiaUFnYUdWcFoyaDBPaUF4WlcwN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzVjYmlBZ0psOWZjM1puSUh0Y2JpQWdJQ0J3YjNOcGRHbHZiam9nWVdKemIyeDFkR1U3WEc0Z0lDQWdlaTFwYm1SbGVEb2dNanRjYmlBZ0lDQjBiM0E2SURVd0pUdGNiaUFnSUNCc1pXWjBPaUExTUNVN1hHNGdJQ0FnZDJsa2RHZzZJREZsYlR0Y2JpQWdJQ0JvWldsbmFIUTZJREZsYlR0Y2JpQWdJQ0JtYVd4c09pQmpkWEp5Wlc1MFkyOXNiM0k3WEc0Z0lDQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1VvTFRVd0pTd2dMVFV3SlNrN1hHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYmlBZ2ZWeHVmVnh1SWl3aVFHbHRjRzl5ZENBbkxpOWpiMnh2Y25Nbk8xeHVYRzR1YjNWMGJHbHVaUzFvWldGa2FXNW5JSHRjYmlBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHVJQ0I2TFdsdVpHVjRPaUF4TzF4dUlDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVYRzRnSUNaZlgyRnVZMmh2Y2lCN1hHNGdJQ0FnWkdsemNHeGhlVG9nYm05dVpUdGNibHh1SUNBZ0lDWTZiR2x1YXl4Y2JpQWdJQ0FtT25acGMybDBaV1FzWEc0Z0lDQWdKanBvYjNabGNpQjdYRzRnSUNBZ0lDQmpiMnh2Y2pvZ1FHWnZkWEowYUY5MFpYaDBYMk52Ykc5eU8xeHVJQ0FnSUNBZ2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDWTZhRzkyWlhJZ2UxeHVJQ0FnSUNBZ1kyOXNiM0k2SUVCd2NtbHRZWEo1WDJOdmJHOXlPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQ1k2YUc5MlpYSWdlMXh1SUNBZ0lDNXZkWFJzYVc1bExXaGxZV1JwYm1kZlgyRnVZMmh2Y2lCN1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDl6ZEdGeWRDQjdYRzRnSUNBZ0pqcG9iM1psY2lCN1hHNGdJQ0FnSUNCdmRtVnlabXh2ZHpvZ2RtbHphV0pzWlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F1YjNWMGJHbHVaUzFvWldGa2FXNW5YMTloYm1Ob2IzSWdlMXh1SUNBZ0lDQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNBZ0lDQWdlaTFwYm1SbGVEb2dNanRjYmlBZ0lDQWdJSFJ2Y0RvZ05UQWxPMXh1SUNBZ0lDQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZaS0MwMU1DVXBPMXh1SUNBZ0lDQWdiR1ZtZERvZ0xURmxiVHRjYmlBZ0lDQjlYRzRnSUgxY2JuMWNiaUlzSWtCcGJYQnZjblFnSnk0dmRtRnlhV0ZpYkdWekp6dGNia0JwYlhCdmNuUWdKeTR2WTI5c2IzSnpKenRjYmtCcGJYQnZjblFnSnk0dmMyaGhaRzkzSnp0Y2JseHVMbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNiaUFnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQjZMV2x1WkdWNE9pQXRNVHRjYmlBZ2RHOXdPaUF3TzF4dUlDQnNaV1owT2lBd08xeHVJQ0J0WVhKbmFXNDZJREE3WEc0Z0lIZHBaSFJvT2lBeE1EQWxPMXh1SUNCb1pXbG5hSFE2SURFd01DVTdYRzRnSUdKdmVDMXphWHBwYm1jNklHSnZjbVJsY2kxaWIzZzdYRzRnSUhacGMybGlhV3hwZEhrNklHaHBaR1JsYmp0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibHh1SUNBbVgxOXRiMlJoYkNCN1hHNGdJQ0FnTG5Ob1lXUnZkMTlzYVdkb2RGOXlaV2QxYkdGeUtDazdYRzRnSUNBZ1pHbHpjR3hoZVRvZ1pteGxlRHRjYmlBZ0lDQm1iR1Y0TFdScGNtVmpkR2x2YmpvZ1kyOXNkVzF1TzF4dUlDQWdJR1pzWlhndGQzSmhjRG9nYm05M2NtRndPMXh1SUNBZ0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNiaUFnSUNCNkxXbHVaR1Y0T2lBeU1UdGNiaUFnSUNCb1pXbG5hSFE2SURFd01DVTdYRzRnSUNBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FIZG9hWFJsTzF4dUlDQWdJSFJ5WVc1emFYUnBiMjR0WkhWeVlYUnBiMjQ2SURBdU5ITTdYRzRnSUNBZ2IzWmxjbVpzYjNjNklHaHBaR1JsYmp0Y2JpQWdmVnh1WEc0Z0lDWmZYMmhsWVdSbGNpeGNiaUFnSmw5ZmJXRnBiaXhjYmlBZ0psOWZabTl2ZEdWeUlIdGNiaUFnSUNCM2FXUjBhRG9nTVRBd0pUdGNiaUFnSUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh1SUNCOVhHNWNiaUFnSmw5ZmFHVmhaR1Z5TEZ4dUlDQW1YMTltYjI5MFpYSWdlMXh1SUNBZ0lHWnNaWGd0YzJoeWFXNXJPaUF3TzF4dUlDQjlYRzVjYmlBZ0psOWZkR2wwYkdVc1hHNGdJQ1pmWDIxaGFXNHNYRzRnSUNaZlgyWnZiM1JsY2lCN1hHNGdJQ0FnY0dGa1pHbHVaem9nTUNBeE5uQjRPMXh1SUNCOVhHNWNiaUFnSmw5ZmFHVmhaR1Z5TEZ4dUlDQW1YMTkwYVhSc1pTQjdYRzRnSUNBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHVJQ0FnSUhvdGFXNWtaWGc2SURFN1hHNGdJQ0FnYldGeVoybHVPaUF3SUdGMWRHODdYRzRnSUNBZ2FHVnBaMmgwT2lBMU1uQjRPMXh1SUNBZ0lHeHBibVV0YUdWcFoyaDBPaUExTW5CNE8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc0Z0lIMWNibHh1SUNBbVgxOTBhWFJzWlNCN1hHNGdJQ0FnWm05dWRDMXphWHBsT2lBeE5uQjRPMXh1SUNBZ0lHWnZiblF0ZDJWcFoyaDBPaUEwTURBN1hHNGdJQ0FnYldGeVoybHVPaUF3SURFMmNIZzdYRzRnSUNBZ1ltOTRMWE5wZW1sdVp6b2dZbTl5WkdWeUxXSnZlRHRjYmlBZ0lDQmliM0prWlhJdFltOTBkRzl0T2lBeGNIZ2djMjlzYVdRZ1FIQnlhVzFoY25sZlltOXlaR1Z5WDJOdmJHOXlPMXh1SUNCOVhHNWNiaUFnSmw5ZlkyeHZjMlVnZTF4dUlDQWdJSEJ2YzJsMGFXOXVPaUJoWW5OdmJIVjBaVHRjYmlBZ0lDQjZMV2x1WkdWNE9pQXlPMXh1SUNBZ0lIUnZjRG9nTlRBbE8xeHVJQ0FnSUhKcFoyaDBPaUF4TW5CNE8xeHVJQ0FnSUhkcFpIUm9PaUF5TUhCNE8xeHVJQ0FnSUdobGFXZG9kRG9nTWpCd2VEdGNiaUFnSUNCc2FXNWxMV2hsYVdkb2REb2dNakJ3ZUR0Y2JpQWdJQ0JqYjJ4dmNqb2dRR1p2ZFhKMGFGOTBaWGgwWDJOdmJHOXlPMXh1SUNBZ0lHWnZiblF0YzJsNlpUb2dNakJ3ZUR0Y2JpQWdJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WEc0Z0lDQWdZM1Z5YzI5eU9pQndiMmx1ZEdWeU8xeHVJQ0FnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1WEc0Z0lDQWdMbTkxZEd4cGJtVXRhV052YmlCN1hHNGdJQ0FnSUNCd2IzTnBkR2x2YmpvZ1lXSnpiMngxZEdVN1hHNGdJQ0FnSUNCNkxXbHVaR1Y0T2lBeU8xeHVJQ0FnSUNBZ2RHOXdPaUF3TzF4dUlDQWdJQ0FnYkdWbWREb2dNRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQW1PbWh2ZG1WeUlIdGNiaUFnSUNBZ0lHTnZiRzl5T2lCQWRHaHBjbVJmZEdWNGRGOWpiMnh2Y2p0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgxOXRZV2x1SUh0Y2JpQWdJQ0JtYkdWNE9pQXhPMXh1SUNBZ0lHOTJaWEptYkc5M09pQmhkWFJ2TzF4dUlDQjlYRzVjYmlBZ0psOWZabTl2ZEdWeUlIdGNiaUFnSUNCdFlYSm5hVzQ2SURBZ1lYVjBienRjYmlBZ0lDQjBaWGgwTFdGc2FXZHVPaUJ5YVdkb2REdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQjlYRzVjYmlBZ0psOWZiM1psY214aGVTQjdYRzRnSUNBZ1kyOXVkR1Z1ZERvZ0p5YzdYRzRnSUNBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHVJQ0FnSUhvdGFXNWtaWGc2SURFN1hHNGdJQ0FnZEc5d09pQXdPMXh1SUNBZ0lHeGxablE2SURBN1hHNGdJQ0FnZDJsa2RHZzZJREV3TUNVN1hHNGdJQ0FnYUdWcFoyaDBPaUF4TURBbE8xeHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCM2FHbDBaVHRjYmlBZ0lDQnZjR0ZqYVhSNU9pQXdMakU3WEc0Z0lDQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNiaUFnZlZ4dVhHNGdJQ1pmY25Sc0xGeHVJQ0FtWDJ4MGNpQjdYRzRnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hHNGdJQ0FnSUNBbVgzUnBibmtnZTF4dUlDQWdJQ0FnSUNCM2FXUjBhRG9nTWpnd2NIZzdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmYldsdWFTQjdYRzRnSUNBZ0lDQWdJSGRwWkhSb09pQTBPREJ3ZUR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXpiV0ZzYkNCN1hHNGdJQ0FnSUNBZ0lIZHBaSFJvT2lBMU5EQndlRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5eVpXZDFiR0Z5SUh0Y2JpQWdJQ0FnSUNBZ2QybGtkR2c2SURZNE1IQjRPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FtWDIxbFpHbDFiU0I3WEc0Z0lDQWdJQ0FnSUhkcFpIUm9PaUEzTWpCd2VEdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdKbDlzWVhKblpTQjdYRzRnSUNBZ0lDQWdJSGRwWkhSb09pQTVOakJ3ZUR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgzSjBiQ0I3WEc0Z0lDQWdZbTl5WkdWeUxXeGxablE2SURGd2VDQnpiMnhwWkNCQWNISnBiV0Z5ZVY5aWIzSmtaWEpmWTI5c2IzSTdYRzVjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNiaUFnSUNBZ0lDWmZkR2x1ZVNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlhV2RvZERvZ0xUSTVNSEI0TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZiV2x1YVNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQnlhV2RvZERvZ0xUUTVNSEI0TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZjMjFoYkd3Z2UxeHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJQ0FnSUNBZ0lDQWdjbWxuYUhRNklDMDFOVEJ3ZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YM0psWjNWc1lYSWdlMXh1SUNBZ0lDQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlYMk5zYjNObFpDQjdYRzRnSUNBZ0lDQWdJQ0FnY21sbmFIUTZJQzAyT1RCd2VEdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FtWDIxbFpHbDFiU0I3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCeWFXZG9kRG9nTFRjek1IQjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmJHRnlaMlVnZTF4dUlDQWdJQ0FnSUNBbUxtOTFkR3hwYm1VdFpISmhkMlZ5WDJOc2IzTmxaQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtbG5hSFE2SUMwNU56QndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZmJIUnlJSHRjYmlBZ0lDQmliM0prWlhJdGNtbG5hSFE2SURGd2VDQnpiMnhwWkNCQWNISnBiV0Z5ZVY5aWIzSmtaWEpmWTI5c2IzSTdYRzVjYmlBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeUlIdGNiaUFnSUNBZ0lDWmZkR2x1ZVNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQnNaV1owT2lBdE1qa3djSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXRhVzVwSUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lHeGxablE2SUMwME9UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgzTnRZV3hzSUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lHeGxablE2SUMwMU5UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgzSmxaM1ZzWVhJZ2UxeHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJQ0FnSUNBZ0lDQWdiR1ZtZERvZ0xUWTVNSEI0TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZiV1ZrYVhWdElIdGNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hsWm5RNklDMDNNekJ3ZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YMnhoY21kbElIdGNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hsWm5RNklDMDVOekJ3ZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDWmZkSFJpTEZ4dUlDQW1YMkowZENCN1hHNGdJQ0FnYkdWbWREb2dNRHRjYmlBZ0lDQjNhV1IwYURvZ01UQXdKVHRjYmx4dUlDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSWdlMXh1SUNBZ0lDQWdKbDkwYVc1NUlIdGNiaUFnSUNBZ0lDQWdhR1ZwWjJoME9pQXlOREJ3ZUR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXRhVzVwSUh0Y2JpQWdJQ0FnSUNBZ2FHVnBaMmgwT2lBek1qQndlRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSmw5emJXRnNiQ0I3WEc0Z0lDQWdJQ0FnSUdobGFXZG9kRG9nTXpZd2NIZzdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmY21WbmRXeGhjaUI3WEc0Z0lDQWdJQ0FnSUdobGFXZG9kRG9nTkRBd2NIZzdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmYldWa2FYVnRJSHRjYmlBZ0lDQWdJQ0FnYUdWcFoyaDBPaUEwTkRCd2VEdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdKbDlzWVhKblpTQjdYRzRnSUNBZ0lDQWdJR2hsYVdkb2REb2dORGd3Y0hnN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0psOTBkR0lnZTF4dUlDQWdJR0p2Y21SbGNpMWliM1IwYjIwNklERndlQ0J6YjJ4cFpDQkFjSEpwYldGeWVWOWliM0prWlhKZlkyOXNiM0k3WEc1Y2JpQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlJSHRjYmlBZ0lDQWdJQ1pmZEdsdWVTQjdYRzRnSUNBZ0lDQWdJQ1l1YjNWMGJHbHVaUzFrY21GM1pYSmZZMnh2YzJWa0lIdGNiaUFnSUNBZ0lDQWdJQ0IwYjNBNklDMHlOVEJ3ZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YMjFwYm1rZ2UxeHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJQ0FnSUNBZ0lDQWdkRzl3T2lBdE16TXdjSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXpiV0ZzYkNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBiM0E2SUMwek56QndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgzSmxaM1ZzWVhJZ2UxeHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJQ0FnSUNBZ0lDQWdkRzl3T2lBdE5ERXdjSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXRaV1JwZFcwZ2UxeHVJQ0FnSUNBZ0lDQW1MbTkxZEd4cGJtVXRaSEpoZDJWeVgyTnNiM05sWkNCN1hHNGdJQ0FnSUNBZ0lDQWdkRzl3T2lBdE5EVXdjSGc3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOXNZWEpuWlNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBiM0E2SUMwME9UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZlluUjBJSHRjYmlBZ0lDQjBiM0E2SUdsdWFYUnBZV3c3WEc0Z0lDQWdZbTl5WkdWeUxYUnZjRG9nTVhCNElITnZiR2xrSUVCd2NtbHRZWEo1WDJKdmNtUmxjbDlqYjJ4dmNqdGNibHh1SUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhJZ2UxeHVJQ0FnSUNBZ0psOTBhVzU1SUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2w5amJHOXpaV1FnZTF4dUlDQWdJQ0FnSUNBZ0lHSnZkSFJ2YlRvZ0xUSTFNSEI0TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZiV2x1YVNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQmliM1IwYjIwNklDMHpNekJ3ZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YM050WVd4c0lIdGNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0FnSUNBZ0lDQWdJR0p2ZEhSdmJUb2dMVE0zTUhCNE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ1pmY21WbmRXeGhjaUI3WEc0Z0lDQWdJQ0FnSUNZdWIzVjBiR2x1WlMxa2NtRjNaWEpmWTJ4dmMyVmtJSHRjYmlBZ0lDQWdJQ0FnSUNCaWIzUjBiMjA2SUMwME1UQndlRHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgyMWxaR2wxYlNCN1hHNGdJQ0FnSUNBZ0lDWXViM1YwYkdsdVpTMWtjbUYzWlhKZlkyeHZjMlZrSUh0Y2JpQWdJQ0FnSUNBZ0lDQmliM1IwYjIwNklDMDBOVEJ3ZUR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YMnhoY21kbElIdGNiaUFnSUNBZ0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNsOWpiRzl6WldRZ2UxeHVJQ0FnSUNBZ0lDQWdJR0p2ZEhSdmJUb2dMVFE1TUhCNE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDl2Y0dWdVpXUWdlMXh1SUNBZ0lIWnBjMmxpYVd4cGRIazZJSFpwYzJsaWJHVTdYRzRnSUNBZ2VpMXBibVJsZURvZ2RtRnlLQzB0YjNWMGJHbHVaUzE2U1c1a1pYZ3BPMXh1WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMV1J5WVhkbGNpQjdYRzRnSUNBZ0lDQndiM05wZEdsdmJqb2dabWw0WldRN1hHNWNiaUFnSUNBZ0lDWmZjblJzSUh0Y2JpQWdJQ0FnSUNBZ2NtbG5hSFE2SURBN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZiSFJ5SUh0Y2JpQWdJQ0FnSUNBZ2JHVm1kRG9nTUR0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0psOTBkR0lnZTF4dUlDQWdJQ0FnSUNCMGIzQTZJREE3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZlluUjBJSHRjYmlBZ0lDQWdJQ0FnWW05MGRHOXRPaUF3TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZmIyWm1jMlYwSUh0Y2JpQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlJSHRjYmlBZ0lDQWdJQ1pmY25Sc0xGeHVJQ0FnSUNBZ0psOXNkSElnZTF4dUlDQWdJQ0FnSUNCb1pXbG5hSFE2SUdOaGJHTW9NVEF3SlNBdElEUmxiU2s3WEc0Z0lDQWdJQ0FnSUhSdmNEb2dOVEFsTzF4dUlDQWdJQ0FnSUNCMGNtRnVjMlp2Y20wNklIUnlZVzV6YkdGMFpWa29MVFV3SlNrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDWmZkSFJpTEZ4dUlDQWdJQ0FnSmw5aWRIUWdlMXh1SUNBZ0lDQWdJQ0IzYVdSMGFEb2dZMkZzWXlneE1EQWxJQzBnTkdWdEtUdGNiaUFnSUNBZ0lDQWdiR1ZtZERvZ05UQWxPMXh1SUNBZ0lDQWdJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlZnb0xUVXdKU2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNaZmIzQmxibVZrSUh0Y2JpQWdJQ0FnSUNBZ0ppNXZkWFJzYVc1bExXUnlZWGRsY2lCN1hHNGdJQ0FnSUNBZ0lDQWdKbDl5ZEd3Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21sbmFIUTZJREpsYlR0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBbVgyeDBjaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNaV1owT2lBeVpXMDdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdKbDkwZEdJZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEc5d09pQXlaVzA3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSmw5aWRIUWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1ltOTBkRzl0T2lBeVpXMDdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0psOWhkWFJ2SUh0Y2JpQWdJQ0FtTG05MWRHeHBibVV0WkhKaGQyVnlJSHRjYmlBZ0lDQWdJQ1pmY25Sc0xGeHVJQ0FnSUNBZ0psOXNkSElnZTF4dUlDQWdJQ0FnSUNCb1pXbG5hSFE2SUdGMWRHODdYRzRnSUNBZ0lDQWdJRzFoZUMxb1pXbG5hSFE2SUdOaGJHTW9NVEF3SlNBdElEUmxiU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnSmw5bWRXeHNJSHRjYmlBZ0lDQndZV1JrYVc1bk9pQXdPMXh1SUNCOVhHNTlYRzRpTENJdktpcGNiaUFxSUhOb1lXUnZkeTVzWlhOeklDMGc2WmkwNWIyeDVxQzM1YnlQNks2KzU3MnVJRzFwZUdsdWVDRGxoNzNtbGJCY2JpQXFJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMWNiaUFxSUVOeVpXRjBaV1FnUW5rNklGbGhiMmhoYVhocFlXOWNiaUFxSUZWd1pHRjBaVG9nTWpBeU1pNHpMakl3WEc0Z0tpOWNia0JwYlhCdmNuUWdKeTR2WTI5c2IzSnpKenRjYmx4dUx5b2dQVDA5UFQwOUlPbVl0T1c5c2VhZ3QrVzhqK2l1dnVlOXJ1V0h2ZWFWc0NBOVBUMDlQVDBnS2k5Y2JpNXphR0ZrYjNjb1FHOW1abk5sZERvZ01DQXdJRFp3ZUNBeGNIZ3NJRUJqYjJ4dmNqb2dRSEJ5YVcxaGNubGZZbTl5WkdWeVgyTnZiRzl5S1NCN1hHNGdJR0p2ZUMxemFHRmtiM2M2SUVCdlptWnpaWFFnUUdOdmJHOXlPMXh1ZlZ4dVhHNHVjMmhoWkc5M1gzSmxaM1ZzWVhJb1FHTnZiRzl5T2lCQWNISnBiV0Z5ZVY5aWIzSmtaWEpmWTI5c2IzSXBJSHRjYmlBZ0xuTm9ZV1J2ZHlnd0lEQWdObkI0SURGd2VDd2dRR052Ykc5eUtUdGNibjFjYmx4dUxuTm9ZV1J2ZDE5c1lYSm5aU2hBWTI5c2IzSTZJRUJ3Y21sdFlYSjVYMkp2Y21SbGNsOWpiMnh2Y2lrZ2UxeHVJQ0F1YzJoaFpHOTNLREFnTUNBeE1uQjRJREZ3ZUN3Z1FHTnZiRzl5S1R0Y2JuMWNibHh1TG5Ob1lXUnZkMTlzYVdkb2RGOXlaV2QxYkdGeUtDa2dlMXh1SUNBdWMyaGhaRzkzWDNKbFozVnNZWElvS1R0Y2JuMWNibHh1TG5Ob1lXUnZkMTlzYVdkb2RGOXNZWEpuWlNncElIdGNiaUFnTG5Ob1lXUnZkMTlzWVhKblpTZ3BPMXh1ZlZ4dVhHNHVjMmhoWkc5M1gyUmhjbXRmY21WbmRXeGhjaWdwSUh0Y2JpQWdMbk5vWVdSdmQxOXlaV2QxYkdGeUtFQnpaV052Ym1SaGNubGZZbTl5WkdWeVgyTnZiRzl5S1R0Y2JuMWNibHh1TG5Ob1lXUnZkMTlrWVhKclgyeGhjbWRsS0NrZ2UxeHVJQ0F1YzJoaFpHOTNYMnhoY21kbEtFQnpaV052Ym1SaGNubGZZbTl5WkdWeVgyTnZiRzl5S1R0Y2JuMWNiaUlzSWtCcGJYQnZjblFnSnk0dmRtRnlhV0ZpYkdWekp6dGNia0JwYlhCdmNuUWdKeTR2WTI5c2IzSnpKenRjYmtCcGJYQnZjblFnSnk0dlpXeHNhWEJ6YVhNbk8xeHVYRzR1YjNWMGJHbHVaUzFqYUdGd2RHVnljeUI3WEc0Z0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnZWkxcGJtUmxlRG9nTVR0Y2JpQWdiV0Z5WjJsdU9pQXdPMXh1SUNCM2FXUjBhRG9nZG1GeUtDMHRiM1YwYkdsdVpTMWphR0Z3ZEdWeWN5MTNhV1IwYUNrN1hHNGdJSFJ5WVc1emFYUnBiMjR0WkhWeVlYUnBiMjQ2SURBdU0zTTdYRzRnSUc5MlpYSm1iRzkzT2lCaGRYUnZPMXh1WEc0Z0lDWmZYM1JwZEd4bElIdGNiaUFnSUNCdFlYSm5hVzQ2SURBZ01UWndlRHRjYmlBZ0lDQm9aV2xuYUhRNklEUXdjSGc3WEc0Z0lDQWdiR2x1WlMxb1pXbG5hSFE2SURRd2NIZzdYRzRnSUNBZ2NHRmtaR2x1WnpvZ01DQXhObkI0TzF4dUlDQWdJR0p2Y21SbGNpMWliM1IwYjIwNklERndlQ0J6YjJ4cFpDQkFjSEpwYldGeWVWOWliM0prWlhKZlkyOXNiM0k3WEc0Z0lDQWdabTl1ZEMxemFYcGxPaUF4Tm5CNE8xeHVJQ0FnSUdadmJuUXRkMlZwWjJoME9pQTBNREE3WEc0Z0lDQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNiaUFnZlZ4dVhHNGdJQ1pmWDIxaGFXNGdlMXh1SUNBZ0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnSUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0FnSUcxaGNtZHBiam9nTUR0Y2JpQWdJQ0J2ZG1WeVpteHZkem9nYUdsa1pHVnVPMXh1SUNCOVhHNWNiaUFnSmw5ZmJHbHpkQ3hjYmlBZ0psOWZjM1ZpYW1WamRDeGNiaUFnSmw5ZmFYUmxiU0I3WEc0Z0lDQWdjRzl6YVhScGIyNDZJSEpsYkdGMGFYWmxPMXh1SUNBZ0lIb3RhVzVrWlhnNklESTdYRzRnSUNBZ2JXRnlaMmx1T2lBd08xeHVJQ0FnSUhCaFpHUnBibWM2SURBN1hHNGdJQ0FnYkdsemRDMXpkSGxzWlMxMGVYQmxPaUJ1YjI1bE8xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc0Z0lIMWNibHh1SUNBbVgxOXNhWE4wSUh0Y2JpQWdJQ0J3WVdSa2FXNW5PaUF3TGpWbGJTQXdPMXh1SUNCOVhHNWNiaUFnSmw5ZmMzVmlhbVZqZENCN1hHNGdJQ0FnY0dGa1pHbHVaeTFzWldaME9pQXhaVzA3WEc0Z0lIMWNibHh1SUNBbVgxOXBkR1Z0SUh0Y2JpQWdJQ0J0WVhKbmFXNDZJREE3WEc0Z0lDQWdiR2x1WlMxb1pXbG5hSFE2SURNd2NIZzdYRzRnSUNBZ1ptOXVkQzF6YVhwbE9pQXhNM0I0TzF4dUlDQWdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzRnSUgxY2JseHVJQ0FtWDE5d2JHRmpaV2h2YkdSbGNpQjdYRzRnSUNBZ2NHOXphWFJwYjI0NklHRmljMjlzZFhSbE8xeHVJQ0FnSUhvdGFXNWtaWGc2SURFN1hHNGdJQ0FnZEc5d09pQXdPMXh1SUNBZ0lHeGxablE2SURBN1hHNGdJQ0FnZDJsa2RHZzZJREV3TUNVN1hHNGdJQ0FnYUdWcFoyaDBPaUF6TUhCNE8xeHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCb2IzWmxjbDlpWjE5amIyeHZjanRjYmlBZ0lDQmliM0prWlhJdGJHVm1kRG9nTW5CNElITnZiR2xrSUVCemRXTmpaWE56WDJOdmJHOXlPMXh1SUNBZ0lIUnlZVzV6YVhScGIyNHRaSFZ5WVhScGIyNDZJREF1TW5NN1hHNGdJQ0FnWW05NExYTnBlbWx1WnpvZ1ltOXlaR1Z5TFdKdmVEdGNiaUFnSUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dUlDQjlYRzVjYmlBZ0psOWZZVzVqYUc5eUlIdGNiaUFnSUNBdVpXeHNhWEJ6YVhNb01TazdYRzRnSUNBZ1pHbHpjR3hoZVRvZ1lteHZZMnM3WEc0Z0lDQWdjR0ZrWkdsdVp6b2dNQ0F4TGpWbGJUdGNibHh1SUNBZ0lDWTZiR2x1YXl4Y2JpQWdJQ0FtT25acGMybDBaV1FzWEc0Z0lDQWdKanBvYjNabGNpQjdYRzRnSUNBZ0lDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3WEc0Z0lDQWdJQ0JqYjJ4dmNqb2dRSE5sWTI5dVpHRnllVjkwWlhoMFgyTnZiRzl5TzF4dUlDQWdJSDFjYmx4dUlDQWdJQ1k2YUc5MlpYSWdlMXh1SUNBZ0lDQWdZMjlzYjNJNklFQnpkV05qWlhOelgyTnZiRzl5TzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZlgyTnZaR1VnZTF4dUlDQWdJSEJoWkdScGJtY3RjbWxuYUhRNklEQXVOV1Z0TzF4dUlDQjlYRzVjYmlBZ0psOWhZM1JwZG1VZ2UxeHVJQ0FnSUNZdWIzVjBiR2x1WlMxamFHRndkR1Z5YzE5ZllXNWphRzl5SUh0Y2JpQWdJQ0FnSUNZNmJHbHVheXhjYmlBZ0lDQWdJQ1k2ZG1semFYUmxaQ3hjYmlBZ0lDQWdJQ1k2YUc5MlpYSWdlMXh1SUNBZ0lDQWdJQ0JqYjJ4dmNqb2dRSE4xWTJObGMzTmZZMjlzYjNJN1hHNGdJQ0FnSUNBZ0lHWnZiblF0ZDJWcFoyaDBPaUEwTURBN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0psOXpkR2xqYTNrc1hHNGdJQ1pmWm1sNFpXUWdlMXh1SUNBZ0lHUnBjM0JzWVhrNklHWnNaWGc3WEc0Z0lDQWdabXhsZUMxM2NtRndPaUJ1YjNkeVlYQTdYRzRnSUNBZ1pteGxlQzFrYVhKbFkzUnBiMjQ2SUdOdmJIVnRianRjYmlBZ0lDQjZMV2x1WkdWNE9pQjJZWElvTFMxdmRYUnNhVzVsTFhwSmJtUmxlQ2s3WEc0Z0lDQWdkRzl3T2lBd08xeHVJQ0FnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1Y2JpQWdJQ0F1YjNWMGJHbHVaUzFqYUdGd2RHVnljeUI3WEc0Z0lDQWdJQ0FtWDE5MGFYUnNaU3hjYmlBZ0lDQWdJQ1pmWDIxaGFXNGdlMXh1SUNBZ0lDQWdJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YMTkwYVhSc1pTQjdYRzRnSUNBZ0lDQWdJR1pzWlhndGMyaHlhVzVyT2lBd08xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQW1YMTl0WVdsdUlIdGNiaUFnSUNBZ0lDQWdabXhsZURvZ01UdGNiaUFnSUNBZ0lDQWdiM1psY21ac2IzYzZJR0YxZEc4N1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0psOXpkR2xqYTNrZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lCemRHbGphM2s3WEc0Z0lDQWdiV0Y0TFdobGFXZG9kRG9nZG1GeUtDMHRiM1YwYkdsdVpTMXpkR2xqYTNrdGFHVnBaMmgwS1R0Y2JpQWdmVnh1WEc0Z0lDWmZabWw0WldRZ2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lCbWFYaGxaRHRjYmlBZ0lDQnRZWGd0YUdWcFoyaDBPaUF4TURBbE8xeHVJQ0I5WEc1Y2JpQWdKbDlvYVdSa1pXNGdlMXh1SUNBZ0lHUnBjM0JzWVhrNklHNXZibVU3WEc0Z0lIMWNibHh1SUNBbVgyWnZiR1JsWkNCN1hHNGdJQ0FnZDJsa2RHZzZJREE3WEc0Z0lIMWNibjFjYmlJc0lpOHFLbHh1SUNvZ1pXeHNhWEJ6YVhNdWJHVnpjeUF0SU9hV2grYWNyT2VjZ2VlVnBTQnRhWGhwYm5nZzVZZTk1cFd3WEc0Z0tpQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhHNGdLaUJEY21WaGRHVmtJRUo1T2lCWllXOW9ZV2w0YVdGdlhHNGdLaUJWY0dSaGRHVTZJREl3TWpJdU15NHhNVnh1SUNvdlhHNWNiaThxSUQwOVBUMDlQU0RtbG9mbW5Lem5uSUhubGFYbGg3M21sYkFnUFQwOVBUMDlJQ292WEc0dVpXeHNhWEJ6YVhNZ0tFQnNhVzVsY3lrZ2QyaGxiaUFvUUd4cGJtVnpQVEVwSUh0Y2JpQWdkMmhwZEdVdGMzQmhZMlU2SUc1dmQzSmhjRHRjYmlBZ2RHVjRkQzF2ZG1WeVpteHZkem9nWld4c2FYQnphWE03WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzVjYmk1bGJHeHBjSE5wY3lBb1FHeHBibVZ6S1NCM2FHVnVJQ2hBYkdsdVpYTStQVElwSUh0Y2JpQWdMWGRsWW10cGRDMXNhVzVsTFdOc1lXMXdPaUJBYkdsdVpYTTdYRzRnSUdScGMzQnNZWGs2SUdKdmVEdGNiaUFnTFhkbFltdHBkQzFpYjNndGIzSnBaVzUwT2lCMlpYSjBhV05oYkR0Y2JpQWdkR1Y0ZEMxdmRtVnlabXh2ZHpvZ1pXeHNhWEJ6YVhNN1hHNGdJRzkyWlhKbWJHOTNPaUJvYVdSa1pXNDdYRzU5WEc0aUxDSXZLaUE5UFQwOVBUMDlQVDA5SUdKMWRIUnZibk11ZEdobGJXVWdMU0RtaklucGtxN2xyN3pvaUtybW9MZmx2SThnUFQwOVBUMDlQVDA5UFNBcUwxeHVRR2x0Y0c5eWRDQW5MaTlqYjJ4dmNuTW5PMXh1UUdsdGNHOXlkQ0FuTGk5emFHRmtiM2NuTzF4dVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeUlIdGNiaUFnY0c5emFYUnBiMjQ2SUdacGVHVmtPMXh1SUNCNkxXbHVaR1Y0T2lBNU9UazVPVHRjYmlBZ2JXRnlaMmx1T2lBd08xeHVJQ0IwY21GdWMybDBhVzl1TFdSMWNtRjBhVzl1T2lBd0xqTnpPMXh1SUNCdmRtVnlabXh2ZHpvZ2FHbGtaR1Z1TzF4dVhHNGdJQ1pmWDJKMWRIUnZiaUI3WEc0Z0lDQWdMbk5vWVdSdmQxOXNhV2RvZEY5eVpXZDFiR0Z5S0NrN1hHNGdJQ0FnY0c5emFYUnBiMjQ2SUhKbGJHRjBhWFpsTzF4dUlDQWdJSG90YVc1a1pYZzZJREU3WEc0Z0lDQWdiV0Z5WjJsdU9pQXhNSEI0TzF4dUlDQWdJSGRwWkhSb09pQXpObkI0TzF4dUlDQWdJR2hsYVdkb2REb2dNelp3ZUR0Y2JpQWdJQ0JpYjNKa1pYSTZJREZ3ZUNCemIyeHBaQ0JBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJN1hHNGdJQ0FnWW05eVpHVnlMWEpoWkdsMWN6b2dNM0I0TzF4dUlDQWdJR0p2ZUMxemFYcHBibWM2SUdKdmNtUmxjaTFpYjNnN1hHNGdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUhkb2FYUmxPMXh1SUNBZ0lHTjFjbk52Y2pvZ2NHOXBiblJsY2p0Y2JpQWdJQ0IwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WEc0Z0lDQWdZMjlzYjNJNklFQnpaV052Ym1SaGNubGZkR1Y0ZEY5amIyeHZjanRjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHVYRzRnSUNBZ0pqcG9iM1psY2lCN1hHNGdJQ0FnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYRzRnSUNBZ0lDQmliM0prWlhJdFkyOXNiM0k2SUVCemRXTmpaWE56WDJOdmJHOXlPMXh1SUNBZ0lIMWNibHh1SUNBZ0lDWXVhR2xrWlNCN1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lCdWIyNWxPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQ1pmWDJGdVkyaHZjaUI3WEc0Z0lDQWdKanBzYVc1ckxGeHVJQ0FnSUNZNmRtbHphWFJsWkN4Y2JpQWdJQ0FtT21odmRtVnlJSHRjYmlBZ0lDQWdJR052Ykc5eU9pQkFabTkxY25Sb1gzUmxlSFJmWTI5c2IzSTdYRzRnSUNBZ0lDQjBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdKanBvYjNabGNpQjdYRzRnSUNBZ0lDQmpiMnh2Y2pvZ1FITjFZMk5sYzNOZlkyOXNiM0k3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnSmw5ZmFXTnZiaUI3WEc0Z0lDQWdjRzl6YVhScGIyNDZJR0ZpYzI5c2RYUmxPMXh1SUNBZ0lIb3RhVzVrWlhnNklESTdYRzRnSUNBZ2RHOXdPaUExTUNVN1hHNGdJQ0FnYkdWbWREb2dOVEFsTzF4dUlDQWdJSGRwWkhSb09pQXlNSEI0TzF4dUlDQWdJR2hsYVdkb2REb2dNakJ3ZUR0Y2JpQWdJQ0IwY21GdWMyWnZjbTA2SUhSeVlXNXpiR0YwWlNndE5UQWxMQ0F0TlRBbEtUdGNiaUFnSUNCbWFXeHNPaUJqZFhKeVpXNTBZMjlzYjNJN1hHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYmlBZ2ZWeHVYRzRnSUNaZllXTjBhWFpsSUh0Y2JpQWdJQ0FtTG05MWRHeHBibVV0ZEc5dmJHSmhjaUI3WEc0Z0lDQWdJQ0FtWDE5aWRYUjBiMjRnZTF4dUlDQWdJQ0FnSUNCamIyeHZjam9nUUhkb2FYUmxPMXh1SUNBZ0lDQWdJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUJBYzNWalkyVnpjMTlqYjJ4dmNqdGNiaUFnSUNBZ0lDQWdZbTl5WkdWeUxXTnZiRzl5T2lCQWMzVmpZMlZ6YzE5amIyeHZjanRjYmx4dUlDQWdJQ0FnSUNBbU9taHZkbVZ5SUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ1FIZG9hWFJsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWVc1amFHOXlJSHRjYmlBZ0lDQWdJQ1k2YkdsdWF5eGNiaUFnSUNBZ0lDWTZkbWx6YVhSbFpDeGNiaUFnSUNBZ0lDWTZhRzkyWlhJZ2UxeHVJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ1FIZG9hWFJsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZmNtOTFibVJsWkNCN1hHNGdJQ0FnSmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaUI3WEc0Z0lDQWdJQ0JpYjNKa1pYSXRjbUZrYVhWek9pQXhPSEI0TzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZlpHbHpZV0pzWldRZ2UxeHVJQ0FnSUNZdWIzVjBiR2x1WlMxMGIyOXNZbUZ5TEZ4dUlDQWdJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSWdlMXh1SUNBZ0lDQWdKbDlmWVc1amFHOXlPbXhwYm1zc1hHNGdJQ0FnSUNBbVgxOWhibU5vYjNJNmRtbHphWFJsWkN4Y2JpQWdJQ0FnSUNaZlgyRnVZMmh2Y2pwb2IzWmxjaXhjYmlBZ0lDQWdJQ1pmWDJKMWRIUnZiaUI3WEc0Z0lDQWdJQ0FnSUdOMWNuTnZjam9nYm05MExXRnNiRzkzWldRN1hHNGdJQ0FnSUNBZ0lHTnZiRzl5T2lCQVptOTFjblJvWDNSbGVIUmZZMjlzYjNJN1hHNWNiaUFnSUNBZ0lDQWdKanBvYjNabGNpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5c2IzSTZJRUJtYjNWeWRHaGZkR1Y0ZEY5amIyeHZjanRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBbVgxOWlkWFIwYjI0Z2UxeHVJQ0FnSUNBZ0lDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQkFaR2x6WVdKc1pXUmZZbWRmWTI5c2IzSTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDkwZEdJc1hHNGdJQ1pmWW5SMElIdGNiaUFnSUNCc1pXWjBPaUExTUNVN1hHNGdJQ0FnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdWWUtDMDFNQ1VwTzF4dVhHNGdJQ0FnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ0lDQWdJR1JwYzNCc1lYazZJR2x1YkdsdVpTMWliRzlqYXp0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgzUjBZaUI3WEc0Z0lDQWdkRzl3T2lBeE1uQjRPMXh1WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZhR2xrWkdWdUlIdGNiaUFnSUNBZ0lIUnZjRG9nTFRVMmNIZzdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDlpZEhRZ2UxeHVJQ0FnSUdKdmRIUnZiVG9nTVRKd2VEdGNibHh1SUNBZ0lDWXViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYmlCN1hHNGdJQ0FnSUNCaWIzUjBiMjA2SUMwMU5uQjRPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJQ1pmY25Sc0xGeHVJQ0FtWDJ4MGNpQjdYRzRnSUNBZ2RISmhibk5tYjNKdE9pQjBjbUZ1YzJ4aGRHVlpLQzAxTUNVcE8xeHVJQ0FnSUhkcFpIUm9PaUExTm5CNE8xeHVJQ0I5WEc1Y2JpQWdKbDl5ZEd3Z2UxeHVJQ0FnSUhSdmNEb2dOVEFsTzF4dUlDQWdJSEpwWjJoME9pQXhNbkI0TzF4dVhHNGdJQ0FnSmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmYUdsa1pHVnVJSHRjYmlBZ0lDQWdJSEpwWjJoME9pQXRPRFp3ZUR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgyeDBjaUI3WEc0Z0lDQWdkRzl3T2lBMU1DVTdYRzRnSUNBZ2JHVm1kRG9nTVRKd2VEdGNibHh1SUNBZ0lDWXViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYmlCN1hHNGdJQ0FnSUNCc1pXWjBPaUF0T0Rad2VEdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQW1YM1IwWWl4Y2JpQWdKbDl5ZEd3c1hHNGdJQ1pmWW5SMExGeHVJQ0FtWDJ4MGNpQjdYRzRnSUNBZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZlluVjBkRzl1SUh0Y2JpQWdJQ0FnSUNZdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEc0Z0lDQWdJQ0FnSUdScGMzQnNZWGs2SUc1dmJtVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0I5WEc1OVhHNGlMQ0l2S2lBOVBUMDlQU0JUWTNKdmJHeGlZWElnUFQwOVBUMGdLaTljYmpvNkxYZGxZbXRwZEMxelkzSnZiR3hpWVhJZ2UxeHVJQ0IzYVdSMGFEb2dOM0I0TzF4dUlDQm9aV2xuYUhRNklEZHdlRHRjYmlBZ0xYZGxZbXRwZEMxaWIzSmtaWEl0Y21Ga2FYVnpPaUExY0hnN1hHNTlYRzVjYmpvNkxYZGxZbXRwZEMxelkzSnZiR3hpWVhJdGRISmhZMnN0Y0dsbFkyVWdlMXh1SUNBdGQyVmlhMmwwTFdKdmNtUmxjaTF5WVdScGRYTTZJRFZ3ZUR0Y2JuMWNibHh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2kxMGFIVnRZanAyWlhKMGFXTmhiQ0I3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklISm5ZbUVvTUN3Z01Dd2dNQ3dnTUM0eU5TazdYRzRnSUMxM1pXSnJhWFF0WW05eVpHVnlMWEpoWkdsMWN6b2dOWEI0TzF4dWZWeHVYRzQ2T2kxM1pXSnJhWFF0YzJOeWIyeHNZbUZ5TFhSb2RXMWlPbWh2Y21sNmIyNTBZV3dnZTF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQnlaMkpoS0RBc0lEQXNJREFzSURBdU1qVXBPMXh1SUNBdGQyVmlhMmwwTFdKdmNtUmxjaTF5WVdScGRYTTZJRFZ3ZUR0Y2JuMWNibHh1T2pvdGQyVmlhMmwwTFhOamNtOXNiR0poY2pwb2IzWmxjaUI3WEc0Z0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklISm5ZbUVvTUN3Z01Dd2dNQ3dnTUM0eE5TazdYRzU5WEc1Y2JqbzZMWGRsWW10cGRDMXpZM0p2Ykd4aVlYSXRkR2gxYldJNmFHOTJaWElnZTF4dUlDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQnlaMkpoS0RBc0lEQXNJREFzSURBdU16VXBPMXh1ZlZ4dUlsMTkgKi9cbiJdLCJmaWxlIjoib3V0bGluZS5taW4uY3NzIn0= */ diff --git a/outline.min.js b/outline.min.js index f30550ac..2f08e993 100644 --- a/outline.min.js +++ b/outline.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Outline=e()}(this,(function(){"use strict";const t=t=>"string"==typeof t,e=(t,e)=>{const s=Object.prototype.hasOwnProperty;return t&&s.call(t,e)},s=t=>Object.prototype.toString.apply(t),i=t=>"function"==typeof t||"[object Function]"===s(t),r=t=>("[object Object]"===s(t)||"object"==typeof t||i(t))&&null!==t;class l{constructor(t){this.attrs={},t&&this.initialize(t)}initialize(t){return this.attr(t).render().addListeners(),this}attr(s,i){const l=this.attrs;return t(s)?i&&e(l,s)?(l[s]=i,this):l[s]:r(s)?(o=l,n=s,Object.keys(n).forEach((t=>{e(n,t)&&(o[t]=n[t])})),this):0===arguments.length?l:this;var o,n}render(){return this}destroy(){return this.removeListeners(),this}reload(t){return this.destroy().initialize(this.attr(t)),this}addListeners(){return this}removeListeners(){return this}}const o=t=>!!(r(t)&&t.nodeName&&t.tagName&&1===t.nodeType),n=(t,e=300)=>!!i(t)&&setTimeout((()=>{t()}),e),h=t=>t*t,a=(e=null)=>{let s,i;return e?t(e)?i=document.querySelector(e):o(e)&&(i=e):(s=document.querySelectorAll("html,body"),i=s[0].scrollTop-s[1].scrollTop>=0?s[0]:s[1]),i},c=(t,e,s)=>{const r=a(t);let l=r.scrollTop,o=0;const n=e-l,c=r.scrollHeight,d=e-c<=0?e:c,u=t=>(i(s)&&s(t),!1),p=()=>{if(o+=1,n<0){if(l-=h(o),r.scrollTop=l,l<=e)return r.scrollTop=e,u(e)}else if(l+=h(o),r.scrollTop=l,l>=d)return r.scrollTop=d,u(d);requestAnimationFrame(p)};requestAnimationFrame(p)},d=t=>{let e=t.offsetTop;return null!==t.offsetParent&&(e+=d(t.offsetParent)),e},u=(t,e="")=>{const s=e.replace(/^>/i,"");return!!(e&&s&&t)&&(t.matches?t.matches(s):!!t.msMatchesSelector&&t.msMatchesSelector(s))},p=t=>t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode,m=["focusout","blur","focusin","focus","load","unload","mouseenter","mouseleave"],f=(t,e,s)=>{const i=m.indexOf(e)>-1;s._delegateListener&&delete(s=s._delegateListener)._delegateListener,function(t,e,s){const i=t._listeners;let r=-1;if(i.length<1)return!1;i.forEach(((t,i)=>{const l=t.fn;e===t.type&&(r=i,l===s&&(r=i))})),r>-1&&i.splice(r,1)}(t,e,s),t.removeEventListener(e,s,i)},g=function(e,s,i=!1){const r=t(e)?document.querySelector(e):e,l=r.childNodes,n=((e,s)=>{let i=e._listeners||[];return t(s)&&s&&(i=i.filter((t=>t.type===s))),i})(r,s);n.forEach((t=>{f(r,t.type,t.fn)})),(i||!0===s||1===arguments.length)&&r&&l&&l.forEach((t=>{o(t)&&g(t,s,i)}))},b=(t,e,s)=>{if(!i(s))return g(t,e);f(t,e,s)},y=(t,e,s,i,r,l,o=!1)=>{const n=m.indexOf(s)>-1,h=function(n){const a=function(t){const e=t.target;return(s=e)&&3===s.nodeType?s.parentNode:s;var s}(n),c=((t,e,s,i)=>{const r=s||document;if(!t)return null;do{if(null!=e&&(e.startsWith(">")?t.parentNode===r&&u(t,e):u(t,e))||i&&t===r)return t;if(t===r)break}while(t=p(t))})(a,e,t);let d=l||t;n.delegateTarget=c,!0===l&&(d=r),c&&(!0===o&&b(t,s,h),i.call(d,n,r))};t._listeners||(t._listeners=[]),t._listeners.push({el:t,selector:e,type:s,fn:h,data:r,context:l,capture:n}),i._delegateListener=h,t.addEventListener(s,h,n)},$=function(t){t.stopPropagation(),t.preventDefault()},v={},E=t=>e(v,t)&&v[t].length>0,_=(t,e=!0)=>e?E(t):(t=>{let e=E(t),s=t.lastIndexOf(".");for(;!e&&-1!==s;)s=(t=t.substring(0,s)).lastIndexOf("."),e=E(t);return e})(t),w=(t,e,i=!0)=>{const r=t=>{if(!E(t))return!1;v[t].forEach((t=>{const i=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]","[object BigInt64Array]","[object BigUint64Array]"].indexOf(s(e))>-1?e.toString():e;t.callback.call(t.context||t,i)}))},l=()=>{let e=t,s=t.lastIndexOf(".");for(;-1!==s;)e=e.substring(0,s),s=e.lastIndexOf("."),r(e);r(t),r("*")};if(!_(t))return!1;i?setTimeout(l,10):l()},T=t=>Array.isArray?Array.isArray(t):"[object Array]"===s(t),S=['','','','','','','','',''],L=(e,s="icon")=>t(e)?((t,e="icon")=>{const s=/id="(.*?)"/,i=/^(\w+)-/;return S.find((r=>{const l=s.exec(r)[1];return i.exec(l)[1]===e&&l===("icon"===e?`${e}-${t}`:`${e}-icon-${t}`)}))})(e,s):[...S],x=(e="")=>{const s=document.body;let i=document.querySelector("#outline-icons"),r=[];(e=>{if(!e)return!1;T(e)&&e.length>0?e.forEach((e=>{-1===S.indexOf(e)&&t(e)&&S.push(e)})):t(e)&&S.push(e)})(e),r=L(),i?i.innerHTML=r.join(""):(i=document.createElement("div"),i.innerHTML=``,s.insertBefore(i.firstChild,s.firstChild))},C=e=>!!t(e)&&e.replace(/(^\s+)|(\s+$)/g,""),z=t=>{return!(!r(t)||!(o(t)||(t=>!(!r(t)||"[object NodeList]"!==s(t)))(t)||(e=t,r(e)&&"[object DocumentFragment]"===s(e))||(t=>!(!r(t)||!("[object Text]"===s(t)||t.tagName&&3===t.nodeType)))(t)));var e},k=(t,e,s)=>{let i=t.tagName.toLowerCase();switch(e){case"style":t.style.cssText=s;break;case"value":"input"===i||"textarea"===i?t.value=s:t.setAttribute(e,s);break;case"className":t.className=s;break;default:t.setAttribute(e,s)}},A=(s,i,l)=>{const o=document.createDocumentFragment(),n=document.createElement(s),h=e=>z(e)||t(e),a=e=>{let s;if(!h(e))return!1;z(e)?s=e:t(e)&&(s=document.createTextNode(e)),o.appendChild(s)};return r(i)?Object.keys(i).forEach((t=>{e(i,t)&&k(n,t,i[t])})):T(i)&&i.every((t=>h(t)))&&i.forEach((t=>{a(t)})),T(l)?l.forEach((t=>{a(t)})):a(l),n.appendChild(o),n},N=e=>{const s=new RegExp("^\\s*(?:<\\?xml[^>]*>\\s*)?(?:<\\!doctype svg[^>]*\\s*(?:\\[?(?:\\s*]*>\\s*)*\\]?)*[^>]*>\\s*)?]*>[^]*<\\/svg>\\s*$\\s*$","i");return t(e)&&s.test(e)},O=(e,s={})=>((e,s={})=>{const i=s.size||0,r=s.color||"",l=s.iconSet||"",o=T(i)?i[0]:i,n=T(i)?i[1]:i,h=i?`width:${o}px;height:${n}px;`:"",a=r?h+`color:${r}`:h,c=document.createElement("i");let d,u="",p="";return t(e)?(N(e)?p=e:(u=l&&"icon"!==l?`xlink:href="#${l}-icon-${e}"`:`xlink:href="#icon-${e}"`,p=``),c.className="outline-icon",c.innerHTML=p,N(e)&&(d=c.querySelector("svg"),d.setAttribute("aria-hidden","true"),d.setAttribute("xmlns","http://www.w3.org/2000/svg"),d.setAttribute("class","outline-icon__svg"),d.setAttribute("width","200"),d.setAttribute("height","200"),d.style=a),c):null})(e,s),M=(t,e)=>{const s=new RegExp("(\\s|^)"+e+"(\\s|$)");let i,r;return!!o(t)&&(i=t.className,!!i&&(r=t.classList,r?.contains?t.classList.contains(e):!!s.exec(i)))},D=(t,e)=>{let s,i=t.className;if(!i||!M(t,e))return!1;s=t.classList,s?.remove?s.remove(e):(i=C(i.replace(e,"")),t.className=i)},H=(e,s=!0,i=!0)=>{const r="outline-heading",l=e.innerHTML;let o;if(e.innerHTML=l.replace(/^\d+(\.?\d+)*\s?/gi,""),e.removeAttribute("id"),e.removeAttribute("data-id"),D(e,r),!s)return!1;var n;o=e.querySelector(`.${r}__anchor`),i&&D(e,`${r}_start`),n=C(e.className),t(n)&&""===n&&e.removeAttribute("class"),e.removeChild(o)},j=(e,s=!0)=>{let i=1,r=0;const l=[];return e.forEach(((e,s)=>{const o=e.tagName.replace(/h/i,"");let n=parseInt(o,10),h=-1;var a;n>i?(r+=1,h=1===r?-1:s-1):n===i||nr?1===n?(r=1,h=-1):h=l[s-1].pid:n<=r&&(1===n?r=1:(r-=i-n,r<=1&&(r=1)),h=1===r?-1:((t,e,s)=>{let i,r,l=t[s-1];for(r=0;r]+(>|$)/g,""):"")})})),s?(t=>{const e={};return t.forEach((t=>{const s=JSON.stringify((t=>[t.pid])(t));e[s]=e[s]||[],e[s].push(t),t.index=e[s].length,-1===t.pid&&(t.code=String(t.index))})),Object.keys(e).forEach((s=>{e[s].forEach((e=>{t.filter((t=>t.pid===e.id)).forEach((t=>{t.code=e.code+"."+t.index}))}))})),t})(l):l};class F extends l{constructor(t){super(),this.attrs=F.DEFAULTS,this.$articleElement=null,this.$scrollElement=null,this.$headings=[],this.chapters=[],t&&this.initialize(t)}initialize(e){let s,r,l,n,h;return this.attr(e),h=this.attr("articleElement"),r=this.attr("scrollElement"),l=this.attr("selector"),s=this.attr("created"),t(h)?n=document.querySelector(h):o(h)&&(n=h),n?(this.$articleElement=n,this.$scrollElement=a(r),this.$headings=[...n.querySelectorAll(l)],this.$headings.length<1||(this.chapters=j(this.$headings),i(s)&&s.call(this),this.render().addListeners()),this):this}getChapters(t=!1){const e=this.chapters;return t?((t,e,s)=>{const i={},r=[];return t.forEach(((t,s)=>{i[t[e]]=s,t.children=[]})),t.forEach((e=>{const l=t[i[e[s]]];-1!==e[s]?l.children.push(e):r.push(e)})),r})(e,"id","pid"):e}count(){return this.chapters.length}render(){const t=this.attr("mounted"),e=this.attr("hasAnchor"),s=this.attr("isAtStart"),r=this.attr("showCode"),l=this.attr("anchorURL"),o=this.$headings,n=this.getChapters();return x(),o.forEach(((t,i)=>{const o=n[i].code;((t,e,s)=>{const i=document.createDocumentFragment(),r="outline-heading",l=s.hasAnchor||!0,o=s.isAtStart||!0,n=s.showCode||!1,h=s.chapterCode||"",a=s.anchorURL||"",c=`heading-${e}`,d={id:c,className:o?`${r} ${r}_start`:r,"data-id":e},u=Object.keys(d),p=C(t.innerHTML);let m,f;if(u.forEach((e=>{k(t,e,d[e])})),n&&(t.innerHTML=h+" "+p),!l)return!1;f=O("hash",{iconSet:"outline"}),m=A("a",{id:`anchor-${e}`,className:`${r}__anchor anchor-${e}`,href:a||`#${c}`,target:a?"_blank":"self","data-id":e},[f]),i.appendChild(m),t.appendChild(i)})(t,i,{hasAnchor:e,isAtStart:s,showCode:r,chapterCode:o,anchorURL:l})})),i(t)&&t.call(this),this}scrollTo(t,e){const s=this.$scrollElement;return c(s,t,e),this}destroy(){const t=this.attr("hasAnchor"),e=this.attr("isAtStart"),s=this.attr("beforeDestroy"),r=this.attr("afterDestroy"),l=this.$headings;return i(s)&&s.call(this),this.removeListeners(),l.forEach((s=>{H(s,t,e)})),this.attr(F.DEFAULTS),this.$articleElement=null,this.$scrollElement=null,this.$headings=[],this.chapters=[],i(r)&&r.call(this),this}onAnchorTrigger(t){const e=this.attr("anchorURL"),s=this.attr("afterScroll"),r=this.attr("stickyHeight"),l=t.delegateTarget.parentNode,o=d(l)-(r+10),h=this.$scrollElement,a=h.scrollHeight-h.clientHeight;return this.scrollTo(o,(()=>{i(s)&&s.call(this,"anchor"),n((()=>{w("toolbar:update",{top:o,min:0,max:a})}))})),e||$(t),this}addListeners(){const t=this.$articleElement;return y(t,".outline-heading__anchor","click",this.onAnchorTrigger,this,!0),this}removeListeners(){const t=this.$articleElement;return b(t,"click",this.onAnchorTrigger),this}}F.DEFAULTS={scrollElement:"html,body",articleElement:"#article",selector:"h1,h2,h3,h4,h5,h6",stickyHeight:0,anchorURL:"",hasAnchor:!0,isAtStart:!0,showCode:!1,created:null,mounted:null,afterScroll:null,beforeDestroy:null,afterDestroy:null};const U=(t,e)=>{let s,i;if(M(t,e))return!1;s=t.classList,s?.add?s.add(e):(i=t.className,i+=i.length>0?" "+e:e,t.className=i)},I=(t,e)=>{document.documentElement.style.setProperty(t,e)};let q=2e3;const B=t=>(t?q=t:q+=1,I("--outline-zIndex",`${q}`),q);class R extends l{constructor(t){super(),this.attrs=R.DEFAULTS,this.title="",this.closed=!0,this.$el=null,this.$modal=null,this.$header=null,this.$title=null,this.$close=null,this.$main=null,this.$footer=null,this.$overlay=null,this.zIndex=0,t&&this.initialize(t)}initialize(t){let e;return this.attr(t),this.title=this.attr("title"),e=this.attr("created"),i(e)&&e.call(this),this.render().addListeners(),this}setTitle(t){return this.attr("title",t),this.title=t,this.$title.innerHTML=t,this}isClosed(){return this.closed}render(){const t=this.attr("mounted"),e=this.attr("size"),s=this.attr("placement"),r=this.attr("hasClose"),l=this.attr("hasOverlay"),o=this.attr("hasOffset"),n=this.attr("hasPadding"),h=this.attr("autoHeight"),a=this.attr("customClass");let c,d,u,p,m,f,g,b;return x(),this.zIndex=B(),p=A("h2",{className:"outline-drawer__title"},[this.title]),this.$title=p,r&&(m=A("div",{className:"outline-drawer__close"},[O("close",{size:20})]),this.$close=m),u=A("header",{className:"outline-drawer__header"},[p,m]),this.$header=u,f=A("div",{className:"outline-drawer__main"},[""]),this.$main=f,n||U(f,"outline-drawer_full"),g=A("footer",{className:"outline-drawer__footer"},[""]),this.$footer=g,d=A("div",{className:`outline-drawer__modal outline-drawer_${s} outline-drawer_${e} outline-drawer_closed`},[u,f,g]),this.$modal=d,o&&U(d,"outline-drawer_offset"),h&&U(d,"outline-drawer_auto"),a&&U(d,a),l&&(b=A("div",{className:"outline-drawer__overlay"},[""]),this.$overlay=b),c=A("div",{className:"outline-drawer"},[d,b]),this.$el=c,document.body.appendChild(c),i(t)&&t.call(this),this}open(){const t=this.attr("afterOpened"),e=this.$modal;return U(this.$el,"outline-drawer_opened"),D(e,"outline-drawer_closed"),U(e,"outline-drawer_opened"),n((()=>{this.closed=!1,i(t)&&t.call(this)})),this}close(){const t=this.attr("afterClosed"),e=this.$modal;return D(e,"outline-drawer_opened"),U(e,"outline-drawer_closed"),n((()=>{D(this.$el,"outline-drawer_opened"),this.closed=!0,i(t)&&t.call(this)})),this}toggle(){const t=this.attr("afterToggle"),e=this.isClosed();return e?this.open():this.close(),i(t)&&n((()=>{t.call(this,e)})),this}destroy(){const t=this.attr("afterDestroy"),e=this.attr("beforeDestroy");let s=this.zIndex;return i(e)&&e.call(this),this.removeListeners(),this.attrs=R.DEFAULTS,this.title="",this.closed=!1,this.$el=null,this.$modal=null,this.$header=null,this.$title=null,this.$close=null,this.$main=null,this.$footer=null,this.$overlay=null,s-=1,B(s),this.zIndex=0,i(t)&&t.call(this),this}addListeners(){const t=this.attr("hasClose"),e=this.attr("hasOverlay"),s=this.$el;return t&&y(s,".outline-drawer__close","click",this.onClose,this,!0),e&&y(s,".outline-drawer__overlay","click",this.onClose,this,!0),this}removeListeners(){const t=this.attr("hasClose"),e=this.attr("hasOverlay"),s=this.$el;return t||e?(b(s,"click",this.onClose),this):this}onClose(){return this.close(),this}}R.DEFAULTS={placement:"rtl",title:"标题",size:"regular",hasClose:!0,hasOverlay:!0,hasOffset:!1,hasPadding:!0,autoHeight:!0,created:null,mounted:null,afterClosed:null,afterOpened:null,afterScroll:null,beforeDestroy:null,afterDestroy:null,afterToggle:null};const P=(t,e,s,r,l,o=!1)=>{const n=m.indexOf(e)>-1,h=function(i){let n=l||t;!0===l&&(n=r),!0===o&&b(t,e,h),s.call(n,i,r)};if(!i(s))return!1;t._listeners||(t._listeners=[]),t._listeners.push({el:t,type:e,fn:h,data:r,context:l,capture:n}),s._delegateListener=h,t.addEventListener(e,h,n)},Q=(t,e)=>getComputedStyle(t)[e];class W extends l{constructor(t){super(),this.attrs=W.DEFAULTS,this.$el=null,this.$title=null,this.$main=null,this.$list=null,this.$placeholder=null,this.$parentElement=null,this.$scrollElement=null,this.chapters=[],this.closed=!1,this.active=0,this.offsetTop=0,this.offsetWidth=0,this.$active=null,this.scrollTimer=null,this.resizeTimer=null,this.playing=!1,this.Observer=null,t&&this.initialize(t)}initialize(e){let s,r,l,n;return this.attr(e),s=this.attr("created"),r=this.attr("parentElement"),l=this.attr("scrollElement"),t(r)?n=document.querySelector(r):o(r)&&(n=r),this.$parentElement=n,this.$scrollElement=a(l),this.chapters=this.attr("chapters"),this.closed=this.attr("closed"),this.active=this.attr("active"),i(s)&&s.call(this),this.chapters.length<1||(this.render().addListeners(),this.$active=document.querySelector(`#chapter-${this.active}`)),this}isClosed(){return this.closed}isSticky(){return"sticky"===this.attr("position")}isFixed(){return"fixed"===this.attr("position")}isInside(){return this.isFixed()||this.isSticky()}isOutside(){return!this.isInside()}_paintEdge(){const t=document.createDocumentFragment(),e=this.attr("title"),s=this.attr("customClass"),i=this.$parentElement,r=[];let l,o,n,h,a=null;return i?(this.isInside()&&(a=A("h2",{className:"outline-chapters__title"},[e]),this.$title=a,r.push(a)),n=A("ul",{className:"outline-chapters__list"},[""]),this.$list=n,h=A("div",{className:"outline-chapters__placeholder"},[""]),this.$placeholder=h,o=A("div",{className:"outline-chapters__main"},[n,h]),this.$main=o,r.push(o),l=A("nav",{id:"outline-chapters",className:"outline-chapters outline-chapters_hidden"},r),this.$el=l,this.isSticky()&&(this.calculateStickyHeight(),U(l,"outline-chapters_sticky")),s&&U(l,s),t.appendChild(l),i.appendChild(t),this):this}render(){const t=this.attr("showCode"),e=this.attr("mounted"),s=this.$parentElement,r=this.chapters;let l,o;return!s||r.length<1||(this._paintEdge(),l=this.$el,o=this.$list,((t,e,s=!1)=>{const i=t=>document.querySelector(`#${t}`);e.forEach((e=>{const r=e.pid,l=e.id,o=e.rel,n=A("span",{className:"outline-chapters__text"},[e.text]),h=A("a",{id:`chapter__anchor-${l}`,className:"outline-chapters__anchor",href:"#"+o,rel:o,"data-id":l},[n]);let a,c,d,u;s&&(a=A("span",{className:"outline-chapters__code","data-id":l},[e.code]),h.insertBefore(a,h.firstChild)),c=A("li",{id:`chapter-${l}`,className:"outline-chapters__item","data-id":l},[h]),-1===r?t.appendChild(c):(u=i(`chapter-${r}`),d=i(`subject-${r}`),d?d.appendChild(c):(d=A("ul",{id:"subject-"+r,className:"outline-chapters__subject"},[c]),u.appendChild(d)))}))})(o,r,t),D(l,"outline-chapters_hidden"),this.positionPlaceholder(this.active),this.offsetTop=d(l),this.offsetWidth=l.offsetWidth,this.isFixed()&&(this.sticky(),I("--outline-chapters-width",`${this.offsetWidth}px`)),i(e)&&e.call(this),this.onObserver()),this}positionPlaceholder(t){const e=this.$main,s=this.$list,i=this.$placeholder,r=s.querySelector(".outline-chapters__anchor"),l=parseInt(Q(e,"padding-top"),10),o=parseInt(Q(e,"border-top-width"),10),n=parseInt(Q(s,"padding-top"),10),h=parseInt(Q(s,"margin-top"),10),a=parseInt(Q(s,"border-top-width"),10);let c,d=r.offsetHeight,u=0;return l&&(u+=l),n&&(u+=n),h&&(u+=h),o&&(u+=o),a&&(u+=a),c=d*t,i.style.cssText=`transform: translateY(${u+c}px);height:${d}px;`,this}highlight(t){const e=this.$el.querySelector(`#chapter__anchor-${t}`),s="outline-chapters_active";return e?(this.$active&&D(this.$active,s),this.active=parseInt(e.getAttribute("data-id"),10),this.$active=e,U(this.$active,s),this.positionPlaceholder(this.active),this):this}sticky(){const t=this.attr("afterSticky"),e="outline-chapters_fixed",s=this.$el,r=this.offsetTop,l=this.$scrollElement.scrollTop;let o;return this.isFixed()?(o=l>=r,o?U(s,e):D(s,e),i(t)&&t.call(this,this.isClosed(),o),this):this}calculateStickyHeight(){const t=document.documentElement,e=Math.max(t.clientHeight||0,window.innerHeight||0);return I("--outline-sticky-height",`${e}px`),this}scrollTo(t,e){const s=this.$scrollElement;return c(s,t,e),this}show(){const t="outline-chapters_folded",e="outline-chapters_hidden",s=this.attr("afterOpened"),r=this.$el,l=this.$parentElement;return this.isInside()?(D(l,e),D(r,e),n((()=>{D(l,t),D(r,t)}),30)):D(r,e),this.closed=!1,i(s)&&s.call(this),this}hide(){const t="outline-chapters_folded",e="outline-chapters_hidden",s=this.attr("afterClosed"),r=this.$el,l=this.$parentElement;return this.isInside()?(U(l,t),U(r,t),n((()=>{U(l,e),U(r,e)}))):U(r,e),this.closed=!0,i(s)&&s.call(this),this}toggle(){const t=this.attr("afterToggle"),e=this.offsetTop,s=this.$scrollElement.scrollTop;let r;return this.isClosed()?this.show():this.hide(),i(t)&&n((()=>{r=s>=e,t.call(this,this.isClosed(),r)})),this}destroy(){const t=this.attr("beforeDestroy"),e=this.attr("afterDestroy");return i(t)&&t.call(this),this.removeListeners(),this.$parentElement.removeChild(this.$el),this.attr(W.DEFAULTS),this.$el=null,this.$title=null,this.$main=null,this.$list=null,this.$placeholder=null,this.$parentElement=null,this.$scrollElement=null,this.chapters=[],this.active=0,this.offsetTop=0,this.$active=null,this.closed=!1,this.scrollTimer&&(clearTimeout(this.scrollTimer),this.scrollTimer=null),this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=null),i(e)&&e.call(this),this.Observer&&(this.Observer=null),this}onObserver(){const t=this.attr("selector");let e=null;return this.Observer=((t,e={})=>{const s=e.root||null,r=e.selector||".outline-heading",l=e.context||null,n={rootMargin:e.rootMargin||"0px 0px -90% 0px"},h=new IntersectionObserver((e=>{e.forEach((e=>{e.intersectionRatio>0&&i(t)&&t.call(l||e.target,e.target)}))}),n),a=o(s)?s:document;return s&&(n.root=s),a.querySelectorAll(r).forEach((t=>{h.observe(t)})),h})((t=>{const s=t.getAttribute("data-id");if(this.playing)return!1;e&&clearTimeout(e),e=n((()=>{this.highlight(s)}),100)}),{selector:t,context:this}),this}onSelect(t){const e=this.attr("stickyHeight"),s=t.delegateTarget,r=s.getAttribute("data-id"),l=s.href.split("#")[1],o=document.querySelector(`#${l}`),h=d(o)-(e+10),a=this.$scrollElement.scrollHeight,c=this.attr("afterScroll"),u=()=>{i(c)&&c.call(this,"chapter"),n((()=>{this.playing=!1,w("toolbar:update",{top:h,min:0,max:a})}))};return this.playing=!0,this.isFixed()?(this.sticky(),n((()=>{this.scrollTo(h,u),this.highlight(r)}),10)):(this.scrollTo(h,u),this.highlight(r)),$(t),this}onScroll(){const t=this.$scrollElement;return this.scrollTimer&&clearTimeout(this.scrollTimer),this.scrollTimer=n((()=>{const e=t.scrollTop,s=t.scrollHeight-t.clientHeight;this.isFixed()&&this.sticky(),w("toolbar:update",{top:e,min:0,max:s})}),100),this}onResize(){return this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=n((()=>{this.calculateStickyHeight()})),this}addListeners(){const t=this.$el,e=this.$scrollElement,s=e.tagName.toLowerCase();let i=e;return"html"!==s&&"body"!==s||(i=window),y(t,".outline-chapters__anchor","click",this.onSelect,this,!0),P(i,"scroll",this.onScroll,this,!0),this.isSticky()&&P(i,"resize",this.onResize,this,!0),this}removeListeners(){const t=this.attr("selector"),e=this.$el,s=this.$scrollElement,i=s.tagName.toLowerCase();let r=s;return"html"!==i&&"body"!==i||(r=window),b(e,"click",this.onSelect),b(r,"scroll",this.onScroll),this.isSticky()&&P(r,"resize",this.onResize),this.Observer&&document.querySelectorAll(t).forEach((t=>{this.Observer.unobserve(t)})),this}}W.DEFAULTS={parentElement:"",scrollElement:"",selector:".outline-heading",active:0,closed:!1,showCode:!0,position:"relative",stickyHeight:0,chapters:[],created:null,mounted:null,afterClosed:null,afterOpened:null,afterScroll:null,beforeDestroy:null,afterDestroy:null,afterSticky:null};const V=(t,e=!0)=>{const s=O(t.icon,{iconSet:t.iconSet||"outline",color:t.color||"",size:t.size}),i=A("a",{className:"outline-toolbar__anchor",href:t.link},[s]),r=A("div",{className:`outline-toolbar__button ${t.name}`},[t.link?i:s]);return U(s,"outline-toolbar__icon"),e&&U(r,"outline-toolbar_rounded"),t.disabled&&U(r,"outline-toolbar_disabled"),r},J="outline-toolbar_disabled",Y="outline-toolbar_hidden";class G extends l{constructor(t){super(),this.attrs=G.DEFAULTS,this.$el=null,this.disabled=!1,this.closed=!1,this.buttons=[],t&&this.initialize(t)}initialize(t){let e;return this.attr(t),e=this.attr("created"),this.disabled=this.attr("disabled"),this.closed=this.attr("closed"),i(e)&&e.call(this),this.render().addListeners(),this}isDisabled(t){const e=this.attr("buttons");let s;return t?(s=e.find((e=>e.name===t)),s?.disabled):this.disabled}isClosed(){return this.closed}highlight(t){const e=this.buttons.find((e=>e.name===t)),s="outline-toolbar_active";let i;return i||(i=e.$el,M(i,s)?D(i,s):U(i,s)),this}render(){const t=this.attr("mounted"),e=this.attr("buttons")||[],s=this.attr("rounded"),r=this.attr("placement"),l=document.createDocumentFragment(),o=document.createDocumentFragment();return x(),e.forEach((t=>{const e=V(t,s);l.appendChild(e),this.buttons.push({name:t.name,$el:e})})),this.$el=A("div",{id:"outline-toolbar",className:`outline-toolbar outline-toolbar_${r}`},[l]),o.appendChild(this.$el),document.body.appendChild(o),this.closed&&this.hide(),this.disabled&&this.disable(),i(t)&&t.call(this),this}add(t){const e=this.$el,s=this.attr("buttons"),l=t.action,o=document.createDocumentFragment();let n;return r(t)?(s.push(t),o.appendChild(V(t))):T(t)&&t.forEach((t=>{o.appendChild(V(t))})),e.appendChild(o),l&&i(l.handler)&&(n=l.type||"click",y(e,`.${t.name}`,n,l.handler)),this}remove(t){const e=this.$el,s=this.attr("buttons"),i=s.find((e=>e.name===t));let r,l=-1;return i?(s.forEach(((e,s)=>{e.name===t&&(l=s)})),l>-1&&this.attr().buttons.splice(l,1),r=e.querySelector(`.${t}`),this.switch(t,!1),e.removeChild(r),this):this}switch(t,e){const s=this.$el,i=this.attr("buttons"),r=i.find((e=>e.name===t));let l,o,n,h;return r?(i.forEach((s=>{s.name===t&&(r.disabled=!e)})),l=r.action,h=s.querySelector(`.${t}`),l&&(o=l.type||"click",n=l.handler),e?(D(h,J),o&&n&&y(s,`.${t}`,o,n)):(U(h,J),o&&n&&b(s,o,n)),this):this}disable(t){const e=this.attr("afterDisabled");return t?this.switch(t,!1):(U(this.$el,J),this.removeListeners(),this.disabled=!0,i(e)&&e.call(this)),this}enable(t){const e=this.attr("afterEnabled");return t?this.switch(t,!0):(this.disabled=!1,D(this.$el,J),this.addListeners(),i(e)&&e.call(this)),this}show(t){const e=this.attr("afterOpened"),s=this.attr("buttons").find((e=>e.name===t)),r=this.$el;let l;if(t){if(!s)return this;l=r.querySelector(`.${t}`),D(l,Y)}else D(r,Y),this.closed=!1,i(e)&&n((()=>{e.call(this)}),310);return this}hide(t){const e=this.attr("afterClosed"),s=this.attr("buttons").find((e=>e.name===t)),r=this.$el;let l;if(t){if(!s)return this;l=r.querySelector(`.${t}`),U(l,Y)}else U(r,Y),this.closed=!0,i(e)&&n((()=>{e.call(this)}),310);return this}toggle(){return this.isClosed()?this.show():this.hide(),this}destroy(){const t=this.attr("beforeDestroy"),e=this.attr("afterDestroy");let s=this.$el;return i(t)&&t.call(this),this.removeListeners(),document.body.removeChild(s),s=null,this.attr(G.DEFAULTS),this.disabled=!1,this.closed=!1,this.buttons=[],i(e)&&e.call(this),this}refresh(){const t=this.$el,e=this.attr("buttons")||[];return this.removeListeners(),t.innerHTML="",e.forEach((t=>{this.$el.appendChild(V(t))})),this.addListeners(),this}addListeners(){const e=this.attr("buttons"),s=this.$el;return!e||e.length<1||e.forEach((e=>{const r=e.action;let l,o,n,h;if(this.disabled)return!1;r&&(o=r.handler,t(o)&&(h=o,r.handler=function(){w(h,e.name)},o=r.handler),l=r.type||"click",n=r.context),i(o)&&y(s,`.${e.name}`,l,o,n||this,!0)})),this}removeListeners(){const t=this.attr("buttons"),e=this.$el;return!t||t.length<1||t.forEach((t=>{const s=t.action;let r,l;if(this.disabled)return!1;s&&(l=s.handler,r=s.type||"click"),i(l)&&b(e,r,l)})),this}}G.DEFAULTS={placement:"ltr",closed:!1,disabled:!1,rounded:!0,buttons:[],created:null,mounted:null,afterClosed:null,afterOpened:null,afterDisabled:null,afterEnabled:null,beforeDestroy:null,afterDestroy:null};const K=(()=>{let t=0;return e=>(t+=1,e?e+"-"+t:"guid-"+t)})(),X=(t,e,s=null)=>{const r=K();let l="symbol"==typeof t?t.toString():t;return i(e)?(v[l]||(v[l]=[]),v[l].push({topic:l,callback:e,context:s,token:r}),r):""},Z=t=>{if(!e(v,t))return!1;delete v[t]},tt=(t,e)=>{if(!_(t))return!1;e?(t=>{const e=Object.keys(v);if(!t||e.length<1)return!1;e.forEach((e=>{const s=v[e];let i;s.forEach(((e,r)=>{e.callback!==t&&e.token!==t||(i=e.topic,s.splice(-1,r))})),s.length<1&&Z(i)}))})(e):Z(t)};class et extends l{constructor(t){super(),this.attrs=et.DEFAULTS,this.anchors=null,this.drawer=null,this.chapters=null,this.toolbar=null,this.buttons=[],t&&this.initialize(t)}initialize(t){return this.attr(t).render().addListeners(),this}getChapters(t=!1){return this.anchors.getChapters(t)}count(){return this.anchors.count()}render(){return this._renderAnchors()._renderChapters()._renderToolbar(),this}_renderAnchors(){const t=this.attr("articleElement"),e=this.attr("selector"),s=this.attr("stickyHeight"),i=this.attr("scrollElement"),r=this.attr("showCode"),l=this.attr("anchorURL"),o=this.attr("afterScroll");return this.anchors=new F({articleElement:t,stickyHeight:s,scrollElement:i,selector:e,showCode:r,anchorURL:l,afterScroll:o}),this}_renderChapters(){const t=this.attr("title"),e=this.attr("stickyHeight"),s=this.attr("scrollElement"),i=this.attr("customClass"),r=this.attr("showCode"),l=this.attr("position"),o=this.attr("placement"),n=this.attr("afterSticky"),h=this.attr("afterToggle"),a=this.attr("afterScroll"),c=this.count();let d,u=this.attr("parentElement");return c<1||(d={scrollElement:s,showCode:r,position:l,title:t,stickyHeight:e,chapters:this.getChapters(),afterSticky:n,afterToggle:h,afterScroll:a},"relative"===l?(this.drawer=new R({placement:o,title:t,size:"tiny",hasOffset:!0,hasPadding:!1,customClass:i,afterClosed:()=>{this.toolbar.toggle()}}),u=this.drawer.$main):d.customClass=i,d.parentElement=u,this.chapters=new W(d)),this}_renderToolbar(){const t=this.attr("placement"),e=this.attr("homepage"),s=this.attr("git"),i=this.attr("tags"),r=this.attr("issues"),l=this.attr("tools"),o=this.count(),n={name:"homepage",icon:"homepage",size:20,link:e},h={name:"github",icon:"github",size:20,link:s},a={name:"tags",icon:"tags",size:20,link:i},c={name:"issues",icon:"issues",size:20,link:r},d={name:"menu",icon:"menu",size:18,action:{type:"click",handler:"toolbar:action:toggle"}},u=[];return u.push({name:"up",icon:"up",size:20,action:{type:"click",handler:"toolbar:action:up"}}),o>0&&u.push(d),e&&u.push(n),s&&u.push(h),i&&u.push(a),r&&u.push(c),l?.length>0&&u.push(...l),u.push({name:"down",icon:"down",size:20,action:{type:"click",handler:"toolbar:action:down"}}),this.buttons=[...u],this.toolbar=new G({placement:t,buttons:u}),this}addButton(t){const e=this.toolbar,s=this.buttons;return s.splice(-1,0,t),e.attr({buttons:s}),e.refresh(),this}removeButton(t){return this.toolbar.remove(t),this}toTop(){const t=this.attr("afterScroll"),e=this.toolbar,s=this.chapters,r=this.count();return r>0&&(s.playing=!0),this.scrollTo(0,(()=>{e.hide("up"),e.show("down"),r>0&&(s.highlight(0),s.playing=!1),i(t)&&t.call(e,"up")})),this}toBottom(){const t=this.attr("afterScroll"),e=a(this.attr("scrollElement")),s=this.toolbar,r=this.chapters,l=this.count(),o=Math.floor(e.scrollHeight-e.clientHeight);return l>0&&(r.playing=!0),this.scrollTo(o,(()=>{s.hide("down"),s.show("up"),l>0&&(r.highlight(l-1),r.playing=!1),i(t)&&t.call(s,"bottom")})),this}scrollTo(t,e){const s=this.attr("scrollElement");return c(s,t,e),this}toggle(){const t=this.attr("position"),e=this.toolbar,s=this.drawer,i=this.chapters;return this.count()<1||("relative"!==t?(i.toggle(),e.highlight("menu")):(e.toggle(),n((()=>{i.isInside()?i.toggle():s.toggle()})))),this}destroy(){let t=this.anchors,e=this.chapters,s=this.drawer,i=this.toolbar,r=!1;const l=this.count();return this.removeListeners(),l>0&&(r=e.isOutside(),e.destroy(),e=null,r&&(s.destroy(),s=null)),i.destroy(),i=null,t.destroy(),t=null,this.attr(et.DEFAULTS),this}onToggle(){return this.toggle(),this}onScrollTop(){return this.toTop(),this}onScrollBottom(){return this.toBottom(),this}onToolbarUpdate({top:t,min:e,max:s}){const i=this.toolbar,r=Math.ceil(t);return r<=e?(i.hide("up"),i.show("down")):r>=s?(i.hide("down"),i.show("up")):r>e&&r"string"==typeof t,e=(t,e)=>{const s=Object.prototype.hasOwnProperty;return t&&s.call(t,e)},s=t=>Object.prototype.toString.apply(t),i=t=>"function"==typeof t||"[object Function]"===s(t),r=t=>("[object Object]"===s(t)||"object"==typeof t||i(t))&&null!==t;class l{constructor(t){this.attrs={},t&&this.initialize(t)}initialize(t){return this.attr(t).render().addListeners(),this}attr(s,i){const l=this.attrs;return t(s)?i&&e(l,s)?(l[s]=i,this):l[s]:r(s)?(o=l,n=s,Object.keys(n).forEach((t=>{e(n,t)&&(o[t]=n[t])})),this):0===arguments.length?l:this;var o,n}render(){return this}destroy(){return this.removeListeners(),this}reload(t){return this.destroy().initialize(this.attr(t)),this}addListeners(){return this}removeListeners(){return this}}const o=t=>!!(r(t)&&t.nodeName&&t.tagName&&1===t.nodeType),n=(t,e=300)=>!!i(t)&&setTimeout((()=>{t()}),e),h=t=>t*t,a=(e=null)=>{let s,i;return e?t(e)?i=document.querySelector(e):o(e)&&(i=e):(s=document.querySelectorAll("html,body"),i=s[0].scrollTop-s[1].scrollTop>=0?s[0]:s[1]),i},c=(t,e,s)=>{const r=a(t);let l=r.scrollTop,o=0;const n=e-l,c=r.scrollHeight,d=e-c<=0?e:c,u=t=>(i(s)&&s(t),!1),p=()=>{if(o+=1,n<0){if(l-=h(o),r.scrollTop=l,l<=e)return r.scrollTop=e,u(e)}else if(l+=h(o),r.scrollTop=l,l>=d)return r.scrollTop=d,u(d);requestAnimationFrame(p)};requestAnimationFrame(p)},d=t=>{let e=t.offsetTop;return null!==t.offsetParent&&(e+=d(t.offsetParent)),e},u=(t,e="")=>{const s=e.replace(/^>/i,"");return!!(e&&s&&t)&&(t.matches?t.matches(s):!!t.msMatchesSelector&&t.msMatchesSelector(s))},p=t=>t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode,m=["focusout","blur","focusin","focus","load","unload","mouseenter","mouseleave"],f=(t,e,s)=>{const i=m.indexOf(e)>-1;s._delegateListener&&delete(s=s._delegateListener)._delegateListener,function(t,e,s){const i=t._listeners;let r=-1;if(i.length<1)return!1;i.forEach(((t,i)=>{const l=t.fn;e===t.type&&(r=i,l===s&&(r=i))})),r>-1&&i.splice(r,1)}(t,e,s),t.removeEventListener(e,s,i)},g=function(e,s,i=!1){const r=t(e)?document.querySelector(e):e,l=r.childNodes,n=((e,s)=>{let i=e._listeners||[];return t(s)&&s&&(i=i.filter((t=>t.type===s))),i})(r,s);n.forEach((t=>{f(r,t.type,t.fn)})),(i||!0===s||1===arguments.length)&&r&&l&&l.forEach((t=>{o(t)&&g(t,s,i)}))},b=(t,e,s)=>{if(!i(s))return g(t,e);f(t,e,s)},y=(t,e,s,i,r,l,o=!1)=>{const n=m.indexOf(s)>-1,h=function(n){const a=function(t){const e=t.target;return(s=e)&&3===s.nodeType?s.parentNode:s;var s}(n),c=((t,e,s,i)=>{const r=s||document;if(!t)return null;do{if(null!=e&&(e.startsWith(">")?t.parentNode===r&&u(t,e):u(t,e))||i&&t===r)return t;if(t===r)break}while(t=p(t))})(a,e,t);let d=l||t;n.delegateTarget=c,!0===l&&(d=r),c&&(!0===o&&b(t,s,h),i.call(d,n,r))};t._listeners||(t._listeners=[]),t._listeners.push({el:t,selector:e,type:s,fn:h,data:r,context:l,capture:n}),i._delegateListener=h,t.addEventListener(s,h,n)},$=function(t){t.stopPropagation(),t.preventDefault()},v={},E=t=>e(v,t)&&v[t].length>0,_=(t,e=!0)=>e?E(t):(t=>{let e=E(t),s=t.lastIndexOf(".");for(;!e&&-1!==s;)s=(t=t.substring(0,s)).lastIndexOf("."),e=E(t);return e})(t),w=(t,e,i=!0)=>{const r=t=>{if(!E(t))return!1;v[t].forEach((t=>{const i=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]","[object BigInt64Array]","[object BigUint64Array]"].indexOf(s(e))>-1?e.toString():e;t.callback.call(t.context||t,i)}))},l=()=>{let e=t,s=t.lastIndexOf(".");for(;-1!==s;)e=e.substring(0,s),s=e.lastIndexOf("."),r(e);r(t),r("*")};if(!_(t))return!1;i?setTimeout(l,10):l()},T=t=>Array.isArray?Array.isArray(t):"[object Array]"===s(t),S=['','','','','','','','',''],L=(e,s="icon")=>t(e)?((t,e="icon")=>{const s=/id="(.*?)"/,i=/^(\w+)-/;return S.find((r=>{const l=s.exec(r)[1];return i.exec(l)[1]===e&&l===("icon"===e?`${e}-${t}`:`${e}-icon-${t}`)}))})(e,s):[...S],x=(e="")=>{const s=document.body;let i=document.querySelector("#outline-icons"),r=[];(e=>{if(!e)return!1;T(e)&&e.length>0?e.forEach((e=>{-1===S.indexOf(e)&&t(e)&&S.push(e)})):t(e)&&S.push(e)})(e),r=L(),i?i.innerHTML=r.join(""):(i=document.createElement("div"),i.innerHTML=``,s.insertBefore(i.firstChild,s.firstChild))},C=e=>!!t(e)&&e.replace(/(^\s+)|(\s+$)/g,""),z=t=>{return!(!r(t)||!(o(t)||(t=>!(!r(t)||"[object NodeList]"!==s(t)))(t)||(e=t,r(e)&&"[object DocumentFragment]"===s(e))||(t=>!(!r(t)||!("[object Text]"===s(t)||t.tagName&&3===t.nodeType)))(t)));var e},k=(t,e,s)=>{let i=t.tagName.toLowerCase();switch(e){case"style":t.style.cssText=s;break;case"value":"input"===i||"textarea"===i?t.value=s:t.setAttribute(e,s);break;case"className":t.className=s;break;default:t.setAttribute(e,s)}},A=(s,i,l)=>{const o=document.createDocumentFragment(),n=document.createElement(s),h=e=>z(e)||t(e),a=e=>{let s;if(!h(e))return!1;z(e)?s=e:t(e)&&(s=document.createTextNode(e)),o.appendChild(s)};return r(i)?Object.keys(i).forEach((t=>{e(i,t)&&k(n,t,i[t])})):T(i)&&i.every((t=>h(t)))&&i.forEach((t=>{a(t)})),T(l)?l.forEach((t=>{a(t)})):a(l),n.appendChild(o),n},N=e=>{const s=new RegExp("^\\s*(?:<\\?xml[^>]*>\\s*)?(?:<\\!doctype svg[^>]*\\s*(?:\\[?(?:\\s*]*>\\s*)*\\]?)*[^>]*>\\s*)?]*>[^]*<\\/svg>\\s*$\\s*$","i");return t(e)&&s.test(e)},O=(e,s={})=>((e,s={})=>{const i=s.size||0,r=s.color||"",l=s.iconSet||"",o=T(i)?i[0]:i,n=T(i)?i[1]:i,h=i?`width:${o}px;height:${n}px;`:"",a=r?h+`color:${r}`:h,c=document.createElement("i");let d,u="",p="";return t(e)?(N(e)?p=e:(u=l&&"icon"!==l?`xlink:href="#${l}-icon-${e}"`:`xlink:href="#icon-${e}"`,p=``),c.className="outline-icon",c.innerHTML=p,N(e)&&(d=c.querySelector("svg"),d.setAttribute("aria-hidden","true"),d.setAttribute("xmlns","http://www.w3.org/2000/svg"),d.setAttribute("class","outline-icon__svg"),d.setAttribute("width","200"),d.setAttribute("height","200"),d.style=a),c):null})(e,s),M=(t,e)=>{const s=new RegExp("(\\s|^)"+e+"(\\s|$)");let i,r;return!!o(t)&&(i=t.className,!!i&&(r=t.classList,r?.contains?t.classList.contains(e):!!s.exec(i)))},D=(t,e)=>{let s,i=t.className;if(!i||!M(t,e))return!1;s=t.classList,s?.remove?s.remove(e):(i=C(i.replace(e,"")),t.className=i)},H=(e,s=!0,i=!0)=>{const r="outline-heading",l=e.innerHTML;let o;if(e.innerHTML=l.replace(/^\d+(\.?\d+)*\s?/gi,""),e.removeAttribute("id"),e.removeAttribute("data-id"),D(e,r),!s)return!1;var n;o=e.querySelector(`.${r}__anchor`),i&&D(e,`${r}_start`),n=C(e.className),t(n)&&""===n&&e.removeAttribute("class"),e.removeChild(o)},j=(e,s=!0)=>{let i=1,r=0;const l=[];return e.forEach(((e,s)=>{const o=e.tagName.replace(/h/i,"");let n=parseInt(o,10),h=-1;var a;n>i?(r+=1,h=1===r?-1:s-1):n===i||nr?1===n?(r=1,h=-1):h=l[s-1].pid:n<=r&&(1===n?r=1:(r-=i-n,r<=1&&(r=1)),h=1===r?-1:((t,e,s)=>{let i,r,l=t[s-1];for(r=0;r]+(>|$)/g,""):"")})})),s?(t=>{const e={};return t.forEach((t=>{const s=JSON.stringify((t=>[t.pid])(t));e[s]=e[s]||[],e[s].push(t),t.index=e[s].length,-1===t.pid&&(t.code=String(t.index))})),Object.keys(e).forEach((s=>{e[s].forEach((e=>{t.filter((t=>t.pid===e.id)).forEach((t=>{t.code=e.code+"."+t.index}))}))})),t})(l):l};class F extends l{constructor(t){super(),this.attrs=F.DEFAULTS,this.$articleElement=null,this.$scrollElement=null,this.$headings=[],this.chapters=[],t&&this.initialize(t)}initialize(e){let s,r,l,n,h;return this.attr(e),h=this.attr("articleElement"),r=this.attr("scrollElement"),l=this.attr("selector"),s=this.attr("created"),t(h)?n=document.querySelector(h):o(h)&&(n=h),n?(this.$articleElement=n,this.$scrollElement=a(r),this.$headings=[...n.querySelectorAll(l)],this.$headings.length<1||(this.chapters=j(this.$headings),i(s)&&s.call(this),this.render().addListeners()),this):this}getChapters(t=!1){const e=this.chapters;return t?((t,e,s)=>{const i={},r=[];return t.forEach(((t,s)=>{i[t[e]]=s,t.children=[]})),t.forEach((e=>{const l=t[i[e[s]]];-1!==e[s]?l.children.push(e):r.push(e)})),r})(e,"id","pid"):e}count(){return this.chapters.length}render(){const t=this.attr("mounted"),e=this.attr("hasAnchor"),s=this.attr("isAtStart"),r=this.attr("showCode"),l=this.attr("anchorURL"),o=this.$headings,n=this.getChapters();return x(),o.forEach(((t,i)=>{const o=n[i].code;((t,e,s)=>{const i=document.createDocumentFragment(),r="outline-heading",l=s.hasAnchor||!0,o=s.isAtStart||!0,n=s.showCode||!1,h=s.chapterCode||"",a=s.anchorURL||"",c=`heading-${e}`,d={id:c,className:o?`${r} ${r}_start`:r,"data-id":e},u=Object.keys(d),p=C(t.innerHTML);let m,f;if(u.forEach((e=>{k(t,e,d[e])})),n&&(t.innerHTML=h+" "+p),!l)return!1;f=O("hash",{iconSet:"outline"}),m=A("a",{id:`anchor-${e}`,className:`${r}__anchor anchor-${e}`,href:a||`#${c}`,target:a?"_blank":"self","data-id":e},[f]),i.appendChild(m),t.appendChild(i)})(t,i,{hasAnchor:e,isAtStart:s,showCode:r,chapterCode:o,anchorURL:l})})),i(t)&&t.call(this),this}scrollTo(t,e){const s=this.$scrollElement;return c(s,t,e),this}destroy(){const t=this.attr("hasAnchor"),e=this.attr("isAtStart"),s=this.attr("beforeDestroy"),r=this.attr("afterDestroy"),l=this.$headings;return i(s)&&s.call(this),this.removeListeners(),l.forEach((s=>{H(s,t,e)})),this.attr(F.DEFAULTS),this.$articleElement=null,this.$scrollElement=null,this.$headings=[],this.chapters=[],i(r)&&r.call(this),this}onAnchorTrigger(t){const e=this.attr("anchorURL"),s=this.attr("afterScroll"),r=this.attr("stickyHeight"),l=t.delegateTarget.parentNode,o=d(l)-(r+10),h=this.$scrollElement,a=h.scrollHeight-h.clientHeight;return this.scrollTo(o,(()=>{i(s)&&s.call(this,"anchor"),n((()=>{w("toolbar:update",{top:o,min:0,max:a})}))})),e||$(t),this}addListeners(){const t=this.$articleElement;return y(t,".outline-heading__anchor","click",this.onAnchorTrigger,this,!0),this}removeListeners(){const t=this.$articleElement;return b(t,"click",this.onAnchorTrigger),this}}F.DEFAULTS={scrollElement:"html,body",articleElement:"#article",selector:"h1,h2,h3,h4,h5,h6",stickyHeight:0,anchorURL:"",hasAnchor:!0,isAtStart:!0,showCode:!1,created:null,mounted:null,afterScroll:null,beforeDestroy:null,afterDestroy:null};const U=(t,e)=>{let s,i;if(M(t,e))return!1;s=t.classList,s?.add?s.add(e):(i=t.className,i+=i.length>0?" "+e:e,t.className=i)},I=(t,e)=>{document.documentElement.style.setProperty(t,e)};let q=2e3;const B=t=>(t?q=t:q+=1,I("--outline-zIndex",`${q}`),q);class R extends l{constructor(t){super(),this.attrs=R.DEFAULTS,this.title="",this.closed=!0,this.$el=null,this.$modal=null,this.$header=null,this.$title=null,this.$close=null,this.$main=null,this.$footer=null,this.$overlay=null,this.zIndex=0,t&&this.initialize(t)}initialize(t){let e;return this.attr(t),this.title=this.attr("title"),e=this.attr("created"),i(e)&&e.call(this),this.render().addListeners(),this}setTitle(t){return this.attr("title",t),this.title=t,this.$title.innerHTML=t,this}isClosed(){return this.closed}render(){const t=this.attr("mounted"),e=this.attr("size"),s=this.attr("placement"),r=this.attr("hasClose"),l=this.attr("hasOverlay"),o=this.attr("hasOffset"),n=this.attr("hasPadding"),h=this.attr("autoHeight"),a=this.attr("customClass");let c,d,u,p,m,f,g,b;return x(),this.zIndex=B(),p=A("h2",{className:"outline-drawer__title"},[this.title]),this.$title=p,r&&(m=A("div",{className:"outline-drawer__close"},[O("close",{size:20})]),this.$close=m),u=A("header",{className:"outline-drawer__header"},[p,m]),this.$header=u,f=A("div",{className:"outline-drawer__main"},[""]),this.$main=f,n||U(f,"outline-drawer_full"),g=A("footer",{className:"outline-drawer__footer"},[""]),this.$footer=g,d=A("div",{className:`outline-drawer__modal outline-drawer_${s} outline-drawer_${e} outline-drawer_closed`},[u,f,g]),this.$modal=d,o&&U(d,"outline-drawer_offset"),h&&U(d,"outline-drawer_auto"),a&&U(d,a),l&&(b=A("div",{className:"outline-drawer__overlay"},[""]),this.$overlay=b),c=A("div",{className:"outline-drawer"},[d,b]),this.$el=c,document.body.appendChild(c),i(t)&&t.call(this),this}open(){const t=this.attr("afterOpened"),e=this.$modal;return U(this.$el,"outline-drawer_opened"),D(e,"outline-drawer_closed"),U(e,"outline-drawer_opened"),n((()=>{this.closed=!1,i(t)&&t.call(this)})),this}close(){const t=this.attr("afterClosed"),e=this.$modal;return D(e,"outline-drawer_opened"),U(e,"outline-drawer_closed"),n((()=>{D(this.$el,"outline-drawer_opened"),this.closed=!0,i(t)&&t.call(this)})),this}toggle(){const t=this.attr("afterToggle"),e=this.isClosed();return e?this.open():this.close(),i(t)&&n((()=>{t.call(this,e)})),this}destroy(){const t=this.attr("afterDestroy"),e=this.attr("beforeDestroy");let s=this.zIndex;return i(e)&&e.call(this),this.removeListeners(),this.attrs=R.DEFAULTS,this.title="",this.closed=!1,this.$el=null,this.$modal=null,this.$header=null,this.$title=null,this.$close=null,this.$main=null,this.$footer=null,this.$overlay=null,s-=1,B(s),this.zIndex=0,i(t)&&t.call(this),this}addListeners(){const t=this.attr("hasClose"),e=this.attr("hasOverlay"),s=this.$el;return t&&y(s,".outline-drawer__close","click",this.onClose,this,!0),e&&y(s,".outline-drawer__overlay","click",this.onClose,this,!0),this}removeListeners(){const t=this.attr("hasClose"),e=this.attr("hasOverlay"),s=this.$el;return t||e?(b(s,"click",this.onClose),this):this}onClose(){return this.close(),this}}R.DEFAULTS={placement:"rtl",title:"标题",size:"regular",hasClose:!0,hasOverlay:!0,hasOffset:!1,hasPadding:!0,autoHeight:!0,created:null,mounted:null,afterClosed:null,afterOpened:null,afterScroll:null,beforeDestroy:null,afterDestroy:null,afterToggle:null};const P=(t,e,s,r,l,o=!1)=>{const n=m.indexOf(e)>-1,h=function(i){let n=l||t;!0===l&&(n=r),!0===o&&b(t,e,h),s.call(n,i,r)};if(!i(s))return!1;t._listeners||(t._listeners=[]),t._listeners.push({el:t,type:e,fn:h,data:r,context:l,capture:n}),s._delegateListener=h,t.addEventListener(e,h,n)},Q=(t,e)=>getComputedStyle(t)[e];class W extends l{constructor(t){super(),this.attrs=W.DEFAULTS,this.$el=null,this.$title=null,this.$main=null,this.$list=null,this.$placeholder=null,this.$parentElement=null,this.$scrollElement=null,this.chapters=[],this.closed=!1,this.active=0,this.offsetTop=0,this.offsetWidth=0,this.$active=null,this.scrollTimer=null,this.resizeTimer=null,this.playing=!1,this.Observer=null,t&&this.initialize(t)}initialize(e){let s,r,l,n;return this.attr(e),s=this.attr("created"),r=this.attr("parentElement"),l=this.attr("scrollElement"),t(r)?n=document.querySelector(r):o(r)&&(n=r),this.$parentElement=n,this.$scrollElement=a(l),this.chapters=this.attr("chapters"),this.closed=this.attr("closed"),this.active=this.attr("active"),i(s)&&s.call(this),this.chapters.length<1||(this.render().addListeners(),this.$active=document.querySelector(`#chapter-${this.active}`)),this}isClosed(){return this.closed}isSticky(){return"sticky"===this.attr("position")}isFixed(){return"fixed"===this.attr("position")}isInside(){return this.isFixed()||this.isSticky()}isOutside(){return!this.isInside()}_paintEdge(){const t=document.createDocumentFragment(),e=this.attr("title"),s=this.attr("customClass"),i=this.$parentElement,r=[];let l,o,n,h,a=null;return i?(this.isInside()&&(a=A("h2",{className:"outline-chapters__title"},[e]),this.$title=a,r.push(a)),n=A("ul",{className:"outline-chapters__list"},[""]),this.$list=n,h=A("div",{className:"outline-chapters__placeholder"},[""]),this.$placeholder=h,o=A("div",{className:"outline-chapters__main"},[n,h]),this.$main=o,r.push(o),l=A("nav",{id:"outline-chapters",className:"outline-chapters outline-chapters_hidden"},r),this.$el=l,this.isSticky()&&(this.calculateStickyHeight(),U(l,"outline-chapters_sticky")),s&&U(l,s),t.appendChild(l),i.appendChild(t),this):this}render(){const t=this.attr("showCode"),e=this.attr("mounted"),s=this.$parentElement,r=this.chapters;let l,o;return!s||r.length<1||(this._paintEdge(),l=this.$el,o=this.$list,((t,e,s=!1)=>{const i=t=>document.querySelector(`#${t}`);e.forEach((e=>{const r=e.pid,l=e.id,o=e.rel,n=A("span",{className:"outline-chapters__text"},[e.text]),h=A("a",{id:`chapter__anchor-${l}`,className:"outline-chapters__anchor",href:"#"+o,rel:o,"data-id":l},[n]);let a,c,d,u;s&&(a=A("span",{className:"outline-chapters__code","data-id":l},[e.code]),h.insertBefore(a,h.firstChild)),c=A("li",{id:`chapter-${l}`,className:"outline-chapters__item","data-id":l},[h]),-1===r?t.appendChild(c):(u=i(`chapter-${r}`),d=i(`subject-${r}`),d?d.appendChild(c):(d=A("ul",{id:"subject-"+r,className:"outline-chapters__subject"},[c]),u.appendChild(d)))}))})(o,r,t),D(l,"outline-chapters_hidden"),this.positionPlaceholder(this.active),this.offsetTop=d(l),this.offsetWidth=l.offsetWidth,this.isFixed()&&(this.sticky(),I("--outline-chapters-width",`${this.offsetWidth}px`)),i(e)&&e.call(this),this.onObserver()),this}positionPlaceholder(t){const e=this.$main,s=this.$list,i=this.$placeholder,r=s.querySelector(".outline-chapters__anchor"),l=parseInt(Q(e,"padding-top"),10),o=parseInt(Q(e,"border-top-width"),10),n=parseInt(Q(s,"padding-top"),10),h=parseInt(Q(s,"margin-top"),10),a=parseInt(Q(s,"border-top-width"),10);let c,d=r.offsetHeight,u=0;return l&&(u+=l),n&&(u+=n),h&&(u+=h),o&&(u+=o),a&&(u+=a),c=d*t,i.style.cssText=`transform: translateY(${u+c}px);height:${d}px;`,this}highlight(t){const e=this.$el.querySelector(`#chapter__anchor-${t}`),s="outline-chapters_active";return e?(this.$active&&D(this.$active,s),this.active=parseInt(e.getAttribute("data-id"),10),this.$active=e,U(this.$active,s),this.positionPlaceholder(this.active),this):this}sticky(){const t=this.attr("afterSticky"),e="outline-chapters_fixed",s=this.$el,r=this.offsetTop,l=this.$scrollElement.scrollTop;let o;return this.isFixed()?(o=l>=r,o?U(s,e):D(s,e),i(t)&&t.call(this,this.isClosed(),o),this):this}calculateStickyHeight(){const t=document.documentElement,e=Math.max(t.clientHeight||0,window.innerHeight||0);return I("--outline-sticky-height",`${e}px`),this}scrollTo(t,e){const s=this.$scrollElement;return c(s,t,e),this}show(){const t="outline-chapters_folded",e="outline-chapters_hidden",s=this.attr("afterOpened"),r=this.$el,l=this.$parentElement;return this.isInside()?(D(l,e),D(r,e),n((()=>{D(l,t),D(r,t)}),30)):D(r,e),this.closed=!1,i(s)&&s.call(this),this}hide(){const t="outline-chapters_folded",e="outline-chapters_hidden",s=this.attr("afterClosed"),r=this.$el,l=this.$parentElement;return this.isInside()?(U(l,t),U(r,t),n((()=>{U(l,e),U(r,e)}))):U(r,e),this.closed=!0,i(s)&&s.call(this),this}toggle(){const t=this.attr("afterToggle"),e=this.offsetTop,s=this.$scrollElement.scrollTop;let r;return this.isClosed()?this.show():this.hide(),i(t)&&n((()=>{r=s>=e,t.call(this,this.isClosed(),r)})),this}destroy(){const t=this.attr("beforeDestroy"),e=this.attr("afterDestroy");return i(t)&&t.call(this),this.removeListeners(),this.$parentElement.removeChild(this.$el),this.attr(W.DEFAULTS),this.$el=null,this.$title=null,this.$main=null,this.$list=null,this.$placeholder=null,this.$parentElement=null,this.$scrollElement=null,this.chapters=[],this.active=0,this.offsetTop=0,this.$active=null,this.closed=!1,this.scrollTimer&&(clearTimeout(this.scrollTimer),this.scrollTimer=null),this.resizeTimer&&(clearTimeout(this.resizeTimer),this.resizeTimer=null),i(e)&&e.call(this),this.Observer&&(this.Observer=null),this}onObserver(){const t=this.attr("selector");let e=null;return this.Observer=((t,e={})=>{const s=e.root||null,r=e.selector||".outline-heading",l=e.context||null,n={rootMargin:e.rootMargin||"0px 0px -90% 0px"},h=new IntersectionObserver((e=>{e.forEach((e=>{e.intersectionRatio>0&&i(t)&&t.call(l||e.target,e.target)}))}),n),a=o(s)?s:document;return s&&(n.root=s),a.querySelectorAll(r).forEach((t=>{h.observe(t)})),h})((t=>{const s=t.getAttribute("data-id");if(this.playing)return!1;e&&clearTimeout(e),e=n((()=>{this.highlight(s)}),100)}),{selector:t,context:this}),this}onSelect(t){const e=this.attr("stickyHeight"),s=t.delegateTarget,r=s.getAttribute("data-id"),l=s.href.split("#")[1],o=document.querySelector(`#${l}`),h=d(o)-(e+10),a=this.$scrollElement.scrollHeight,c=this.attr("afterScroll"),u=()=>{i(c)&&c.call(this,"chapter"),n((()=>{this.playing=!1,w("toolbar:update",{top:h,min:0,max:a})}))};return this.playing=!0,this.isFixed()?(this.sticky(),n((()=>{this.scrollTo(h,u),this.highlight(r)}),10)):(this.scrollTo(h,u),this.highlight(r)),$(t),this}onScroll(){const t=this.$scrollElement;return this.scrollTimer&&clearTimeout(this.scrollTimer),this.scrollTimer=n((()=>{const e=t.scrollTop,s=t.scrollHeight-t.clientHeight;this.isFixed()&&this.sticky(),w("toolbar:update",{top:e,min:0,max:s})}),100),this}onResize(){return this.resizeTimer&&clearTimeout(this.resizeTimer),this.resizeTimer=n((()=>{this.calculateStickyHeight()})),this}addListeners(){const t=this.$el,e=this.$scrollElement,s=e.tagName.toLowerCase();let i=e;return"html"!==s&&"body"!==s||(i=window),y(t,".outline-chapters__anchor","click",this.onSelect,this,!0),P(i,"scroll",this.onScroll,this,!0),this.isSticky()&&P(i,"resize",this.onResize,this,!0),this}removeListeners(){const t=this.attr("selector"),e=this.$el,s=this.$scrollElement,i=s.tagName.toLowerCase();let r=s;return"html"!==i&&"body"!==i||(r=window),b(e,"click",this.onSelect),b(r,"scroll",this.onScroll),this.isSticky()&&P(r,"resize",this.onResize),this.Observer&&document.querySelectorAll(t).forEach((t=>{this.Observer.unobserve(t)})),this}}W.DEFAULTS={parentElement:"",scrollElement:"",selector:".outline-heading",active:0,closed:!1,showCode:!0,position:"relative",stickyHeight:0,chapters:[],created:null,mounted:null,afterClosed:null,afterOpened:null,afterScroll:null,beforeDestroy:null,afterDestroy:null,afterSticky:null};const V=(t,e=!0)=>{const s=O(t.icon,{iconSet:t.iconSet||"outline",color:t.color||"",size:t.size}),i=A("a",{className:"outline-toolbar__anchor",href:t.link},[s]),r=A("div",{className:`outline-toolbar__button ${t.name}`},[t.link?i:s]);return U(s,"outline-toolbar__icon"),e&&U(r,"outline-toolbar_rounded"),t.disabled&&U(r,"outline-toolbar_disabled"),r},J="outline-toolbar_disabled",Y="outline-toolbar_hidden";class G extends l{constructor(t){super(),this.attrs=G.DEFAULTS,this.$el=null,this.disabled=!1,this.closed=!1,this.buttons=[],t&&this.initialize(t)}initialize(t){let e;return this.attr(t),e=this.attr("created"),this.disabled=this.attr("disabled"),this.closed=this.attr("closed"),i(e)&&e.call(this),this.render().addListeners(),this}isDisabled(t){const e=this.attr("buttons");let s;return t?(s=e.find((e=>e.name===t)),s?.disabled):this.disabled}isClosed(){return this.closed}highlight(t){const e=this.buttons.find((e=>e.name===t)),s="outline-toolbar_active";let i;return i||(i=e.$el,M(i,s)?D(i,s):U(i,s)),this}render(){const t=this.attr("mounted"),e=this.attr("buttons")||[],s=this.attr("rounded"),r=this.attr("placement"),l=document.createDocumentFragment(),o=document.createDocumentFragment();return x(),e.forEach((t=>{const e=V(t,s);l.appendChild(e),this.buttons.push({name:t.name,$el:e})})),this.$el=A("div",{id:"outline-toolbar",className:`outline-toolbar outline-toolbar_${r}`},[l]),o.appendChild(this.$el),document.body.appendChild(o),this.closed&&this.hide(),this.disabled&&this.disable(),i(t)&&t.call(this),this}add(t){const e=this.$el,s=this.attr("buttons"),l=t.action,o=document.createDocumentFragment();let n;return r(t)?(s.push(t),o.appendChild(V(t))):T(t)&&t.forEach((t=>{o.appendChild(V(t))})),e.appendChild(o),l&&i(l.handler)&&(n=l.type||"click",y(e,`.${t.name}`,n,l.handler)),this}remove(t){const e=this.$el,s=this.attr("buttons"),i=s.find((e=>e.name===t));let r,l=-1;return i?(s.forEach(((e,s)=>{e.name===t&&(l=s)})),l>-1&&this.attr().buttons.splice(l,1),r=e.querySelector(`.${t}`),this.switch(t,!1),e.removeChild(r),this):this}switch(t,e){const s=this.$el,i=this.attr("buttons"),r=i.find((e=>e.name===t));let l,o,n,h;return r?(i.forEach((s=>{s.name===t&&(r.disabled=!e)})),l=r.action,h=s.querySelector(`.${t}`),l&&(o=l.type||"click",n=l.handler),e?(D(h,J),o&&n&&y(s,`.${t}`,o,n)):(U(h,J),o&&n&&b(s,o,n)),this):this}disable(t){const e=this.attr("afterDisabled");return t?this.switch(t,!1):(U(this.$el,J),this.removeListeners(),this.disabled=!0,i(e)&&e.call(this)),this}enable(t){const e=this.attr("afterEnabled");return t?this.switch(t,!0):(this.disabled=!1,D(this.$el,J),this.addListeners(),i(e)&&e.call(this)),this}show(t){const e=this.attr("afterOpened"),s=this.attr("buttons").find((e=>e.name===t)),r=this.$el;let l;if(t){if(!s)return this;l=r.querySelector(`.${t}`),D(l,Y)}else D(r,Y),this.closed=!1,i(e)&&n((()=>{e.call(this)}),310);return this}hide(t){const e=this.attr("afterClosed"),s=this.attr("buttons").find((e=>e.name===t)),r=this.$el;let l;if(t){if(!s)return this;l=r.querySelector(`.${t}`),U(l,Y)}else U(r,Y),this.closed=!0,i(e)&&n((()=>{e.call(this)}),310);return this}toggle(){return this.isClosed()?this.show():this.hide(),this}destroy(){const t=this.attr("beforeDestroy"),e=this.attr("afterDestroy");let s=this.$el;return i(t)&&t.call(this),this.removeListeners(),document.body.removeChild(s),s=null,this.attr(G.DEFAULTS),this.disabled=!1,this.closed=!1,this.buttons=[],i(e)&&e.call(this),this}refresh(){const t=this.$el,e=this.attr("buttons")||[];return this.removeListeners(),t.innerHTML="",e.forEach((t=>{this.$el.appendChild(V(t))})),this.addListeners(),this}addListeners(){const e=this.attr("buttons"),s=this.$el;return!e||e.length<1||e.forEach((e=>{const r=e.action;let l,o,n,h;if(this.disabled)return!1;r&&(o=r.handler,t(o)&&(h=o,r.handler=function(){w(h,e.name)},o=r.handler),l=r.type||"click",n=r.context),i(o)&&y(s,`.${e.name}`,l,o,n||this,!0)})),this}removeListeners(){const t=this.attr("buttons"),e=this.$el;return!t||t.length<1||t.forEach((t=>{const s=t.action;let r,l;if(this.disabled)return!1;s&&(l=s.handler,r=s.type||"click"),i(l)&&b(e,r,l)})),this}}G.DEFAULTS={placement:"ltr",closed:!1,disabled:!1,rounded:!0,buttons:[],created:null,mounted:null,afterClosed:null,afterOpened:null,afterDisabled:null,afterEnabled:null,beforeDestroy:null,afterDestroy:null};const K=(()=>{let t=0;return e=>(t+=1,e?e+"-"+t:"guid-"+t)})(),X=(t,e,s=null)=>{const r=K();let l="symbol"==typeof t?t.toString():t;return i(e)?(v[l]||(v[l]=[]),v[l].push({topic:l,callback:e,context:s,token:r}),r):""},Z=t=>{if(!e(v,t))return!1;delete v[t]},tt=(t,e)=>{if(!_(t))return!1;e?(t=>{const e=Object.keys(v);if(!t||e.length<1)return!1;e.forEach((e=>{const s=v[e];let i;s.forEach(((e,r)=>{e.callback!==t&&e.token!==t||(i=e.topic,s.splice(-1,r))})),s.length<1&&Z(i)}))})(e):Z(t)};class et extends l{constructor(t){super(),this.attrs=et.DEFAULTS,this.anchors=null,this.drawer=null,this.chapters=null,this.toolbar=null,this.buttons=[],t&&this.initialize(t)}initialize(t){return this.attr(t).render().addListeners(),this}getChapters(t=!1){return this.anchors.getChapters(t)}count(){return this.anchors.count()}render(){const t=this.attr("scrollElement"),e=document.querySelector(t)||document.getElementById(t);return this._renderAnchors()._renderChapters()._renderToolbar(),e&&this.onToolbarUpdate({top:e.scrollTop,min:0,max:e.scrollHeight}),this}_renderAnchors(){const t=this.attr("articleElement"),e=this.attr("selector"),s=this.attr("stickyHeight"),i=this.attr("scrollElement"),r=this.attr("showCode"),l=this.attr("anchorURL"),o=this.attr("afterScroll");return this.anchors=new F({articleElement:t,stickyHeight:s,scrollElement:i,selector:e,showCode:r,anchorURL:l,afterScroll:o}),this}_renderChapters(){const t=this.attr("title"),e=this.attr("stickyHeight"),s=this.attr("scrollElement"),i=this.attr("customClass"),r=this.attr("showCode"),l=this.attr("position"),o=this.attr("placement"),n=this.attr("afterSticky"),h=this.attr("afterToggle"),a=this.attr("afterScroll"),c=this.count();let d,u=this.attr("parentElement");return c<1||(d={scrollElement:s,showCode:r,position:l,title:t,stickyHeight:e,chapters:this.getChapters(),afterSticky:n,afterToggle:h,afterScroll:a},"relative"===l?(this.drawer=new R({placement:o,title:t,size:"tiny",hasOffset:!0,hasPadding:!1,customClass:i,afterClosed:()=>{this.toolbar.toggle()}}),u=this.drawer.$main):d.customClass=i,d.parentElement=u,this.chapters=new W(d)),this}_renderToolbar(){const t=this.attr("placement"),e=this.attr("homepage"),s=this.attr("git"),i=this.attr("tags"),r=this.attr("issues"),l=this.attr("tools"),o=this.count(),n={name:"homepage",icon:"homepage",size:20,link:e},h={name:"github",icon:"github",size:20,link:s},a={name:"tags",icon:"tags",size:20,link:i},c={name:"issues",icon:"issues",size:20,link:r},d={name:"menu",icon:"menu",size:18,action:{type:"click",handler:"toolbar:action:toggle"}},u=[];return u.push({name:"up",icon:"up",size:20,action:{type:"click",handler:"toolbar:action:up"}}),e&&u.push(n),o>0&&u.push(d),s&&u.push(h),i&&u.push(a),r&&u.push(c),l?.length>0&&u.push(...l),u.push({name:"down",icon:"down",size:20,action:{type:"click",handler:"toolbar:action:down"}}),this.buttons=[...u],this.toolbar=new G({placement:t,buttons:u}),this}addButton(t){const e=this.toolbar,s=this.buttons;return s.splice(-1,0,t),e.attr({buttons:s}),e.refresh(),this}removeButton(t){return this.toolbar.remove(t),this}toTop(){const t=this.attr("afterScroll"),e=this.toolbar,s=this.chapters,r=this.count();return r>0&&(s.playing=!0),this.scrollTo(0,(()=>{e.hide("up"),e.show("down"),r>0&&(s.highlight(0),s.playing=!1),i(t)&&t.call(e,"up")})),this}toBottom(){const t=this.attr("afterScroll"),e=a(this.attr("scrollElement")),s=this.toolbar,r=this.chapters,l=this.count(),o=Math.floor(e.scrollHeight-e.clientHeight);return l>0&&(r.playing=!0),this.scrollTo(o,(()=>{s.hide("down"),s.show("up"),l>0&&(r.highlight(l-1),r.playing=!1),i(t)&&t.call(s,"bottom")})),this}scrollTo(t,e){const s=this.attr("scrollElement");return c(s,t,e),this}toggle(){const t=this.attr("position"),e=this.toolbar,s=this.drawer,i=this.chapters;return this.count()<1||("relative"!==t?(i.toggle(),e.highlight("menu")):(e.toggle(),n((()=>{i.isInside()?i.toggle():s.toggle()})))),this}destroy(){let t=this.anchors,e=this.chapters,s=this.drawer,i=this.toolbar,r=!1;const l=this.count();return this.removeListeners(),l>0&&(r=e.isOutside(),e.destroy(),e=null,r&&(s.destroy(),s=null)),i.destroy(),i=null,t.destroy(),t=null,this.attr(et.DEFAULTS),this}onToggle(){return this.toggle(),this}onScrollTop(){return this.toTop(),this}onScrollBottom(){return this.toBottom(),this}onToolbarUpdate({top:t,min:e,max:s}){const i=this.toolbar,r=Math.ceil(t);return r<=e?(i.hide("up"),i.show("down")):r>=s?(i.hide("down"),i.show("up")):r>e&&r {\r\n return typeof str === 'string'\r\n}\r\n\r\nexport default isString\r\n","/**\r\n * 检测对象自身属性中是否具有指定的属性。\r\n * ========================================================================\r\n * @method hasOwn\r\n * @param {Object} obj - (必须)检测的目标对象\r\n * @param {String} prop - (必须)属性名\r\n * @returns {Boolean}\r\n */\r\nconst hasOwn = (obj, prop) => {\r\n const hasOwnProperty = Object.prototype.hasOwnProperty\r\n return obj && hasOwnProperty.call(obj, prop)\r\n}\r\n\r\nexport default hasOwn\r\n","/**\r\n * Object 对象原型上的 toString 方法\r\n * ========================================================================\r\n * @method toString\r\n * @param {*} val\r\n * @returns {string}\r\n */\r\nconst toString = (val) => {\r\n return Object.prototype.toString.apply(val)\r\n}\r\n\r\nexport default toString\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测测试数据是否为 Function 类型\r\n * ========================================================================\r\n * @method isFunction\r\n * @param {*} val - (必须)待检测的数据\r\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\r\n */\r\nconst isFunction = (val) => {\r\n return typeof val === 'function' || toString(val) === '[object Function]'\r\n}\r\n\r\nexport default isFunction\r\n","import toString from '../lang/toString'\r\nimport isFunction from '../types/isFunction'\r\n\r\n/**\r\n * 检测数据是否为 Object 类型\r\n * ========================================================================\r\n * @method isObject\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isObject = (o) => {\r\n return (\r\n (toString(o) === '[object Object]' ||\r\n typeof o === 'object' ||\r\n isFunction(o)) &&\r\n o !== null\r\n )\r\n}\r\n\r\nexport default isObject\r\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\r\n\r\n/**\r\n * 扩展对象\r\n * ========================================================================\r\n * @method extend\r\n * @param {Object} origin\r\n * @param {Object} source\r\n */\r\nconst extend = (origin, source) => {\r\n const keys = Object.keys(source)\r\n\r\n keys.forEach((prop) => {\r\n if (hasOwn(source, prop)) {\r\n origin[prop] = source[prop]\r\n }\r\n })\r\n}\r\n\r\nexport default extend\r\n","import isObject from './isObject'\r\n\r\n/**\r\n * 检测数据是否为 HTMLElement DOM 节点\r\n * ========================================================================\r\n * @method isElement\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isElement = (o) => {\r\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\r\n}\r\n\r\nexport default isElement\r\n","import isFunction from '../types/isFunction'\r\n\r\n/**\r\n * later - 延迟执行方法\r\n * ========================================================================\r\n * @method later\r\n * @param {Function} fn\r\n * @param {Number} [delay]\r\n * @returns {number|boolean}\r\n */\r\nconst later = (fn, delay = 300) => {\r\n if (!isFunction(fn)) {\r\n return false\r\n }\r\n\r\n return setTimeout(() => {\r\n fn()\r\n }, delay)\r\n}\r\n\r\nexport default later\r\n","/**\r\n * 返回给定值的平方值\r\n * ========================================================================\r\n * @method easeInQuad\r\n * @param {Number} x\r\n * @returns {number}\r\n */\r\nconst easeInQuad = (x) => {\r\n return x * x\r\n}\r\n\r\nexport default easeInQuad\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\n\r\n/**\r\n * 通过给的 scrollElement 参数,获取滚动 DOM 元素\r\n * ========================================================================\r\n * @method _getScrollElement\r\n * @param {String|HTMLElement} scrollElement\r\n * @returns {Element}\r\n * @private\r\n */\r\nconst _getScrollElement = (scrollElement = null) => {\r\n let $rootElements\r\n let $scrollElement\r\n\r\n if (!scrollElement) {\r\n $rootElements = document.querySelectorAll('html,body')\r\n $scrollElement =\r\n $rootElements[0].scrollTop - $rootElements[1].scrollTop >= 0\r\n ? $rootElements[0]\r\n : $rootElements[1]\r\n } else {\r\n if (isString(scrollElement)) {\r\n $scrollElement = document.querySelector(scrollElement)\r\n } else if (isElement(scrollElement)) {\r\n $scrollElement = scrollElement\r\n }\r\n }\r\n\r\n return $scrollElement\r\n}\r\n\r\nexport default _getScrollElement\r\n","import easeInQuad from '../lang/easeInQuad'\r\nimport isFunction from '../types/isFunction'\r\nimport _getScrollElement from './_getScrollElement'\r\n\r\n/**\r\n * 指定 rootElement DOM 节点滚动到指定 top 位置\r\n * ========================================================================\r\n * @method scrollTo\r\n * @param {HTMLElement|Object} [scrollElement] - (必须)要滚动的 DOM 节点\r\n * @param {Number} top - (必须)滚动的 scrollTop 数值\r\n * @param {Function} [afterStop] - (可选)滚动完成的回调函数\r\n */\r\nconst scrollTo = (scrollElement, top, afterStop) => {\r\n const $scrollElement = _getScrollElement(scrollElement)\r\n let scrollTop = $scrollElement.scrollTop\r\n let step = 0\r\n const distance = top - scrollTop\r\n const MAX_HEIGHT = $scrollElement.scrollHeight\r\n const MAX_TOP = top - MAX_HEIGHT <= 0 ? top : MAX_HEIGHT\r\n const stop = (top) => {\r\n if (isFunction(afterStop)) {\r\n afterStop(top)\r\n }\r\n\r\n return false\r\n }\r\n const play = () => {\r\n step += 1\r\n\r\n // 向上滚动\r\n if (distance < 0) {\r\n scrollTop -= easeInQuad(step)\r\n $scrollElement.scrollTop = scrollTop\r\n\r\n if (scrollTop <= top) {\r\n $scrollElement.scrollTop = top\r\n return stop(top)\r\n }\r\n } else {\r\n scrollTop += easeInQuad(step)\r\n $scrollElement.scrollTop = scrollTop\r\n\r\n if (scrollTop >= MAX_TOP) {\r\n $scrollElement.scrollTop = MAX_TOP\r\n return stop(MAX_TOP)\r\n }\r\n }\r\n\r\n requestAnimationFrame(play)\r\n }\r\n\r\n requestAnimationFrame(play)\r\n}\r\n\r\nexport default scrollTo\r\n","/**\r\n * 获取 DOM 节点相对于窗口的 left (纵坐标)值\r\n * ========================================================================\r\n * @method offsetTop\r\n * @param {HTMLElement} el - DOM 节点\r\n * @returns {Number}\r\n */\r\nconst offsetTop = (el) => {\r\n let top = el.offsetTop\r\n\r\n if (el.offsetParent !== null) {\r\n top += offsetTop(el.offsetParent)\r\n }\r\n\r\n return top\r\n}\r\n\r\nexport default offsetTop\r\n","/**\r\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\r\n * ========================================================================\r\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\r\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\r\n * 标 DOM 元素是否为事件代理所期望触发的目标。\r\n * ========================================================================\r\n * @method matches\r\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\r\n * @returns {Boolean}\r\n */\r\nconst matches = (el, selector = '') => {\r\n const sel = selector.replace(/^>/i, '')\r\n\r\n if (!selector || !sel || !el) {\r\n return false\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el.matches) {\r\n return el.matches(sel)\r\n } else if (el.msMatchesSelector) {\r\n return el.msMatchesSelector(sel)\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nexport default matches\r\n","/**\r\n * 获取 DOM 元素的父节点\r\n * ========================================================================\r\n * @method getParentOrHost\r\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\r\n * @returns {*|HTMLElement}\r\n */\r\nconst getParentOrHost = (el) => {\r\n return el.host && el !== document && el.host.nodeType\r\n ? el.host\r\n : el.parentNode\r\n}\r\n\r\nexport default getParentOrHost\r\n","export const CAPTURE_EVENTS = [\r\n 'focusout',\r\n 'blur',\r\n 'focusin',\r\n 'focus',\r\n 'load',\r\n 'unload',\r\n 'mouseenter',\r\n 'mouseleave'\r\n]\r\n","import { CAPTURE_EVENTS } from './enum'\r\nimport _delete from './_delete'\r\n\r\n/**\r\n * (私有方法)取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method _off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} fn - (必须)事件处理器回调函数\r\n * @private\r\n */\r\nconst _off = (el, type, fn) => {\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n /* istanbul ignore else */\r\n if (fn._delegateListener) {\r\n fn = fn._delegateListener\r\n delete fn._delegateListener\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n _delete(el, type, fn)\r\n\r\n el.removeEventListener(type, fn, capture)\r\n}\r\n\r\nexport default _off\r\n","/**\r\n * 删除 DOM 元素缓存的 _listeners 数据\r\n * ========================================================================\r\n * @method _delete\r\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\r\n * @param {String} type - 事件类型(名称)\r\n * @param {Function} [fn] - 事件处理器回调函数\r\n */\r\nconst _delete = function (el, type, fn) {\r\n const listeners = el._listeners\r\n let index = -1\r\n\r\n if (listeners.length < 1) {\r\n return false\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n listeners.forEach((listener, i) => {\r\n const handler = listener.fn\r\n\r\n if (type === listener.type) {\r\n index = i\r\n\r\n if (handler === fn) {\r\n index = i\r\n }\r\n }\r\n })\r\n\r\n /* istanbul ignore else */\r\n if (index > -1) {\r\n listeners.splice(index, 1)\r\n }\r\n}\r\n\r\nexport default _delete\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\nimport getListeners from './getListeners'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 销毁(type 类型的)代理事件绑定\r\n * ========================================================================\r\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\r\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\r\n * ========================================================================\r\n * @method purgeElement\r\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\r\n * @param {String|Boolean} type - (必须)事件类型\r\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\r\n */\r\nconst purgeElement = function (el, type, recurse = false) {\r\n const $element = isString(el) ? document.querySelector(el) : el\r\n const $children = $element.childNodes\r\n const listeners = getListeners($element, type)\r\n\r\n listeners.forEach((listener) => {\r\n _off($element, listener.type, listener.fn)\r\n })\r\n\r\n if (\r\n (recurse || type === true || arguments.length === 1) &&\r\n $element &&\r\n $children\r\n ) {\r\n $children.forEach(($child) => {\r\n if (isElement($child)) {\r\n purgeElement($child, type, recurse)\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default purgeElement\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 获取 DOM 元素(type 事件类型)事件绑定信息\r\n * ========================================================================\r\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\r\n * ========================================================================\r\n * @methods getListeners\r\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\r\n * @param {String} [type] - (可选)事件类型\r\n * @returns {Array} - 已绑定的事件信息\r\n */\r\nconst getListeners = (el, type) => {\r\n let listeners = el._listeners || []\r\n\r\n if (isString(type) && type) {\r\n listeners = listeners.filter((listener) => {\r\n return listener.type === type\r\n })\r\n }\r\n\r\n return listeners\r\n}\r\n\r\nexport default getListeners\r\n","import purgeElement from './purgeElement'\r\nimport isFunction from '../types/isFunction'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} [fn] - (可选)事件处理器回调函数\r\n */\r\nconst off = (el, type, fn) => {\r\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\r\n if (!isFunction(fn)) {\r\n return purgeElement(el, type)\r\n }\r\n\r\n _off(el, type, fn)\r\n}\r\n\r\nexport default off\r\n","import closest from '../dom/closest'\r\nimport off from './off'\r\nimport getTarget from './getTarget'\r\n\r\nimport { CAPTURE_EVENTS } from './enum'\r\n\r\n/**\r\n * 绑定代理事件\r\n * ========================================================================\r\n * @method on\r\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\r\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\r\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\r\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\r\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\r\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\r\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\r\n * @param {Boolean} once - (可选)是否仅触发一次\r\n */\r\nconst on = (el, selector, type, fn, data, context, once = false) => {\r\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n const listener = function (evt) {\r\n const target = getTarget(evt)\r\n // 通过 Element.matches 方法获得点击的目标元素\r\n const delegateTarget = closest(target, selector, el)\r\n let overrideContext = context || el\r\n\r\n evt.delegateTarget = delegateTarget\r\n\r\n // 当设置为 true 时,则事件处理器回调函数的\r\n // this 上下文指向为 data 对象\r\n if (context === true) {\r\n overrideContext = data\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (delegateTarget) {\r\n // 仅触发一次\r\n /* istanbul ignore else */\r\n if (once === true) {\r\n off(el, type, listener)\r\n }\r\n\r\n fn.call(overrideContext, evt, data)\r\n }\r\n }\r\n\r\n if (!el._listeners) {\r\n el._listeners = []\r\n }\r\n\r\n // 缓存 options 元素绑定的事件处理器\r\n el._listeners.push({\r\n el,\r\n selector,\r\n type,\r\n fn: listener,\r\n data,\r\n context,\r\n capture\r\n })\r\n\r\n // 缓存包装后的事件处理器\r\n fn._delegateListener = listener\r\n\r\n el.addEventListener(type, listener, capture)\r\n}\r\n\r\nexport default on\r\n","import resolveTextNode from '../dom/resolveTextNode'\r\n\r\n/**\r\n * 返回触发事件的 target DOM 元素\r\n * ========================================================================\r\n * @method getTarget\r\n * @param {Event} evt - Event 对象\r\n * @return {HTMLElement} - Event 对象的 target DOM 元素\r\n */\r\nconst getTarget = function (evt) {\r\n const target = evt.target\r\n\r\n return resolveTextNode(target)\r\n}\r\n\r\nexport default getTarget\r\n","/**\r\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\r\n * resolveTextNode() 方法则会返回实际的目标节点。\r\n * ========================================================================\r\n * @method resolveTextNode\r\n * @param {HTMLElement|Text} el - 要解析的节点\r\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\r\n */\r\nconst resolveTextNode = function (el) {\r\n if (el && el.nodeType === 3) {\r\n return el.parentNode\r\n }\r\n\r\n return el\r\n}\r\n\r\nexport default resolveTextNode\r\n","import matches from './matches'\r\nimport getParentOrHost from './getParentOrHost'\r\n\r\n/**\r\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\r\n * ========================================================================\r\n * @method closest\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)DOM 元素的选择其\r\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\r\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\r\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\r\n */\r\nconst closest = (el, selector, ctx, includeCTX) => {\r\n const context = ctx || document\r\n\r\n if (!el) {\r\n return null\r\n }\r\n\r\n do {\r\n /* istanbul ignore else */\r\n if (\r\n (selector != null &&\r\n (selector.startsWith('>')\r\n ? el.parentNode === context && matches(el, selector)\r\n : matches(el, selector))) ||\r\n (includeCTX && el === context)\r\n ) {\r\n return el\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el === context) {\r\n break\r\n }\r\n\r\n /* jshint boss:true */\r\n } while ((el = getParentOrHost(el)))\r\n}\r\n\r\nexport default closest\r\n","/**\r\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\r\n * ========================================================================\r\n * @method stop\r\n * @param {Event} evt - 事件对象\r\n *\r\n * @example\r\n *
\r\n * Service\r\n * Help\r\n *
\r\n *\r\n * const $nav = document.querySelector('#nav')\r\n * const $service = document.querySelector('.anchor')\r\n *\r\n * on($nav, 'click', function(evt) {\r\n * console.log('你点击了导航栏')\r\n * })\r\n *\r\n * on($anchor, 'click', function(evt) {\r\n * console.log('tagName', this.tagName)\r\n *\r\n * // 工作台输出:'a'\r\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\r\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\r\n * stopEvent(evt)\r\n * })\r\n */\r\nconst stop = function (evt) {\r\n evt.stopPropagation()\r\n evt.preventDefault()\r\n}\r\n\r\nexport default stop\r\n","/**\r\n * 存储订阅者(主题和处理器的)私有对象\r\n * ========================================================================\r\n * @type {{}}\r\n * @private\r\n */\r\nconst _subscribers = {}\r\n\r\nexport default _subscribers\r\n","import _subscribers from './_subscribers'\r\nimport hasOwn from '../lang/hasOwn'\r\n\r\n/**\r\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\r\n * ========================================================================\r\n * @method _hasDirectSubscribersFor\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasDirectSubscribersFor = (topic) => {\r\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\r\n}\r\n\r\nexport default _hasDirectSubscribersFor\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\nimport _hasSubscribers from './_hasSubscribers'\r\n\r\n/**\r\n * 判断是否存在包含 topic 指定的订阅者信息\r\n * ========================================================================\r\n * @method has\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\r\n * @returns {Boolean}\r\n */\r\nconst has = (topic, isDirect = true) => {\r\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\r\n}\r\n\r\nexport default has\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * 判断是否存在包含给定 topic 相关的订阅者信息\r\n * ========================================================================\r\n * @method _hasSubscribers\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasSubscribers = (topic) => {\r\n let found = _hasDirectSubscribersFor(topic)\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (!found && position !== -1) {\r\n topic = topic.substring(0, position)\r\n position = topic.lastIndexOf('.')\r\n found = _hasDirectSubscribersFor(topic)\r\n }\r\n\r\n return found\r\n}\r\n\r\nexport default _hasSubscribers\r\n","import isTypedArray from '../types/isTypedArray'\r\nimport _subscribers from './_subscribers'\r\nimport has from './has'\r\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * (异步)发布订阅主题信息\r\n * ========================================================================\r\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\r\n * ========================================================================\r\n * @method emit\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Object} data - (必须)数据对象\r\n * @param {Boolean} async - (可选) 是否异步发布\r\n */\r\nconst emit = (topic, data, async = true) => {\r\n const execute = (topic) => {\r\n if (!_hasDirectSubscribersFor(topic)) {\r\n return false\r\n }\r\n\r\n _subscribers[topic].forEach((subscriber) => {\r\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\r\n // 采用 toString() 方法转化为普通(JSON)字符串\r\n const message = isTypedArray(data) ? data.toString() : data\r\n\r\n subscriber.callback.call(subscriber.context || subscriber, message)\r\n })\r\n }\r\n const deliver = () => {\r\n let subscriber = topic\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (position !== -1) {\r\n subscriber = subscriber.substring(0, position)\r\n position = subscriber.lastIndexOf('.')\r\n\r\n execute(subscriber)\r\n }\r\n\r\n // 执行 topic 对应的处理器\r\n execute(topic)\r\n // 执行特殊 topic:'*'(监听全部消息的发布)\r\n execute('*')\r\n }\r\n\r\n if (!has(topic)) {\r\n return false\r\n }\r\n\r\n if (async) {\r\n setTimeout(deliver, 10)\r\n } else {\r\n deliver()\r\n }\r\n}\r\n\r\nexport default emit\r\n","import toString from '../lang/toString'\r\n/**\r\n * 判断检测数据是否为 Typed Arrays 类型的数据\r\n * ========================================================================\r\n * @param {*} val\r\n * @returns {boolean}\r\n */\r\nconst isTypedArray = (val) => {\r\n const TYPES = [\r\n '[object Int8Array]',\r\n '[object Uint8Array]',\r\n '[object Uint8ClampedArray]',\r\n '[object Int16Array]',\r\n '[object Uint16Array]',\r\n '[object Int32Array]',\r\n '[object Uint32Array]',\r\n '[object Float32Array]',\r\n '[object Float64Array]',\r\n '[object BigInt64Array]',\r\n '[object BigUint64Array]'\r\n ]\r\n\r\n return TYPES.indexOf(toString(val)) > -1\r\n}\r\n\r\nexport default isTypedArray\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测数据是否为 Array 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isArray = (o) => {\r\n if (Array.isArray) {\r\n return Array.isArray(o)\r\n } else {\r\n return toString(o) === '[object Array]'\r\n }\r\n}\r\n\r\nexport default isArray\r\n","import DEFAULTS from './defaults'\r\n\r\nconst SYMBOLS = [...DEFAULTS]\r\n\r\nexport default SYMBOLS\r\n","const DEFAULTS = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n]\r\n\r\nexport default DEFAULTS\r\n","import isString from '../types/isString'\r\nimport getSymbol from './getSymbol'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n *\r\n * @method getSymbols\r\n * @param {String} [name]\r\n * @param {String} [iconSet]\r\n * @returns {string[]|*}\r\n */\r\nconst getSymbols = (name, iconSet = 'icon') => {\r\n if (isString(name)) {\r\n return getSymbol(name, iconSet)\r\n }\r\n\r\n return [...SYMBOLS]\r\n}\r\n\r\nexport default getSymbols\r\n","import SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method getSymbol\r\n * @param {String} name\r\n * @param {String} [iconSet]\r\n * @returns {String}\r\n */\r\nconst getSymbol = (name, iconSet = 'icon') => {\r\n const patternName = /id=\"(.*?)\"/\r\n const patternSet = /^(\\w+)-/\r\n const symbols = SYMBOLS\r\n\r\n return symbols.find((symbol) => {\r\n const names = patternName.exec(symbol)\r\n const fullName = names[1]\r\n const sets = patternSet.exec(fullName)\r\n const setName = sets[1]\r\n const iconName =\r\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\r\n\r\n return setName === iconSet && fullName === iconName\r\n })\r\n}\r\n\r\nexport default getSymbol\r\n","import add from './add'\r\nimport getSymbols from './getSymbols'\r\n\r\n/**\r\n * 绘制 SVG 图标集\r\n * ========================================================================\r\n * @method paint\r\n * @param {String|Array} symbol\r\n */\r\nconst paint = (symbol = '') => {\r\n const $body = document.body\r\n let $icons = document.querySelector('#outline-icons')\r\n let symbols = []\r\n\r\n add(symbol)\r\n symbols = getSymbols()\r\n\r\n if ($icons) {\r\n $icons.innerHTML = symbols.join('')\r\n } else {\r\n $icons = document.createElement('div')\r\n $icons.innerHTML =\r\n ``\r\n $body.insertBefore($icons.firstChild, $body.firstChild)\r\n }\r\n}\r\n\r\nexport default paint\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method add\r\n * @param {Array|String} symbols\r\n * @return {Boolean}\r\n */\r\nconst add = (symbols) => {\r\n if (!symbols) {\r\n return false\r\n }\r\n\r\n if (isArray(symbols) && symbols.length > 0) {\r\n symbols.forEach((symbol) => {\r\n /* istanbul ignore else */\r\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\r\n SYMBOLS.push(symbol)\r\n }\r\n })\r\n } else {\r\n /* istanbul ignore else */\r\n if (isString(symbols)) {\r\n SYMBOLS.push(symbols)\r\n }\r\n }\r\n}\r\n\r\nexport default add\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 清楚字符串起始位置所有的空格\r\n * ========================================================================\r\n * @method trim\r\n * @param {string} str\r\n * @returns {string|Boolean}\r\n */\r\nconst trim = (str) => {\r\n if (!isString(str)) {\r\n return false\r\n }\r\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\r\n}\r\n\r\nexport default trim\r\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isFragment = (fragment) => {\r\n return !!(\r\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\r\n )\r\n}\r\n\r\nexport default isFragment\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","/**\r\n * 给 DOM 节点设置属性/值\r\n * ========================================================================\r\n * @method setAttribute\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} attr - 属性名称\r\n * @param {String|Number|Boolean} value - 属性值\r\n */\r\nconst setAttribute = (el, attr, value) => {\r\n let tagName = el.tagName.toLowerCase()\r\n\r\n switch (attr) {\r\n case 'style':\r\n el.style.cssText = value\r\n break\r\n case 'value':\r\n if (tagName === 'input' || tagName === 'textarea') {\r\n el.value = value\r\n } else {\r\n el.setAttribute(attr, value)\r\n }\r\n break\r\n case 'className':\r\n el.className = value\r\n break\r\n default:\r\n el.setAttribute(attr, value)\r\n break\r\n }\r\n}\r\n\r\nexport default setAttribute\r\n","import hasOwn from '../lang/hasOwn'\r\nimport isObject from '../types/isObject'\r\nimport isString from '../types/isString'\r\nimport isArray from '../types/isArray'\r\nimport isDOM from '../types/isDOM'\r\nimport setAttribute from './setAttribute'\r\n\r\n/**\r\n * 创建 DOM 节点,并添加属性和子节点\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} tagName - 标签名称\r\n * @param {Object|Array} attrs - 属性对象或者子节点\r\n * @param {Array} [children] - 子节点数组\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (tagName, attrs, children) => {\r\n const $fragment = document.createDocumentFragment()\r\n const $el = document.createElement(tagName)\r\n const isValidChild = (child) => {\r\n return isDOM(child) || isString(child)\r\n }\r\n const append = (child) => {\r\n let $child\r\n\r\n if (!isValidChild(child)) {\r\n return false\r\n }\r\n\r\n if (isDOM(child)) {\r\n $child = child\r\n } else if (isString(child)) {\r\n $child = document.createTextNode(child)\r\n }\r\n\r\n $fragment.appendChild($child)\r\n }\r\n\r\n if (isObject(attrs)) {\r\n Object.keys(attrs).forEach((attr) => {\r\n if (hasOwn(attrs, attr)) {\r\n setAttribute($el, attr, attrs[attr])\r\n }\r\n })\r\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\r\n attrs.forEach((child) => {\r\n append(child)\r\n })\r\n }\r\n\r\n if (isArray(children)) {\r\n children.forEach((child) => {\r\n append(child)\r\n })\r\n } else {\r\n append(children)\r\n }\r\n\r\n $el.appendChild($fragment)\r\n\r\n return $el\r\n}\r\n\r\nexport default createElement\r\n","import isString from './isString'\r\n\r\nconst isSVG = (str) => {\r\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\r\n const doctype =\r\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\r\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\r\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\r\n const pattern = new RegExp(svg, 'i')\r\n\r\n return isString(str) && pattern.test(str)\r\n}\r\n\r\nexport default isSVG\r\n","import createElement from './createElement'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method icon\r\n * @alias createElement\r\n * @see createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst icon = (name, options = {}) => {\r\n return createElement(name, options)\r\n}\r\n\r\nexport default icon\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport isSVG from '../types/isSVG'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (name, options = {}) => {\r\n const size = options.size || 0\r\n const color = options.color || ''\r\n const iconSet = options.iconSet || ''\r\n const width = isArray(size) ? size[0] : size\r\n const height = isArray(size) ? size[1] : size\r\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\r\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\r\n const $icon = document.createElement('i')\r\n let binds = ''\r\n let svg = ''\r\n let $svg\r\n\r\n if (!isString(name)) {\r\n return null\r\n }\r\n\r\n if (isSVG(name)) {\r\n svg = name\r\n } else {\r\n binds =\r\n iconSet && iconSet !== 'icon'\r\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\r\n : `xlink:href=\"#icon-${name}\"`\r\n svg =\r\n `` +\r\n `` +\r\n ``\r\n }\r\n\r\n $icon.className = 'outline-icon'\r\n $icon.innerHTML = svg\r\n\r\n if (isSVG(name)) {\r\n $svg = $icon.querySelector('svg')\r\n $svg.setAttribute('aria-hidden', 'true')\r\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\r\n $svg.setAttribute('class', 'outline-icon__svg')\r\n $svg.setAttribute('width', '200')\r\n $svg.setAttribute('height', '200')\r\n $svg.style = cssRules\r\n }\r\n\r\n return $icon\r\n}\r\n\r\nexport default createElement\r\n","import isElement from '../types/isElement'\r\n/**\r\n * 检测 DOM 节点是否包含名为 className 的样式\r\n * ========================================================================\r\n * @method hasClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst hasClass = (el, className) => {\r\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\r\n let allClass\r\n let classList\r\n\r\n if (!isElement(el)) {\r\n return false\r\n }\r\n\r\n allClass = el.className\r\n\r\n if (!allClass) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.contains) {\r\n return el.classList.contains(className)\r\n }\r\n\r\n return !!pattern.exec(allClass)\r\n}\r\n\r\nexport default hasClass\r\n","import trim from '../lang/trim'\r\nimport hasClass from './hasClass'\r\n\r\n/**\r\n * 移除 DOM 节点的 className 样式\r\n * ========================================================================\r\n * @method removeClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst removeClass = (el, className) => {\r\n let allClass = el.className\r\n let classList\r\n\r\n if (!allClass || !hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.remove) {\r\n classList.remove(className)\r\n } else {\r\n allClass = trim(allClass.replace(className, ''))\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default removeClass\r\n","import removeClass from './utils/dom/removeClass'\r\nimport isEmpty from './utils/types/isEmpty'\r\nimport trim from './utils/lang/trim'\r\n\r\nconst _resetHeading = ($heading, hasAnchor = true, isAtStart = true) => {\r\n const CLS_HEADING = 'outline-heading'\r\n const text = $heading.innerHTML\r\n const pattern = /^\\d+(\\.?\\d+)*\\s?/gi\r\n let $anchor\r\n\r\n $heading.innerHTML = text.replace(pattern, '')\r\n $heading.removeAttribute('id')\r\n $heading.removeAttribute('data-id')\r\n\r\n removeClass($heading, CLS_HEADING)\r\n\r\n if (!hasAnchor) {\r\n return false\r\n }\r\n\r\n $anchor = $heading.querySelector(`.${CLS_HEADING}__anchor`)\r\n\r\n if (isAtStart) {\r\n removeClass($heading, `${CLS_HEADING}_start`)\r\n }\r\n\r\n if (isEmpty(trim($heading.className))) {\r\n $heading.removeAttribute('class')\r\n }\r\n\r\n $heading.removeChild($anchor)\r\n}\r\n\r\nexport default _resetHeading\r\n","import isString from './isString'\r\n/**\r\n * 检测数据是否为空字符串\r\n * ========================================================================\r\n * @method isEmpty\r\n * @param {String} str\r\n * @returns {boolean}\r\n */\r\nconst isEmpty = (str) => {\r\n return isString(str) && str === ''\r\n}\r\n\r\nexport default isEmpty\r\n","import trim from './utils/lang/trim'\r\nimport stripTags from './utils/lang/stripTags'\r\n\r\nimport _getChapterParentIdByDiffer from './_getChapterParentIdByDiffer'\r\nimport _getChaptersWithCode from './_getChaptersWithCode'\r\n\r\nconst getChapters = (headings, showCode = true) => {\r\n let previous = 1\r\n let level = 0\r\n const chapters = []\r\n\r\n headings.forEach((heading, i) => {\r\n const headingLevel = heading.tagName.replace(/h/i, '')\r\n let current = parseInt(headingLevel, 10)\r\n let pid = -1\r\n\r\n // 场景1:当前标题是前一个标题的子标题\r\n // 当前标题的(标题标签)序号 > 前一个标题的序号:两个相连的标题是父标题 -> 子标题关系;\r\n // h2 (前一个标题)\r\n // h3 (当前标题)\r\n if (current > previous) {\r\n level += 1\r\n\r\n // 第一层级的 pid 是 -1\r\n if (level === 1) {\r\n pid = -1\r\n } else {\r\n pid = i - 1\r\n }\r\n }\r\n // 场景2:当前标题和前一个标题层级相同\r\n // 当前标题的(标题标签)序号 = 前一个标题的序号\r\n // h2 (前一个标题)\r\n // h2 (当前标题)\r\n // 当前标题的(标题标签)序号 < 前一个标题的序号,并且当前标题序号 > 当前的级别\r\n // h2\r\n // h4 (前一个标题)\r\n // h3 (当前标题:这种情况我们还是任务 h3 是 h2 的下一级章节)\r\n else if (current === previous || (current < previous && current > level)) {\r\n // H1 的层级肯定是 1\r\n if (current === 1) {\r\n level = 1\r\n pid = -1\r\n } else {\r\n pid = chapters[i - 1].pid\r\n }\r\n }\r\n // 场景3:当前标题比前一个标题层级高\r\n else if (current <= level) {\r\n // H1 的层级肯定是 1\r\n if (current === 1) {\r\n level = 1\r\n } else {\r\n level = level - (previous - current)\r\n\r\n if (level <= 1) {\r\n level = 1\r\n }\r\n }\r\n\r\n // 第一级的标题\r\n if (level === 1) {\r\n pid = -1\r\n } else {\r\n // 通过当前标题和前一个标题之间的等级差,获得当前标题的父标题ID\r\n pid = _getChapterParentIdByDiffer(chapters, previous - current, i)\r\n }\r\n }\r\n\r\n previous = current\r\n\r\n chapters.push({\r\n id: i,\r\n pid: pid,\r\n level: level,\r\n rel: `heading-${i}`,\r\n text: stripTags(trim(heading.innerHTML))\r\n })\r\n })\r\n\r\n return showCode ? _getChaptersWithCode(chapters) : chapters\r\n}\r\n\r\nexport default getChapters\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 过滤所有 HTML 标签\r\n * ========================================================================\r\n * @method stripTags\r\n * @param {string} str\r\n * @returns {string}\r\n */\r\nconst stripTags = (str) => {\r\n if (!isString(str)) {\r\n return ''\r\n }\r\n return str.replace(/<\\/?[^>]+(>|$)/g, '')\r\n}\r\n\r\nexport default stripTags\r\n","const _getChapterParentIdByDiffer = (chapters, differ, index) => {\r\n let previous = chapters[index - 1]\r\n let pid\r\n let i\r\n\r\n for (i = 0; i < differ; i += 1) {\r\n pid = previous.pid\r\n previous = chapters[pid]\r\n }\r\n\r\n pid = previous.pid\r\n\r\n return pid\r\n}\r\n\r\nexport default _getChapterParentIdByDiffer\r\n","const _getChaptersWithCode = (chapters) => {\r\n const groups = {}\r\n const cb = (o) => {\r\n return [o.pid]\r\n }\r\n\r\n chapters.forEach((o) => {\r\n const group = JSON.stringify(cb(o))\r\n\r\n groups[group] = groups[group] || []\r\n groups[group].push(o)\r\n\r\n o.index = groups[group].length\r\n if (o.pid === -1) {\r\n o.code = String(o.index)\r\n }\r\n })\r\n\r\n Object.keys(groups).forEach((group) => {\r\n groups[group].forEach((c) => {\r\n const subjects = chapters.filter((b) => b.pid === c.id)\r\n subjects.forEach((o) => {\r\n o.code = c.code + '.' + o.index\r\n })\r\n })\r\n })\r\n\r\n return chapters\r\n}\r\n\r\nexport default _getChaptersWithCode\r\n","import Base from './base'\r\n\r\n// 在文章的标题生成 anchor 链接\r\nimport isString from './utils/types/isString'\r\nimport isFunction from './utils/types/isFunction'\r\nimport isElement from './utils/types/isElement'\r\nimport toTree from './utils/lang/toTree'\r\nimport later from './utils/lang/later'\r\nimport scrollTo from './utils/dom/scrollTo'\r\nimport _getScrollElement from './utils/dom/_getScrollElement'\r\nimport offsetTop from './utils/dom/offsetTop'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\nimport stop from './utils/event/stop'\r\nimport publish from './utils/observer/emit'\r\nimport paint from './utils/icons/paint'\r\n\r\nimport _updateHeading from './_updateHeading'\r\nimport _resetHeading from './_resetHeading'\r\nimport getChapters from './getChapters'\r\n\r\nclass Anchors extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Anchors.DEFAULTS\r\n this.$articleElement = null\r\n this.$scrollElement = null\r\n this.$headings = []\r\n\r\n this.chapters = []\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n let scrollElement\r\n let selector\r\n let $articleElement\r\n let articleElement\r\n\r\n this.attr(options)\r\n articleElement = this.attr('articleElement')\r\n scrollElement = this.attr('scrollElement')\r\n selector = this.attr('selector')\r\n created = this.attr('created')\r\n\r\n if (isString(articleElement)) {\r\n $articleElement = document.querySelector(articleElement)\r\n } else if (isElement(articleElement)) {\r\n $articleElement = articleElement\r\n }\r\n\r\n if (!$articleElement) {\r\n return this\r\n }\r\n\r\n this.$articleElement = $articleElement\r\n this.$scrollElement = _getScrollElement(scrollElement)\r\n this.$headings = [...$articleElement.querySelectorAll(selector)]\r\n\r\n if (this.$headings.length < 1) {\r\n return this\r\n }\r\n\r\n this.chapters = getChapters(this.$headings)\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n this.render().addListeners()\r\n\r\n return this\r\n }\r\n\r\n getChapters(isTreeStructured = false) {\r\n const chapters = this.chapters\r\n return isTreeStructured ? toTree(chapters, 'id', 'pid') : chapters\r\n }\r\n\r\n count() {\r\n return this.chapters.length\r\n }\r\n\r\n render() {\r\n const mounted = this.attr('mounted')\r\n const hasAnchor = this.attr('hasAnchor')\r\n const isAtStart = this.attr('isAtStart')\r\n const showCode = this.attr('showCode')\r\n const anchorURL = this.attr('anchorURL')\r\n const $headings = this.$headings\r\n const chapters = this.getChapters()\r\n\r\n paint()\r\n\r\n $headings.forEach(($heading, i) => {\r\n const chapterCode = chapters[i].code\r\n _updateHeading($heading, i, {\r\n hasAnchor,\r\n isAtStart,\r\n showCode,\r\n chapterCode,\r\n anchorURL\r\n })\r\n })\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n scrollTo(top, after) {\r\n const el = this.$scrollElement\r\n\r\n scrollTo(el, top, after)\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const hasAnchor = this.attr('hasAnchor')\r\n const isAtStart = this.attr('isAtStart')\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n const afterDestroy = this.attr('afterDestroy')\r\n const $headings = this.$headings\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n $headings.forEach(($heading) => {\r\n _resetHeading($heading, hasAnchor, isAtStart)\r\n })\r\n\r\n this.attr(Anchors.DEFAULTS)\r\n this.$articleElement = null\r\n this.$scrollElement = null\r\n this.$headings = []\r\n this.chapters = []\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n onAnchorTrigger(evt) {\r\n const anchorURL = this.attr('anchorURL')\r\n const afterScroll = this.attr('afterScroll')\r\n const stickyHeight = this.attr('stickyHeight')\r\n const $anchor = evt.delegateTarget\r\n const $heading = $anchor.parentNode\r\n const top = offsetTop($heading) - (stickyHeight + 10)\r\n const $scrollElement = this.$scrollElement\r\n const min = 0\r\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\r\n const after = () => {\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(this, 'anchor')\r\n }\r\n\r\n later(() => {\r\n publish('toolbar:update', {\r\n top,\r\n min,\r\n max\r\n })\r\n })\r\n }\r\n\r\n this.scrollTo(top, after)\r\n\r\n if (!anchorURL) {\r\n stop(evt)\r\n }\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const $articleElement = this.$articleElement\r\n\r\n on(\r\n $articleElement,\r\n '.outline-heading__anchor',\r\n 'click',\r\n this.onAnchorTrigger,\r\n this,\r\n true\r\n )\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const $articleElement = this.$articleElement\r\n\r\n off($articleElement, 'click', this.onAnchorTrigger)\r\n\r\n return this\r\n }\r\n}\r\n\r\nAnchors.DEFAULTS = {\r\n scrollElement: 'html,body',\r\n articleElement: '#article',\r\n selector: 'h1,h2,h3,h4,h5,h6',\r\n stickyHeight: 0,\r\n anchorURL: '',\r\n hasAnchor: true,\r\n isAtStart: true,\r\n showCode: false,\r\n created: null,\r\n mounted: null,\r\n afterScroll: null,\r\n beforeDestroy: null,\r\n afterDestroy: null\r\n}\r\n\r\nexport default Anchors\r\n","const toTree = (list, nodeKey, parentKey) => {\r\n const map = {}\r\n const roots = []\r\n\r\n list.forEach((item, i) => {\r\n // initialize the map\r\n map[item[nodeKey]] = i\r\n // initialize the children\r\n item.children = []\r\n })\r\n\r\n list.forEach((item) => {\r\n const node = list[map[item[parentKey]]]\r\n\r\n if (item[parentKey] !== -1) {\r\n // if you have dangling branches check that map[node.parentId] exists\r\n node.children.push(item)\r\n } else {\r\n roots.push(item)\r\n }\r\n })\r\n\r\n return roots\r\n}\r\n\r\nexport default toTree\r\n","import trim from './utils/lang/trim'\r\nimport createElement from './utils/dom/createElement'\r\nimport setAttribute from './utils/dom/setAttribute'\r\n\r\nimport icon from './utils/icons/icon'\r\n\r\nconst _updateHeading = ($heading, i, options) => {\r\n const $fragment = document.createDocumentFragment()\r\n const CLS_HEADING = 'outline-heading'\r\n const hasAnchor = options.hasAnchor || true\r\n const isAtStart = options.isAtStart || true\r\n const showCode = options.showCode || false\r\n const chapterCode = options.chapterCode || ''\r\n const anchorURL = options.anchorURL || ''\r\n const headingId = `heading-${i}`\r\n const attrs = {\r\n id: headingId,\r\n className: isAtStart ? `${CLS_HEADING} ${CLS_HEADING}_start` : CLS_HEADING,\r\n 'data-id': i\r\n }\r\n const keys = Object.keys(attrs)\r\n const text = trim($heading.innerHTML)\r\n let $anchor\r\n let $icon\r\n\r\n keys.forEach((prop) => {\r\n setAttribute($heading, prop, attrs[prop])\r\n })\r\n\r\n if (showCode) {\r\n $heading.innerHTML = chapterCode + ' ' + text\r\n }\r\n\r\n if (!hasAnchor) {\r\n return false\r\n }\r\n\r\n $icon = icon('hash', { iconSet: 'outline' })\r\n $anchor = createElement(\r\n 'a',\r\n {\r\n id: `anchor-${i}`,\r\n className: `${CLS_HEADING}__anchor anchor-${i}`,\r\n href: anchorURL || `#${headingId}`,\r\n target: anchorURL ? '_blank' : 'self',\r\n 'data-id': i\r\n },\r\n [$icon]\r\n )\r\n $fragment.appendChild($anchor)\r\n $heading.appendChild($fragment)\r\n}\r\n\r\nexport default _updateHeading\r\n","import hasClass from './hasClass'\r\n\r\n/**\r\n * 给 DOM 节点添加名为 className 的样式\r\n * ========================================================================\r\n * @method addClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst addClass = (el, className) => {\r\n let classList\r\n let allClass\r\n\r\n if (hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.add) {\r\n classList.add(className)\r\n } else {\r\n allClass = el.className\r\n allClass += allClass.length > 0 ? ' ' + className : className\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default addClass\r\n","const setProperty = (prop, value) => {\r\n const documentElement = document.documentElement\r\n documentElement.style.setProperty(prop, value)\r\n}\r\n\r\nexport default setProperty\r\n","import setProperty from './utils/dom/setProperty'\r\n\r\nlet index = 2000\r\n\r\nconst zIndex = (idx) => {\r\n if (idx) {\r\n index = idx\r\n } else {\r\n index += 1\r\n }\r\n\r\n setProperty('--outline-zIndex', `${index}`)\r\n\r\n return index\r\n}\r\n\r\nexport default zIndex\r\n","import Base from './base'\r\n\r\nimport later from './utils/lang/later'\r\nimport isFunction from './utils/types/isFunction'\r\nimport addClass from './utils/dom/addClass'\r\nimport removeClass from './utils/dom/removeClass'\r\nimport createElement from './utils/dom/createElement'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\n\r\nimport paint from './utils/icons/paint'\r\nimport icon from './utils/icons/icon'\r\nimport zIndex from './zIndex'\r\n\r\nclass Drawer extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Drawer.DEFAULTS\r\n this.title = ''\r\n this.closed = true\r\n this.$el = null\r\n this.$modal = null\r\n this.$header = null\r\n this.$title = null\r\n this.$close = null\r\n this.$main = null\r\n this.$footer = null\r\n this.$overlay = null\r\n this.zIndex = 0\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n\r\n this.attr(options)\r\n\r\n this.title = this.attr('title')\r\n created = this.attr('created')\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n this.render().addListeners()\r\n return this\r\n }\r\n\r\n setTitle(title) {\r\n this.attr('title', title)\r\n this.title = title\r\n this.$title.innerHTML = title\r\n\r\n return this\r\n }\r\n\r\n isClosed() {\r\n return this.closed\r\n }\r\n\r\n render() {\r\n const mounted = this.attr('mounted')\r\n const size = this.attr('size')\r\n const placement = this.attr('placement')\r\n const hasClose = this.attr('hasClose')\r\n const hasOverlay = this.attr('hasOverlay')\r\n const hasOffset = this.attr('hasOffset')\r\n const hasPadding = this.attr('hasPadding')\r\n const autoHeight = this.attr('autoHeight')\r\n const customClass = this.attr('customClass')\r\n let $el\r\n let $modal\r\n let $header\r\n let $title\r\n let $close\r\n let $main\r\n let $footer\r\n let $overlay\r\n\r\n paint()\r\n this.zIndex = zIndex()\r\n\r\n $title = createElement(\r\n 'h2',\r\n {\r\n className: 'outline-drawer__title'\r\n },\r\n [this.title]\r\n )\r\n this.$title = $title\r\n\r\n if (hasClose) {\r\n $close = createElement(\r\n 'div',\r\n {\r\n className: 'outline-drawer__close'\r\n },\r\n [icon('close', { size: 20 })]\r\n )\r\n this.$close = $close\r\n }\r\n\r\n $header = createElement(\r\n 'header',\r\n {\r\n className: 'outline-drawer__header'\r\n },\r\n [$title, $close]\r\n )\r\n this.$header = $header\r\n\r\n $main = createElement(\r\n 'div',\r\n {\r\n className: 'outline-drawer__main'\r\n },\r\n ['']\r\n )\r\n this.$main = $main\r\n\r\n if (!hasPadding) {\r\n addClass($main, 'outline-drawer_full')\r\n }\r\n\r\n $footer = createElement(\r\n 'footer',\r\n {\r\n className: 'outline-drawer__footer'\r\n },\r\n ['']\r\n )\r\n this.$footer = $footer\r\n\r\n $modal = createElement(\r\n 'div',\r\n {\r\n className: `outline-drawer__modal outline-drawer_${placement} outline-drawer_${size} outline-drawer_closed`\r\n },\r\n [$header, $main, $footer]\r\n )\r\n this.$modal = $modal\r\n\r\n if (hasOffset) {\r\n addClass($modal, 'outline-drawer_offset')\r\n }\r\n\r\n if (autoHeight) {\r\n addClass($modal, 'outline-drawer_auto')\r\n }\r\n\r\n if (customClass) {\r\n addClass($modal, customClass)\r\n }\r\n\r\n if (hasOverlay) {\r\n $overlay = createElement(\r\n 'div',\r\n {\r\n className: 'outline-drawer__overlay'\r\n },\r\n ['']\r\n )\r\n this.$overlay = $overlay\r\n }\r\n\r\n $el = createElement(\r\n 'div',\r\n {\r\n className: `outline-drawer`\r\n },\r\n [$modal, $overlay]\r\n )\r\n this.$el = $el\r\n document.body.appendChild($el)\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n open() {\r\n const opened = this.attr('afterOpened')\r\n const $modal = this.$modal\r\n\r\n addClass(this.$el, 'outline-drawer_opened')\r\n removeClass($modal, 'outline-drawer_closed')\r\n addClass($modal, 'outline-drawer_opened')\r\n\r\n later(() => {\r\n this.closed = false\r\n\r\n if (isFunction(opened)) {\r\n opened.call(this)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n close() {\r\n const closed = this.attr('afterClosed')\r\n const $modal = this.$modal\r\n\r\n removeClass($modal, 'outline-drawer_opened')\r\n addClass($modal, 'outline-drawer_closed')\r\n\r\n later(() => {\r\n removeClass(this.$el, 'outline-drawer_opened')\r\n this.closed = true\r\n\r\n if (isFunction(closed)) {\r\n closed.call(this)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n toggle() {\r\n const afterToggle = this.attr('afterToggle')\r\n const closed = this.isClosed()\r\n\r\n if (closed) {\r\n this.open()\r\n } else {\r\n this.close()\r\n }\r\n\r\n if (isFunction(afterToggle)) {\r\n later(() => {\r\n afterToggle.call(this, closed)\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const afterDestroy = this.attr('afterDestroy')\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n let index = this.zIndex\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n\r\n this.attrs = Drawer.DEFAULTS\r\n this.title = ''\r\n this.closed = false\r\n this.$el = null\r\n this.$modal = null\r\n this.$header = null\r\n this.$title = null\r\n this.$close = null\r\n this.$main = null\r\n this.$footer = null\r\n this.$overlay = null\r\n\r\n index -= 1\r\n zIndex(index)\r\n this.zIndex = 0\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const hasClose = this.attr('hasClose')\r\n const hasOverlay = this.attr('hasOverlay')\r\n const $el = this.$el\r\n\r\n if (hasClose) {\r\n on($el, '.outline-drawer__close', 'click', this.onClose, this, true)\r\n }\r\n\r\n if (hasOverlay) {\r\n on($el, '.outline-drawer__overlay', 'click', this.onClose, this, true)\r\n }\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const hasClose = this.attr('hasClose')\r\n const hasOverlay = this.attr('hasOverlay')\r\n const $el = this.$el\r\n\r\n if (!hasClose && !hasOverlay) {\r\n return this\r\n }\r\n\r\n off($el, 'click', this.onClose)\r\n\r\n return this\r\n }\r\n\r\n onClose() {\r\n this.close()\r\n return this\r\n }\r\n}\r\n\r\nDrawer.DEFAULTS = {\r\n placement: 'rtl',\r\n title: '标题',\r\n size: 'regular',\r\n hasClose: true,\r\n hasOverlay: true,\r\n hasOffset: false,\r\n hasPadding: true,\r\n autoHeight: true,\r\n created: null,\r\n mounted: null,\r\n afterClosed: null,\r\n afterOpened: null,\r\n afterScroll: null,\r\n beforeDestroy: null,\r\n afterDestroy: null,\r\n afterToggle: null\r\n}\r\n\r\nexport default Drawer\r\n","import isFunction from '../types/isFunction'\r\nimport off from './off'\r\n\r\nimport { CAPTURE_EVENTS } from './enum'\r\n\r\n/**\r\n * 绑定事件\r\n * ========================================================================\r\n * @method at\r\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\r\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\r\n * @param {Function|Object} fn - (必须) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\r\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\r\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\r\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\r\n * @param {Boolean} once - (可选)是否仅触发一次\r\n */\r\nconst at = (el, type, fn, data, context, once = false) => {\r\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n const listener = function (evt) {\r\n let overrideContext = context || el\r\n\r\n // 当设置为 true 时,则事件处理器回调函数的\r\n // this 上下文指向为 data 对象\r\n if (context === true) {\r\n overrideContext = data\r\n }\r\n\r\n // 仅触发一次\r\n /* istanbul ignore else */\r\n if (once === true) {\r\n off(el, type, listener)\r\n }\r\n\r\n fn.call(overrideContext, evt, data)\r\n }\r\n\r\n if (!isFunction(fn)) {\r\n return false\r\n }\r\n\r\n if (!el._listeners) {\r\n el._listeners = []\r\n }\r\n\r\n // 缓存 options 元素绑定的事件处理器\r\n el._listeners.push({\r\n el,\r\n type,\r\n fn: listener,\r\n data,\r\n context,\r\n capture\r\n })\r\n\r\n // 缓存包装后的事件处理器\r\n fn._delegateListener = listener\r\n\r\n el.addEventListener(type, listener, capture)\r\n}\r\n\r\nexport default at\r\n","/**\r\n * 获取HTML元素的某个CSS样式值\r\n * ====================================================\r\n * @param el\r\n * @param ruleName\r\n * @returns {*}\r\n */\r\nconst getStyle = (el, ruleName) => {\r\n return getComputedStyle(el)[ruleName]\r\n}\r\n\r\nexport default getStyle\r\n","import Base from './base'\r\n\r\nimport isString from './utils/types/isString'\r\nimport isFunction from './utils/types/isFunction'\r\nimport isElement from './utils/types/isElement'\r\nimport later from './utils/lang/later'\r\nimport at from './utils/event/at'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\nimport stop from './utils/event/stop'\r\nimport createElement from './utils/dom/createElement'\r\nimport scrollTo from './utils/dom/scrollTo'\r\nimport addClass from './utils/dom/addClass'\r\nimport intersection from './utils/dom/intersection'\r\nimport removeClass from './utils/dom/removeClass'\r\nimport offsetTop from './utils/dom/offsetTop'\r\nimport getStyle from './utils/dom/getStyle'\r\nimport setProperty from './utils/dom/setProperty'\r\nimport publish from './utils/observer/emit'\r\n\r\nimport _getScrollElement from './utils/dom/_getScrollElement'\r\nimport _paintChapters from './_paintChapters'\r\n\r\nclass Chapters extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Chapters.DEFAULTS\r\n this.$el = null\r\n this.$title = null\r\n this.$main = null\r\n this.$list = null\r\n this.$placeholder = null\r\n this.$parentElement = null\r\n this.$scrollElement = null\r\n this.chapters = []\r\n this.closed = false\r\n this.active = 0\r\n this.offsetTop = 0\r\n this.offsetWidth = 0\r\n this.$active = null\r\n this.scrollTimer = null\r\n this.resizeTimer = null\r\n this.playing = false\r\n this.Observer = null\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n let parentElement\r\n let scrollElement\r\n let $parent\r\n\r\n this.attr(options)\r\n created = this.attr('created')\r\n parentElement = this.attr('parentElement')\r\n scrollElement = this.attr('scrollElement')\r\n\r\n if (isString(parentElement)) {\r\n $parent = document.querySelector(parentElement)\r\n } else if (isElement(parentElement)) {\r\n $parent = parentElement\r\n }\r\n this.$parentElement = $parent\r\n this.$scrollElement = _getScrollElement(scrollElement)\r\n\r\n this.chapters = this.attr('chapters')\r\n this.closed = this.attr('closed')\r\n this.active = this.attr('active')\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n if (this.chapters.length < 1) {\r\n return this\r\n }\r\n\r\n this.render().addListeners()\r\n\r\n this.$active = document.querySelector(`#chapter-${this.active}`)\r\n\r\n return this\r\n }\r\n\r\n isClosed() {\r\n return this.closed\r\n }\r\n\r\n isSticky() {\r\n const position = this.attr('position')\r\n return position === 'sticky'\r\n }\r\n\r\n isFixed() {\r\n const position = this.attr('position')\r\n return position === 'fixed'\r\n }\r\n\r\n isInside() {\r\n return this.isFixed() || this.isSticky()\r\n }\r\n\r\n isOutside() {\r\n return !this.isInside()\r\n }\r\n\r\n _paintEdge() {\r\n const $fragment = document.createDocumentFragment()\r\n const STICKY = 'outline-chapters_sticky'\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const title = this.attr('title')\r\n const customClass = this.attr('customClass')\r\n const $parentElement = this.$parentElement\r\n const contents = []\r\n let $title = null\r\n let $el\r\n let $main\r\n let $list\r\n let $placeholder\r\n\r\n if (!$parentElement) {\r\n return this\r\n }\r\n\r\n if (this.isInside()) {\r\n $title = createElement(\r\n 'h2',\r\n {\r\n className: 'outline-chapters__title'\r\n },\r\n [title]\r\n )\r\n this.$title = $title\r\n contents.push($title)\r\n }\r\n\r\n $list = createElement(\r\n 'ul',\r\n {\r\n // 为优化性能,添加了 _fixed 和 _hidden\r\n // fixed 为了让 $list 脱离流布局\r\n // hidden 让 $list 不可见\r\n className: `outline-chapters__list`\r\n },\r\n ['']\r\n )\r\n this.$list = $list\r\n\r\n $placeholder = createElement(\r\n 'div',\r\n {\r\n className: 'outline-chapters__placeholder'\r\n },\r\n ['']\r\n )\r\n this.$placeholder = $placeholder\r\n\r\n $main = createElement(\r\n 'div',\r\n {\r\n className: 'outline-chapters__main'\r\n },\r\n [$list, $placeholder]\r\n )\r\n this.$main = $main\r\n contents.push($main)\r\n\r\n $el = createElement(\r\n 'nav',\r\n {\r\n id: 'outline-chapters',\r\n className: `outline-chapters ${HIDDEN}`\r\n },\r\n contents\r\n )\r\n this.$el = $el\r\n\r\n if (this.isSticky()) {\r\n this.calculateStickyHeight()\r\n addClass($el, STICKY)\r\n }\r\n\r\n if (customClass) {\r\n addClass($el, customClass)\r\n }\r\n $fragment.appendChild($el)\r\n $parentElement.appendChild($fragment)\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const showCode = this.attr('showCode')\r\n const mounted = this.attr('mounted')\r\n const $parentElement = this.$parentElement\r\n const chapters = this.chapters\r\n let $el\r\n let $list\r\n\r\n if (!$parentElement || chapters.length < 1) {\r\n return this\r\n }\r\n\r\n this._paintEdge()\r\n\r\n $el = this.$el\r\n $list = this.$list\r\n _paintChapters($list, chapters, showCode)\r\n removeClass($el, HIDDEN)\r\n this.positionPlaceholder(this.active)\r\n\r\n this.offsetTop = offsetTop($el)\r\n this.offsetWidth = $el.offsetWidth\r\n\r\n if (this.isFixed()) {\r\n this.sticky()\r\n setProperty('--outline-chapters-width', `${this.offsetWidth}px`)\r\n }\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n this.onObserver()\r\n\r\n return this\r\n }\r\n\r\n positionPlaceholder(index) {\r\n const $main = this.$main\r\n const $list = this.$list\r\n const $placeholder = this.$placeholder\r\n const $anchor = $list.querySelector('.outline-chapters__anchor')\r\n const mainPaddingTop = parseInt(getStyle($main, 'padding-top'), 10)\r\n const mainBorderTop = parseInt(getStyle($main, 'border-top-width'), 10)\r\n const placeholderPaddingTop = parseInt(getStyle($list, 'padding-top'), 10)\r\n const placeholderMarginTop = parseInt(getStyle($list, 'margin-top'), 10)\r\n const placeholderBorderTop = parseInt(\r\n getStyle($list, 'border-top-width'),\r\n 10\r\n )\r\n let height = $anchor.offsetHeight\r\n let offsetTop = 0\r\n let top\r\n\r\n if (mainPaddingTop) {\r\n offsetTop += mainPaddingTop\r\n }\r\n\r\n if (placeholderPaddingTop) {\r\n offsetTop += placeholderPaddingTop\r\n }\r\n\r\n if (placeholderMarginTop) {\r\n offsetTop += placeholderMarginTop\r\n }\r\n\r\n if (mainBorderTop) {\r\n offsetTop += mainBorderTop\r\n }\r\n\r\n if (placeholderBorderTop) {\r\n offsetTop += placeholderBorderTop\r\n }\r\n\r\n top = height * index\r\n // top:calc(${offsetTop}px + ${top}px);\r\n $placeholder.style.cssText = `transform: translateY(${\r\n offsetTop + top\r\n }px);height:${height}px;`\r\n\r\n return this\r\n }\r\n\r\n highlight(id) {\r\n const $anchor = this.$el.querySelector(`#chapter__anchor-${id}`)\r\n const HIGHLIGHT = 'outline-chapters_active'\r\n\r\n if (!$anchor) {\r\n return this\r\n }\r\n\r\n if (this.$active) {\r\n removeClass(this.$active, HIGHLIGHT)\r\n }\r\n\r\n this.active = parseInt($anchor.getAttribute('data-id'), 10)\r\n this.$active = $anchor\r\n addClass(this.$active, HIGHLIGHT)\r\n\r\n this.positionPlaceholder(this.active)\r\n\r\n return this\r\n }\r\n\r\n sticky() {\r\n const afterSticky = this.attr('afterSticky')\r\n const FIXED = 'outline-chapters_fixed'\r\n const $el = this.$el\r\n const top = this.offsetTop\r\n const scrollTop = this.$scrollElement.scrollTop\r\n let isStickying\r\n\r\n if (!this.isFixed()) {\r\n return this\r\n }\r\n\r\n isStickying = scrollTop >= top\r\n\r\n if (isStickying) {\r\n addClass($el, FIXED)\r\n } else {\r\n removeClass($el, FIXED)\r\n }\r\n\r\n if (isFunction(afterSticky)) {\r\n afterSticky.call(this, this.isClosed(), isStickying)\r\n }\r\n\r\n return this\r\n }\r\n\r\n calculateStickyHeight() {\r\n const documentElement = document.documentElement\r\n const height = Math.max(\r\n documentElement.clientHeight || 0,\r\n window.innerHeight || 0\r\n )\r\n setProperty('--outline-sticky-height', `${height}px`)\r\n return this\r\n }\r\n\r\n scrollTo(top, after) {\r\n const el = this.$scrollElement\r\n\r\n scrollTo(el, top, after)\r\n\r\n return this\r\n }\r\n\r\n show() {\r\n const FOLDED = 'outline-chapters_folded'\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const opened = this.attr('afterOpened')\r\n const $el = this.$el\r\n const $parent = this.$parentElement\r\n\r\n if (this.isInside()) {\r\n removeClass($parent, HIDDEN)\r\n removeClass($el, HIDDEN)\r\n later(() => {\r\n removeClass($parent, FOLDED)\r\n removeClass($el, FOLDED)\r\n }, 30)\r\n } else {\r\n removeClass($el, HIDDEN)\r\n }\r\n this.closed = false\r\n\r\n if (isFunction(opened)) {\r\n opened.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n hide() {\r\n const FOLDED = 'outline-chapters_folded'\r\n const HIDDEN = 'outline-chapters_hidden'\r\n const closed = this.attr('afterClosed')\r\n const $el = this.$el\r\n const $parent = this.$parentElement\r\n\r\n if (this.isInside()) {\r\n addClass($parent, FOLDED)\r\n addClass($el, FOLDED)\r\n later(() => {\r\n addClass($parent, HIDDEN)\r\n addClass($el, HIDDEN)\r\n })\r\n } else {\r\n addClass($el, HIDDEN)\r\n }\r\n this.closed = true\r\n\r\n if (isFunction(closed)) {\r\n closed.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n toggle() {\r\n const afterToggle = this.attr('afterToggle')\r\n const top = this.offsetTop\r\n const scrollTop = this.$scrollElement.scrollTop\r\n let isStickying\r\n\r\n if (this.isClosed()) {\r\n this.show()\r\n } else {\r\n this.hide()\r\n }\r\n\r\n if (isFunction(afterToggle)) {\r\n later(() => {\r\n isStickying = scrollTop >= top\r\n afterToggle.call(this, this.isClosed(), isStickying)\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n const afterDestroy = this.attr('afterDestroy')\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n this.$parentElement.removeChild(this.$el)\r\n\r\n this.attr(Chapters.DEFAULTS)\r\n this.$el = null\r\n this.$title = null\r\n this.$main = null\r\n this.$list = null\r\n this.$placeholder = null\r\n this.$parentElement = null\r\n this.$scrollElement = null\r\n this.chapters = []\r\n this.active = 0\r\n this.offsetTop = 0\r\n this.$active = null\r\n this.closed = false\r\n\r\n if (this.scrollTimer) {\r\n clearTimeout(this.scrollTimer)\r\n this.scrollTimer = null\r\n }\r\n\r\n if (this.resizeTimer) {\r\n clearTimeout(this.resizeTimer)\r\n this.resizeTimer = null\r\n }\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n if (this.Observer) {\r\n this.Observer = null\r\n }\r\n\r\n return this\r\n }\r\n\r\n onObserver() {\r\n const selector = this.attr('selector')\r\n let timer = null\r\n\r\n this.Observer = intersection(\r\n ($heading) => {\r\n const id = $heading.getAttribute('data-id')\r\n\r\n if (this.playing) {\r\n return false\r\n }\r\n\r\n if (timer) {\r\n clearTimeout(timer)\r\n }\r\n\r\n timer = later(() => {\r\n this.highlight(id)\r\n }, 100)\r\n },\r\n {\r\n selector,\r\n context: this\r\n }\r\n )\r\n\r\n return this\r\n }\r\n\r\n onSelect(evt) {\r\n const stickyHeight = this.attr('stickyHeight')\r\n const $anchor = evt.delegateTarget\r\n const id = $anchor.getAttribute('data-id')\r\n const headingId = $anchor.href.split('#')[1]\r\n const $heading = document.querySelector(`#${headingId}`)\r\n const top = offsetTop($heading) - (stickyHeight + 10)\r\n const min = 0\r\n const max = this.$scrollElement.scrollHeight\r\n const afterScroll = this.attr('afterScroll')\r\n const after = () => {\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(this, 'chapter')\r\n }\r\n\r\n later(() => {\r\n this.playing = false\r\n publish('toolbar:update', {\r\n top,\r\n min,\r\n max\r\n })\r\n })\r\n }\r\n\r\n this.playing = true\r\n if (this.isFixed()) {\r\n this.sticky()\r\n later(() => {\r\n this.scrollTo(top, after)\r\n this.highlight(id)\r\n }, 10)\r\n } else {\r\n this.scrollTo(top, after)\r\n this.highlight(id)\r\n }\r\n\r\n stop(evt)\r\n\r\n return this\r\n }\r\n\r\n onScroll() {\r\n const $scrollElement = this.$scrollElement\r\n\r\n if (this.scrollTimer) {\r\n clearTimeout(this.scrollTimer)\r\n }\r\n\r\n this.scrollTimer = later(() => {\r\n const top = $scrollElement.scrollTop\r\n const min = 0\r\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\r\n\r\n if (this.isFixed()) {\r\n this.sticky()\r\n }\r\n\r\n publish('toolbar:update', {\r\n top,\r\n min,\r\n max\r\n })\r\n }, 100)\r\n\r\n return this\r\n }\r\n\r\n onResize() {\r\n if (this.resizeTimer) {\r\n clearTimeout(this.resizeTimer)\r\n }\r\n\r\n this.resizeTimer = later(() => {\r\n this.calculateStickyHeight()\r\n })\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const $el = this.$el\r\n const $scrollElement = this.$scrollElement\r\n const tagName = $scrollElement.tagName.toLowerCase()\r\n let $element = $scrollElement\r\n\r\n if (tagName === 'html' || tagName === 'body') {\r\n $element = window\r\n }\r\n\r\n on($el, '.outline-chapters__anchor', 'click', this.onSelect, this, true)\r\n at($element, 'scroll', this.onScroll, this, true)\r\n if (this.isSticky()) {\r\n at($element, 'resize', this.onResize, this, true)\r\n }\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const selector = this.attr('selector')\r\n const $el = this.$el\r\n const $scrollElement = this.$scrollElement\r\n const tagName = $scrollElement.tagName.toLowerCase()\r\n let $element = $scrollElement\r\n\r\n if (tagName === 'html' || tagName === 'body') {\r\n $element = window\r\n }\r\n\r\n off($el, 'click', this.onSelect)\r\n off($element, 'scroll', this.onScroll)\r\n\r\n if (this.isSticky()) {\r\n at($element, 'resize', this.onResize)\r\n }\r\n\r\n if (this.Observer) {\r\n document.querySelectorAll(selector).forEach((section) => {\r\n this.Observer.unobserve(section)\r\n })\r\n }\r\n\r\n return this\r\n }\r\n}\r\n\r\nChapters.DEFAULTS = {\r\n parentElement: '',\r\n scrollElement: '',\r\n selector: '.outline-heading',\r\n active: 0,\r\n closed: false,\r\n showCode: true,\r\n position: 'relative',\r\n stickyHeight: 0,\r\n chapters: [],\r\n created: null,\r\n mounted: null,\r\n afterClosed: null,\r\n afterOpened: null,\r\n afterScroll: null,\r\n beforeDestroy: null,\r\n afterDestroy: null,\r\n afterSticky: null\r\n}\r\n\r\nexport default Chapters\r\n","import createElement from './utils/dom/createElement'\r\n\r\nconst _paintChapters = ($list, chapters, showCode = false) => {\r\n const byId = (id) => document.querySelector(`#${id}`)\r\n\r\n chapters.forEach((chapter) => {\r\n const pid = chapter.pid\r\n const id = chapter.id\r\n const rel = chapter.rel\r\n const $text = createElement(\r\n 'span',\r\n {\r\n className: 'outline-chapters__text'\r\n },\r\n [chapter.text]\r\n )\r\n const $link = createElement(\r\n 'a',\r\n {\r\n id: `chapter__anchor-${id}`,\r\n className: 'outline-chapters__anchor',\r\n href: '#' + rel,\r\n rel: rel,\r\n 'data-id': id\r\n },\r\n [$text]\r\n )\r\n let $code\r\n let $li\r\n let $ul\r\n let $parent\r\n\r\n if (showCode) {\r\n $code = createElement(\r\n 'span',\r\n {\r\n className: 'outline-chapters__code',\r\n 'data-id': id\r\n },\r\n [chapter.code]\r\n )\r\n\r\n $link.insertBefore($code, $link.firstChild)\r\n }\r\n\r\n $li = createElement(\r\n 'li',\r\n {\r\n id: `chapter-${id}`,\r\n className: 'outline-chapters__item',\r\n 'data-id': id\r\n },\r\n [$link]\r\n )\r\n\r\n if (pid === -1) {\r\n $list.appendChild($li)\r\n } else {\r\n $parent = byId(`chapter-${pid}`)\r\n $ul = byId(`subject-${pid}`)\r\n\r\n if (!$ul) {\r\n $ul = createElement(\r\n 'ul',\r\n {\r\n id: 'subject-' + pid,\r\n className: 'outline-chapters__subject'\r\n },\r\n [$li]\r\n )\r\n\r\n $parent.appendChild($ul)\r\n } else {\r\n $ul.appendChild($li)\r\n }\r\n }\r\n })\r\n}\r\n\r\nexport default _paintChapters\r\n","import isFunction from '../types/isFunction'\r\nimport isElement from '../types/isElement'\r\n\r\n/**\r\n * 通用的 IntersectionObserver 观察者处理器\r\n * ========================================================================\r\n * @method intersection\r\n * @param {Function} fn\r\n * @param {Object} [props]\r\n * @param {Object|HTMLElement} [props.root]\r\n * @param {String} [props.selector]\r\n * @param {Object} [props.context]\r\n * @param {String} [props.attr]\r\n * @param {String} [props.rootMargin]\r\n */\r\nconst intersection = (fn, props = {}) => {\r\n const root = props.root || null\r\n const selector = props.selector || '.outline-heading'\r\n const context = props.context || null\r\n const rootMargin = props.rootMargin || '0px 0px -90% 0px'\r\n const options = {\r\n rootMargin: rootMargin\r\n }\r\n const Observer = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.intersectionRatio > 0) {\r\n if (isFunction(fn)) {\r\n fn.call(context || entry.target, entry.target)\r\n }\r\n }\r\n })\r\n }, options)\r\n const $root = isElement(root) ? root : document\r\n\r\n if (root) {\r\n options.root = root\r\n }\r\n\r\n $root.querySelectorAll(selector).forEach((section) => {\r\n Observer.observe(section)\r\n })\r\n\r\n return Observer\r\n}\r\n\r\nexport default intersection\r\n","import icon from './utils/icons/icon'\r\nimport createElement from './utils/dom/createElement'\r\nimport addClass from './utils/dom/addClass'\r\n\r\nconst _createButton = (button, rounded = true) => {\r\n const $icon = icon(button.icon, {\r\n iconSet: button.iconSet || 'outline',\r\n color: button.color || '',\r\n size: button.size\r\n })\r\n const $anchor = createElement(\r\n 'a',\r\n {\r\n className: `outline-toolbar__anchor`,\r\n href: button.link\r\n },\r\n [$icon]\r\n )\r\n const $button = createElement(\r\n 'div',\r\n {\r\n className: `outline-toolbar__button ${button.name}`\r\n },\r\n [button.link ? $anchor : $icon]\r\n )\r\n\r\n addClass($icon, 'outline-toolbar__icon')\r\n\r\n if (rounded) {\r\n addClass($button, 'outline-toolbar_rounded')\r\n }\r\n\r\n if (button.disabled) {\r\n addClass($button, 'outline-toolbar_disabled')\r\n }\r\n\r\n return $button\r\n}\r\n\r\nexport default _createButton\r\n","import Base from './base'\r\n\r\nimport isString from './utils/types/isString'\r\nimport isFunction from './utils/types/isFunction'\r\nimport isObject from './utils/types/isObject'\r\nimport isArray from './utils/types/isArray'\r\nimport later from './utils/lang/later'\r\nimport createElement from './utils/dom/createElement'\r\nimport addClass from './utils/dom/addClass'\r\nimport hasClass from './utils/dom/hasClass'\r\nimport removeClass from './utils/dom/removeClass'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\nimport publish from './utils/observer/emit'\r\nimport paint from './utils/icons/paint'\r\n\r\nimport _createButton from './_createButton'\r\n\r\nconst DISABLED = 'outline-toolbar_disabled'\r\nconst HIDDEN = 'outline-toolbar_hidden'\r\n\r\nclass Toolbar extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Toolbar.DEFAULTS\r\n this.$el = null\r\n this.disabled = false\r\n this.closed = false\r\n this.buttons = []\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n\r\n this.attr(options)\r\n created = this.attr('created')\r\n this.disabled = this.attr('disabled')\r\n this.closed = this.attr('closed')\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n this.render().addListeners()\r\n\r\n return this\r\n }\r\n\r\n isDisabled(name) {\r\n const buttons = this.attr('buttons')\r\n let button\r\n\r\n if (name) {\r\n button = buttons.find((option) => option.name === name)\r\n\r\n return button?.disabled\r\n }\r\n\r\n return this.disabled\r\n }\r\n\r\n isClosed() {\r\n return this.closed\r\n }\r\n\r\n highlight(name) {\r\n const button = this.buttons.find((item) => item.name === name)\r\n const ACTIVE = 'outline-toolbar_active'\r\n let $button\r\n\r\n if ($button) {\r\n return this\r\n }\r\n\r\n $button = button.$el\r\n\r\n if (hasClass($button, ACTIVE)) {\r\n removeClass($button, ACTIVE)\r\n } else {\r\n addClass($button, ACTIVE)\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n const mounted = this.attr('mounted')\r\n const buttons = this.attr('buttons') || []\r\n const rounded = this.attr('rounded')\r\n const placement = this.attr('placement')\r\n const $buttons = document.createDocumentFragment()\r\n const $fragment = document.createDocumentFragment()\r\n\r\n paint()\r\n\r\n buttons.forEach((button) => {\r\n const $button = _createButton(button, rounded)\r\n\r\n $buttons.appendChild($button)\r\n this.buttons.push({\r\n name: button.name,\r\n $el: $button\r\n })\r\n })\r\n\r\n this.$el = createElement(\r\n 'div',\r\n {\r\n id: 'outline-toolbar',\r\n className: `outline-toolbar outline-toolbar_${placement}`\r\n },\r\n [$buttons]\r\n )\r\n $fragment.appendChild(this.$el)\r\n document.body.appendChild($fragment)\r\n\r\n if (this.closed) {\r\n this.hide()\r\n }\r\n\r\n if (this.disabled) {\r\n this.disable()\r\n }\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n add(button) {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons')\r\n const action = button.action\r\n const $fragment = document.createDocumentFragment()\r\n let type\r\n\r\n if (isObject(button)) {\r\n buttons.push(button)\r\n $fragment.appendChild(_createButton(button))\r\n } else if (isArray(button)) {\r\n button.forEach((item) => {\r\n $fragment.appendChild(_createButton(item))\r\n })\r\n }\r\n $el.appendChild($fragment)\r\n\r\n if (action && isFunction(action.handler)) {\r\n type = action.type || 'click'\r\n on($el, `.${button.name}`, type, action.handler)\r\n }\r\n\r\n return this\r\n }\r\n\r\n remove(name) {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons')\r\n const button = buttons.find((option) => option.name === name)\r\n let index = -1\r\n let $button\r\n\r\n if (!button) {\r\n return this\r\n }\r\n\r\n buttons.forEach((button, i) => {\r\n if (button.name === name) {\r\n index = i\r\n }\r\n })\r\n\r\n if (index > -1) {\r\n this.attr().buttons.splice(index, 1)\r\n }\r\n\r\n $button = $el.querySelector(`.${name}`)\r\n this.switch(name, false)\r\n $el.removeChild($button)\r\n\r\n return this\r\n }\r\n\r\n switch(name, enabled) {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons')\r\n const button = buttons.find((option) => option.name === name)\r\n let action\r\n let type\r\n let listener\r\n let $button\r\n\r\n if (!button) {\r\n return this\r\n }\r\n\r\n buttons.forEach((option) => {\r\n if (option.name === name) {\r\n button.disabled = !enabled\r\n }\r\n })\r\n\r\n action = button.action\r\n $button = $el.querySelector(`.${name}`)\r\n\r\n if (action) {\r\n type = action.type || 'click'\r\n listener = action.handler\r\n }\r\n\r\n if (enabled) {\r\n removeClass($button, DISABLED)\r\n\r\n if (type && listener) {\r\n on($el, `.${name}`, type, listener)\r\n }\r\n } else {\r\n addClass($button, DISABLED)\r\n\r\n if (type && listener) {\r\n off($el, type, listener)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n disable(name) {\r\n const disabled = this.attr('afterDisabled')\r\n\r\n if (name) {\r\n this.switch(name, false)\r\n } else {\r\n addClass(this.$el, DISABLED)\r\n this.removeListeners()\r\n this.disabled = true\r\n\r\n if (isFunction(disabled)) {\r\n disabled.call(this)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n enable(name) {\r\n const enabled = this.attr('afterEnabled')\r\n\r\n if (name) {\r\n this.switch(name, true)\r\n } else {\r\n this.disabled = false\r\n removeClass(this.$el, DISABLED)\r\n this.addListeners()\r\n\r\n if (isFunction(enabled)) {\r\n enabled.call(this)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n show(name) {\r\n const opened = this.attr('afterOpened')\r\n const button = this.attr('buttons').find((option) => option.name === name)\r\n const $el = this.$el\r\n let $button\r\n\r\n if (name) {\r\n if (!button) {\r\n return this\r\n }\r\n\r\n $button = $el.querySelector(`.${name}`)\r\n removeClass($button, HIDDEN)\r\n } else {\r\n removeClass($el, HIDDEN)\r\n this.closed = false\r\n\r\n if (isFunction(opened)) {\r\n later(() => {\r\n opened.call(this)\r\n }, 310)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n hide(name) {\r\n const closed = this.attr('afterClosed')\r\n const button = this.attr('buttons').find((option) => option.name === name)\r\n const $el = this.$el\r\n let $button\r\n\r\n if (name) {\r\n if (!button) {\r\n return this\r\n }\r\n $button = $el.querySelector(`.${name}`)\r\n addClass($button, HIDDEN)\r\n } else {\r\n addClass($el, HIDDEN)\r\n this.closed = true\r\n\r\n if (isFunction(closed)) {\r\n later(() => {\r\n closed.call(this)\r\n }, 310)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n toggle() {\r\n if (this.isClosed()) {\r\n this.show()\r\n } else {\r\n this.hide()\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n const afterDestroy = this.attr('afterDestroy')\r\n let $el = this.$el\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n document.body.removeChild($el)\r\n $el = null\r\n\r\n this.attr(Toolbar.DEFAULTS)\r\n this.disabled = false\r\n this.closed = false\r\n this.buttons = []\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n refresh() {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons') || []\r\n\r\n this.removeListeners()\r\n $el.innerHTML = ''\r\n\r\n buttons.forEach((button) => {\r\n this.$el.appendChild(_createButton(button))\r\n })\r\n\r\n this.addListeners()\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const buttons = this.attr('buttons')\r\n const $el = this.$el\r\n\r\n if (!buttons || buttons.length < 1) {\r\n return this\r\n }\r\n\r\n buttons.forEach((button) => {\r\n const action = button.action\r\n const disabled = this.disabled\r\n let type\r\n let listener\r\n let context\r\n let command\r\n\r\n if (disabled) {\r\n return false\r\n }\r\n\r\n if (action) {\r\n listener = action.handler\r\n if (isString(listener)) {\r\n command = listener\r\n action.handler = function () {\r\n publish(command, button.name)\r\n }\r\n listener = action.handler\r\n }\r\n\r\n type = action.type || 'click'\r\n context = action.context\r\n }\r\n\r\n if (isFunction(listener)) {\r\n on($el, `.${button.name}`, type, listener, context || this, true)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const buttons = this.attr('buttons')\r\n const $el = this.$el\r\n\r\n if (!buttons || buttons.length < 1) {\r\n return this\r\n }\r\n\r\n buttons.forEach((button) => {\r\n const action = button.action\r\n const disabled = this.disabled\r\n let type\r\n let listener\r\n\r\n if (disabled) {\r\n return false\r\n }\r\n\r\n if (action) {\r\n listener = action.handler\r\n type = action.type || 'click'\r\n }\r\n\r\n if (isFunction(listener)) {\r\n off($el, type, listener)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n}\r\n\r\nToolbar.DEFAULTS = {\r\n placement: 'ltr',\r\n closed: false,\r\n disabled: false,\r\n rounded: true,\r\n buttons: [],\r\n created: null,\r\n mounted: null,\r\n afterClosed: null,\r\n afterOpened: null,\r\n afterDisabled: null,\r\n afterEnabled: null,\r\n beforeDestroy: null,\r\n afterDestroy: null\r\n}\r\n\r\nexport default Toolbar\r\n","/**\r\n * 生成唯一 id 字符串的函数\r\n * ========================================================================\r\n * @method guid\r\n * @param {String} [prefix] - 生成 id 的前缀字符串\r\n * @return {String} 返回一个表示唯一 id 的字符串\r\n */\r\nconst guid = (() => {\r\n let uuid = 0\r\n\r\n return (prefix) => {\r\n uuid += 1\r\n\r\n return prefix ? prefix + '-' + uuid : 'guid-' + uuid\r\n }\r\n})()\r\n\r\nexport default guid\r\n","import _subscribers from './_subscribers'\r\nimport isFunction from '../types/isFunction'\r\nimport guid from '../lang/guid'\r\n\r\n/**\r\n * 订阅主题,并给出处理器函数\r\n * ========================================================================\r\n * @method on\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Function} handler - (必须)主题的处理器函数\r\n * @param {Object} [context] - (可选)指定 this 执行上下文\r\n * @return {String} - 唯一的 token 字符串,例如:'guid-1'。\r\n */\r\nconst on = (topic, handler, context = null) => {\r\n const token = guid()\r\n let subject = typeof topic === 'symbol' ? topic.toString() : topic\r\n\r\n if (!isFunction(handler)) {\r\n return ''\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (!_subscribers[subject]) {\r\n _subscribers[subject] = []\r\n }\r\n\r\n _subscribers[subject].push({\r\n topic: subject,\r\n callback: handler,\r\n context,\r\n token\r\n })\r\n\r\n return token\r\n}\r\n\r\nexport default on\r\n","import _subscribers from './_subscribers'\r\nimport hasOwn from '../lang/hasOwn'\r\n\r\n/**\r\n * 删除与给定 topic 相同的订阅者信息\r\n * ========================================================================\r\n * @method _removeSubscriber\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _removeSubscriber = (topic) => {\r\n if (!hasOwn(_subscribers, topic)) {\r\n return false\r\n }\r\n\r\n delete _subscribers[topic]\r\n}\r\n\r\nexport default _removeSubscriber\r\n","import has from './has'\r\nimport _removeSubscriber from './_removeSubscriber'\r\nimport _removeSubscriberByToken from './_removeSubscriberByToken'\r\n\r\n/**\r\n * 取消订阅主题\r\n * ========================================================================\r\n * @method off\r\n * @param {String} topic - (必须)订阅的主题\r\n * @param {Function|String} [token] - (可选)订阅主题的处理器函数或者唯一 Id 值\r\n */\r\nconst off = (topic, token) => {\r\n if (!has(topic)) {\r\n return false\r\n }\r\n\r\n if (token) {\r\n _removeSubscriberByToken(token)\r\n } else {\r\n _removeSubscriber(topic)\r\n }\r\n}\r\n\r\nexport default off\r\n","import _subscribers from './_subscribers'\r\nimport _removeSubscriber from './_removeSubscriber'\r\n\r\n/**\r\n * 通过订阅者 token 值删除订阅者信息\r\n * ========================================================================\r\n * @method _removeSubscriberByToken\r\n * @param {String} token - 订阅者 token 字符串\r\n * @returns {boolean}\r\n * @private\r\n */\r\nconst _removeSubscriberByToken = (token) => {\r\n const keys = Object.keys(_subscribers)\r\n let index = -1\r\n\r\n if (!token || keys.length < 1) {\r\n return false\r\n }\r\n\r\n keys.forEach((subject) => {\r\n const subscriber = _subscribers[subject]\r\n let topic\r\n\r\n subscriber.forEach((execution, j) => {\r\n if (execution.callback === token || execution.token === token) {\r\n topic = execution.topic\r\n subscriber.splice(index, j)\r\n }\r\n })\r\n\r\n /* istanbul ignore else */\r\n if (subscriber.length < 1) {\r\n _removeSubscriber(topic)\r\n }\r\n })\r\n}\r\n\r\nexport default _removeSubscriberByToken\r\n","import Base from './base'\r\nimport Anchors from './anchors'\r\nimport Drawer from './drawer'\r\nimport Chapters from './chapters'\r\nimport Toolbar from './toolbar'\r\n\r\nimport later from './utils/lang/later'\r\nimport isFunction from './utils/types/isFunction'\r\nimport scrollTo from './utils/dom/scrollTo'\r\nimport _getScrollElement from './utils/dom/_getScrollElement'\r\nimport subscribe from './utils/observer/on'\r\nimport unsubscribe from './utils/observer/off'\r\n\r\nclass Outline extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Outline.DEFAULTS\r\n this.anchors = null\r\n this.drawer = null\r\n this.chapters = null\r\n this.toolbar = null\r\n this.buttons = []\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n getChapters(isTreeStructured = false) {\r\n return this.anchors.getChapters(isTreeStructured)\r\n }\r\n\r\n count() {\r\n return this.anchors.count()\r\n }\r\n\r\n render() {\r\n this._renderAnchors()._renderChapters()._renderToolbar()\r\n\r\n return this\r\n }\r\n\r\n _renderAnchors() {\r\n const articleElement = this.attr('articleElement')\r\n const selector = this.attr('selector')\r\n const stickyHeight = this.attr('stickyHeight')\r\n const scrollElement = this.attr('scrollElement')\r\n const showCode = this.attr('showCode')\r\n const anchorURL = this.attr('anchorURL')\r\n const afterScroll = this.attr('afterScroll')\r\n\r\n this.anchors = new Anchors({\r\n articleElement,\r\n stickyHeight,\r\n scrollElement,\r\n selector,\r\n showCode,\r\n anchorURL,\r\n afterScroll\r\n })\r\n\r\n return this\r\n }\r\n\r\n _renderChapters() {\r\n const title = this.attr('title')\r\n const stickyHeight = this.attr('stickyHeight')\r\n const scrollElement = this.attr('scrollElement')\r\n const customClass = this.attr('customClass')\r\n const showCode = this.attr('showCode')\r\n const position = this.attr('position')\r\n const placement = this.attr('placement')\r\n const afterSticky = this.attr('afterSticky')\r\n const afterToggle = this.attr('afterToggle')\r\n const afterScroll = this.attr('afterScroll')\r\n const count = this.count()\r\n let parentElement = this.attr('parentElement')\r\n let CHAPTERS_OPTIONS\r\n\r\n if (count < 1) {\r\n return this\r\n }\r\n\r\n CHAPTERS_OPTIONS = {\r\n scrollElement,\r\n showCode,\r\n position,\r\n title,\r\n stickyHeight,\r\n chapters: this.getChapters(),\r\n afterSticky,\r\n afterToggle,\r\n afterScroll\r\n }\r\n\r\n if (position === 'relative') {\r\n this.drawer = new Drawer({\r\n placement,\r\n title,\r\n size: 'tiny',\r\n hasOffset: true,\r\n hasPadding: false,\r\n customClass,\r\n afterClosed: () => {\r\n const toolbar = this.toolbar\r\n toolbar.toggle()\r\n }\r\n })\r\n parentElement = this.drawer.$main\r\n } else {\r\n CHAPTERS_OPTIONS.customClass = customClass\r\n }\r\n\r\n CHAPTERS_OPTIONS.parentElement = parentElement\r\n this.chapters = new Chapters(CHAPTERS_OPTIONS)\r\n\r\n return this\r\n }\r\n\r\n _renderToolbar() {\r\n const placement = this.attr('placement')\r\n const homepage = this.attr('homepage')\r\n const git = this.attr('git')\r\n const tags = this.attr('tags')\r\n const issues = this.attr('issues')\r\n const tools = this.attr('tools')\r\n const count = this.count()\r\n const UP = {\r\n name: 'up',\r\n icon: 'up',\r\n size: 20,\r\n action: {\r\n type: 'click',\r\n handler: 'toolbar:action:up'\r\n }\r\n }\r\n const HOME = {\r\n name: 'homepage',\r\n icon: 'homepage',\r\n size: 20,\r\n link: homepage\r\n }\r\n const GIT = {\r\n name: 'github',\r\n icon: 'github',\r\n size: 20,\r\n link: git\r\n }\r\n const TAGS = {\r\n name: 'tags',\r\n icon: 'tags',\r\n size: 20,\r\n link: tags\r\n }\r\n const ISSUES = {\r\n name: 'issues',\r\n icon: 'issues',\r\n size: 20,\r\n link: issues\r\n }\r\n const MENU = {\r\n name: 'menu',\r\n icon: 'menu',\r\n size: 18,\r\n action: {\r\n type: 'click',\r\n handler: 'toolbar:action:toggle'\r\n }\r\n }\r\n const DOWN = {\r\n name: 'down',\r\n icon: 'down',\r\n size: 20,\r\n action: {\r\n type: 'click',\r\n handler: 'toolbar:action:down'\r\n }\r\n }\r\n const buttons = []\r\n\r\n buttons.push(UP)\r\n if (count > 0) {\r\n buttons.push(MENU)\r\n }\r\n if (homepage) {\r\n buttons.push(HOME)\r\n }\r\n if (git) {\r\n buttons.push(GIT)\r\n }\r\n if (tags) {\r\n buttons.push(TAGS)\r\n }\r\n if (issues) {\r\n buttons.push(ISSUES)\r\n }\r\n if (tools?.length > 0) {\r\n buttons.push(...tools)\r\n }\r\n buttons.push(DOWN)\r\n this.buttons = [...buttons]\r\n\r\n this.toolbar = new Toolbar({\r\n placement,\r\n buttons: buttons\r\n })\r\n\r\n return this\r\n }\r\n\r\n addButton(button) {\r\n const toolbar = this.toolbar\r\n const buttons = this.buttons\r\n buttons.splice(-1, 0, button)\r\n toolbar.attr({\r\n buttons\r\n })\r\n toolbar.refresh()\r\n return this\r\n }\r\n\r\n removeButton(name) {\r\n this.toolbar.remove(name)\r\n return this\r\n }\r\n\r\n toTop() {\r\n const afterScroll = this.attr('afterScroll')\r\n const toolbar = this.toolbar\r\n const chapters = this.chapters\r\n const count = this.count()\r\n const afterTop = () => {\r\n toolbar.hide('up')\r\n toolbar.show('down')\r\n\r\n if (count > 0) {\r\n chapters.highlight(0)\r\n chapters.playing = false\r\n }\r\n\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(toolbar, 'up')\r\n }\r\n }\r\n\r\n if (count > 0) {\r\n chapters.playing = true\r\n }\r\n this.scrollTo(0, afterTop)\r\n\r\n return this\r\n }\r\n\r\n toBottom() {\r\n const afterScroll = this.attr('afterScroll')\r\n const $scrollElement = _getScrollElement(this.attr('scrollElement'))\r\n const toolbar = this.toolbar\r\n const chapters = this.chapters\r\n const count = this.count()\r\n const top = Math.floor(\r\n $scrollElement.scrollHeight - $scrollElement.clientHeight\r\n )\r\n const afterDown = () => {\r\n toolbar.hide('down')\r\n toolbar.show('up')\r\n\r\n if (count > 0) {\r\n chapters.highlight(count - 1)\r\n chapters.playing = false\r\n }\r\n\r\n if (isFunction(afterScroll)) {\r\n afterScroll.call(toolbar, 'bottom')\r\n }\r\n }\r\n\r\n if (count > 0) {\r\n chapters.playing = true\r\n }\r\n this.scrollTo(top, afterDown)\r\n\r\n return this\r\n }\r\n\r\n scrollTo(top, afterScroll) {\r\n const scrollElement = this.attr('scrollElement')\r\n scrollTo(scrollElement, top, afterScroll)\r\n return this\r\n }\r\n\r\n toggle() {\r\n const position = this.attr('position')\r\n const toolbar = this.toolbar\r\n const drawer = this.drawer\r\n const chapters = this.chapters\r\n const count = this.count()\r\n\r\n if (count < 1) {\r\n return this\r\n }\r\n\r\n if (position !== 'relative') {\r\n chapters.toggle()\r\n toolbar.highlight('menu')\r\n } else {\r\n toolbar.toggle()\r\n\r\n later(() => {\r\n if (chapters.isInside()) {\r\n chapters.toggle()\r\n } else {\r\n drawer.toggle()\r\n }\r\n })\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n let anchors = this.anchors\r\n let chapters = this.chapters\r\n let drawer = this.drawer\r\n let toolbar = this.toolbar\r\n let isOutside = false\r\n const count = this.count()\r\n\r\n this.removeListeners()\r\n\r\n if (count > 0) {\r\n isOutside = chapters.isOutside()\r\n\r\n chapters.destroy()\r\n chapters = null\r\n\r\n if (isOutside) {\r\n drawer.destroy()\r\n drawer = null\r\n }\r\n }\r\n\r\n toolbar.destroy()\r\n toolbar = null\r\n\r\n anchors.destroy()\r\n anchors = null\r\n\r\n this.attr(Outline.DEFAULTS)\r\n\r\n return this\r\n }\r\n\r\n onToggle() {\r\n this.toggle()\r\n return this\r\n }\r\n\r\n onScrollTop() {\r\n this.toTop()\r\n return this\r\n }\r\n\r\n onScrollBottom() {\r\n this.toBottom()\r\n return this\r\n }\r\n\r\n onToolbarUpdate({ top, min, max }) {\r\n const toolbar = this.toolbar\r\n const current = Math.ceil(top)\r\n\r\n if (current <= min) {\r\n toolbar.hide('up')\r\n toolbar.show('down')\r\n } else if (current >= max) {\r\n toolbar.hide('down')\r\n toolbar.show('up')\r\n } else if (current > min && current < max) {\r\n toolbar.show('up')\r\n toolbar.show('down')\r\n }\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n subscribe('toolbar:update', this.onToolbarUpdate, this)\r\n subscribe('toolbar:action:up', this.onScrollTop, this)\r\n subscribe('toolbar:action:toggle', this.onToggle, this)\r\n subscribe('toolbar:action:down', this.onScrollBottom, this)\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n unsubscribe('toolbar:update')\r\n unsubscribe('toolbar:action:up')\r\n unsubscribe('toolbar:action:toggle')\r\n unsubscribe('toolbar:action:down')\r\n return this\r\n }\r\n}\r\n\r\nOutline.DEFAULTS = {\r\n articleElement: '#article',\r\n selector: 'h2,h3,h4,h5,h6',\r\n title: '目录',\r\n scrollElement: 'html,body',\r\n position: 'relative',\r\n parentElement: '#aside',\r\n placement: 'rtl',\r\n showCode: true,\r\n anchorURL: '',\r\n stickyHeight: 0,\r\n homepage: '',\r\n git: '',\r\n tags: '',\r\n issues: '',\r\n tools: [],\r\n customClass: '',\r\n afterSticky: null,\r\n afterToggle: null,\r\n afterScroll: null\r\n}\r\n\r\nif (window.jQuery) {\r\n // 将 Outline 扩展为一个 jquery 插件\r\n // eslint-disable-next-line no-undef\r\n jQuery.extend(jQuery.fn, {\r\n outline: function (options) {\r\n // eslint-disable-next-line no-undef\r\n let $article = jQuery(this)\r\n\r\n return new Outline(\r\n // eslint-disable-next-line no-undef\r\n jQuery.extend({}, options, {\r\n articleElement: $article\r\n })\r\n )\r\n }\r\n })\r\n}\r\n\r\nexport default Outline\r\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isElement","nodeName","tagName","nodeType","later","fn","delay","setTimeout","easeInQuad","x","_getScrollElement","scrollElement","$rootElements","$scrollElement","document","querySelector","querySelectorAll","scrollTop","scrollTo","top","afterStop","step","distance","MAX_HEIGHT","scrollHeight","MAX_TOP","stop","play","requestAnimationFrame","offsetTop","el","offsetParent","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","$children","childNodes","filter","getListeners","$child","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","stopPropagation","preventDefault","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","isArray","Array","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","exec","iconName","getSymbol","paint","$body","body","$icons","symbols","add","innerHTML","join","createElement","insertBefore","firstChild","trim","isDOM","isHTMLCollection","fragment","isTextNode","setAttribute","toLowerCase","style","cssText","className","children","$fragment","createDocumentFragment","$el","isValidChild","child","append","createTextNode","appendChild","every","isSVG","pattern","RegExp","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","hasClass","allClass","classList","contains","removeClass","remove","_resetHeading","$heading","hasAnchor","isAtStart","CLS_HEADING","text","$anchor","removeAttribute","removeChild","getChapters","headings","showCode","previous","level","chapters","heading","headingLevel","current","parseInt","pid","differ","_getChapterParentIdByDiffer","id","rel","groups","group","JSON","stringify","cb","code","String","c","b","_getChaptersWithCode","Anchors","super","DEFAULTS","$articleElement","$headings","created","articleElement","isTreeStructured","list","nodeKey","parentKey","map","roots","item","node","toTree","count","mounted","anchorURL","chapterCode","headingId","href","_updateHeading","after","beforeDestroy","afterDestroy","onAnchorTrigger","afterScroll","stickyHeight","max","clientHeight","publish","min","addClass","setProperty","documentElement","zIndex","idx","Drawer","title","closed","$modal","$header","$title","$close","$main","$footer","$overlay","setTitle","isClosed","placement","hasClose","hasOverlay","hasOffset","hasPadding","autoHeight","customClass","open","opened","close","toggle","afterToggle","onClose","afterClosed","afterOpened","at","getStyle","ruleName","getComputedStyle","Chapters","$list","$placeholder","$parentElement","active","offsetWidth","$active","scrollTimer","resizeTimer","playing","Observer","parentElement","$parent","isSticky","isFixed","isInside","isOutside","_paintEdge","contents","calculateStickyHeight","byId","chapter","$text","$link","$code","$li","$ul","_paintChapters","positionPlaceholder","sticky","onObserver","mainPaddingTop","mainBorderTop","placeholderPaddingTop","placeholderMarginTop","placeholderBorderTop","offsetHeight","highlight","HIGHLIGHT","getAttribute","afterSticky","FIXED","isStickying","Math","window","innerHeight","show","FOLDED","HIDDEN","hide","clearTimeout","timer","props","root","rootMargin","IntersectionObserver","entries","entry","intersectionRatio","$root","section","observe","intersection","onSelect","split","onScroll","onResize","unobserve","_createButton","button","rounded","link","$button","disabled","DISABLED","Toolbar","buttons","isDisabled","option","ACTIVE","$buttons","disable","action","switch","enabled","enable","refresh","command","afterDisabled","afterEnabled","guid","uuid","prefix","token","subject","_removeSubscriber","execution","j","_removeSubscriberByToken","Outline","anchors","drawer","toolbar","_renderAnchors","_renderChapters","_renderToolbar","CHAPTERS_OPTIONS","homepage","git","tags","issues","tools","HOME","GIT","TAGS","ISSUES","MENU","addButton","removeButton","toTop","toBottom","floor","onToggle","onScrollTop","onScrollBottom","onToolbarUpdate","ceil","subscribe","unsubscribe","jQuery","extend","outline","$article"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"outline.min.js","sources":["src/utils/types/isString.js","src/utils/lang/hasOwn.js","src/utils/lang/toString.js","src/utils/types/isFunction.js","src/utils/types/isObject.js","src/base.js","src/utils/lang/extend.js","src/utils/types/isElement.js","src/utils/lang/later.js","src/utils/lang/easeInQuad.js","src/utils/dom/_getScrollElement.js","src/utils/dom/scrollTo.js","src/utils/dom/offsetTop.js","src/utils/dom/matches.js","src/utils/dom/getParentOrHost.js","src/utils/event/enum.js","src/utils/event/_off.js","src/utils/event/_delete.js","src/utils/event/purgeElement.js","src/utils/event/getListeners.js","src/utils/event/off.js","src/utils/event/on.js","src/utils/event/getTarget.js","src/utils/dom/resolveTextNode.js","src/utils/dom/closest.js","src/utils/event/stop.js","src/utils/observer/_subscribers.js","src/utils/observer/_hasDirectSubscribersFor.js","src/utils/observer/has.js","src/utils/observer/_hasSubscribers.js","src/utils/observer/emit.js","src/utils/types/isTypedArray.js","src/utils/types/isArray.js","src/utils/icons/symbols.js","src/utils/icons/defaults.js","src/utils/icons/getSymbols.js","src/utils/icons/getSymbol.js","src/utils/icons/paint.js","src/utils/icons/add.js","src/utils/lang/trim.js","src/utils/types/isDOM.js","src/utils/types/isHTMLCollection.js","src/utils/types/isFragment.js","src/utils/types/isTextNode.js","src/utils/dom/setAttribute.js","src/utils/dom/createElement.js","src/utils/types/isSVG.js","src/utils/icons/icon.js","src/utils/icons/createElement.js","src/utils/dom/hasClass.js","src/utils/dom/removeClass.js","src/_resetHeading.js","src/utils/types/isEmpty.js","src/getChapters.js","src/utils/lang/stripTags.js","src/_getChapterParentIdByDiffer.js","src/_getChaptersWithCode.js","src/anchors.js","src/utils/lang/toTree.js","src/_updateHeading.js","src/utils/dom/addClass.js","src/utils/dom/setProperty.js","src/zIndex.js","src/drawer.js","src/utils/event/at.js","src/utils/dom/getStyle.js","src/chapters.js","src/_paintChapters.js","src/utils/dom/intersection.js","src/_createButton.js","src/toolbar.js","src/utils/lang/guid.js","src/utils/observer/on.js","src/utils/observer/_removeSubscriber.js","src/utils/observer/off.js","src/utils/observer/_removeSubscriberByToken.js","src/outline.js"],"sourcesContent":["/**\n * 检测数据是否为 String 类型\n * ========================================================================\n * @method isArray\n * @param {*} str\n * @returns {boolean}\n */\nconst isString = (str) => {\n return typeof str === 'string'\n}\n\nexport default isString\n","/**\n * 检测对象自身属性中是否具有指定的属性。\n * ========================================================================\n * @method hasOwn\n * @param {Object} obj - (必须)检测的目标对象\n * @param {String} prop - (必须)属性名\n * @returns {Boolean}\n */\nconst hasOwn = (obj, prop) => {\n const hasOwnProperty = Object.prototype.hasOwnProperty\n return obj && hasOwnProperty.call(obj, prop)\n}\n\nexport default hasOwn\n","/**\n * Object 对象原型上的 toString 方法\n * ========================================================================\n * @method toString\n * @param {*} val\n * @returns {string}\n */\nconst toString = (val) => {\n return Object.prototype.toString.apply(val)\n}\n\nexport default toString\n","import toString from '../lang/toString'\n\n/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return typeof val === 'function' || toString(val) === '[object Function]'\n}\n\nexport default isFunction\n","import toString from '../lang/toString'\nimport isFunction from '../types/isFunction'\n\n/**\n * 检测数据是否为 Object 类型\n * ========================================================================\n * @method isObject\n * @param {*} o\n * @returns {boolean}\n */\nconst isObject = (o) => {\n return (\n (toString(o) === '[object Object]' ||\n typeof o === 'object' ||\n isFunction(o)) &&\n o !== null\n )\n}\n\nexport default isObject\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\n\n/**\n * 扩展对象\n * ========================================================================\n * @method extend\n * @param {Object} origin\n * @param {Object} source\n */\nconst extend = (origin, source) => {\n const keys = Object.keys(source)\n\n keys.forEach((prop) => {\n if (hasOwn(source, prop)) {\n origin[prop] = source[prop]\n }\n })\n}\n\nexport default extend\n","import isObject from './isObject'\n\n/**\n * 检测数据是否为 HTMLElement DOM 节点\n * ========================================================================\n * @method isElement\n * @param {*} o\n * @returns {boolean}\n */\nconst isElement = (o) => {\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\n}\n\nexport default isElement\n","import isFunction from '../types/isFunction'\n\n/**\n * later - 延迟执行方法\n * ========================================================================\n * @method later\n * @param {Function} fn\n * @param {Number} [delay]\n * @returns {number|boolean}\n */\nconst later = (fn, delay = 300) => {\n if (!isFunction(fn)) {\n return false\n }\n\n return setTimeout(() => {\n fn()\n }, delay)\n}\n\nexport default later\n","/**\n * 返回给定值的平方值\n * ========================================================================\n * @method easeInQuad\n * @param {Number} x\n * @returns {number}\n */\nconst easeInQuad = (x) => {\n return x * x\n}\n\nexport default easeInQuad\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\n\n/**\n * 通过给的 scrollElement 参数,获取滚动 DOM 元素\n * ========================================================================\n * @method _getScrollElement\n * @param {String|HTMLElement} scrollElement\n * @returns {Element}\n * @private\n */\nconst _getScrollElement = (scrollElement = null) => {\n let $rootElements\n let $scrollElement\n\n if (!scrollElement) {\n $rootElements = document.querySelectorAll('html,body')\n $scrollElement =\n $rootElements[0].scrollTop - $rootElements[1].scrollTop >= 0\n ? $rootElements[0]\n : $rootElements[1]\n } else {\n if (isString(scrollElement)) {\n $scrollElement = document.querySelector(scrollElement)\n } else if (isElement(scrollElement)) {\n $scrollElement = scrollElement\n }\n }\n\n return $scrollElement\n}\n\nexport default _getScrollElement\n","import easeInQuad from '../lang/easeInQuad'\nimport isFunction from '../types/isFunction'\nimport _getScrollElement from './_getScrollElement'\n\n/**\n * 指定 rootElement DOM 节点滚动到指定 top 位置\n * ========================================================================\n * @method scrollTo\n * @param {HTMLElement|Object} [scrollElement] - (必须)要滚动的 DOM 节点\n * @param {Number} top - (必须)滚动的 scrollTop 数值\n * @param {Function} [afterStop] - (可选)滚动完成的回调函数\n */\nconst scrollTo = (scrollElement, top, afterStop) => {\n const $scrollElement = _getScrollElement(scrollElement)\n let scrollTop = $scrollElement.scrollTop\n let step = 0\n const distance = top - scrollTop\n const MAX_HEIGHT = $scrollElement.scrollHeight\n const MAX_TOP = top - MAX_HEIGHT <= 0 ? top : MAX_HEIGHT\n const stop = (top) => {\n if (isFunction(afterStop)) {\n afterStop(top)\n }\n\n return false\n }\n const play = () => {\n step += 1\n\n // 向上滚动\n if (distance < 0) {\n scrollTop -= easeInQuad(step)\n $scrollElement.scrollTop = scrollTop\n\n if (scrollTop <= top) {\n $scrollElement.scrollTop = top\n return stop(top)\n }\n } else {\n scrollTop += easeInQuad(step)\n $scrollElement.scrollTop = scrollTop\n\n if (scrollTop >= MAX_TOP) {\n $scrollElement.scrollTop = MAX_TOP\n return stop(MAX_TOP)\n }\n }\n\n requestAnimationFrame(play)\n }\n\n requestAnimationFrame(play)\n}\n\nexport default scrollTo\n","/**\n * 获取 DOM 节点相对于窗口的 left (纵坐标)值\n * ========================================================================\n * @method offsetTop\n * @param {HTMLElement} el - DOM 节点\n * @returns {Number}\n */\nconst offsetTop = (el) => {\n let top = el.offsetTop\n\n if (el.offsetParent !== null) {\n top += offsetTop(el.offsetParent)\n }\n\n return top\n}\n\nexport default offsetTop\n","/**\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\n * ========================================================================\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\n * 标 DOM 元素是否为事件代理所期望触发的目标。\n * ========================================================================\n * @method matches\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\n * @returns {Boolean}\n */\nconst matches = (el, selector = '') => {\n const sel = selector.replace(/^>/i, '')\n\n if (!selector || !sel || !el) {\n return false\n }\n\n /* istanbul ignore else */\n if (el.matches) {\n return el.matches(sel)\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(sel)\n } else {\n return false\n }\n}\n\nexport default matches\n","/**\n * 获取 DOM 元素的父节点\n * ========================================================================\n * @method getParentOrHost\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\n * @returns {*|HTMLElement}\n */\nconst getParentOrHost = (el) => {\n return el.host && el !== document && el.host.nodeType\n ? el.host\n : el.parentNode\n}\n\nexport default getParentOrHost\n","export const CAPTURE_EVENTS = [\n 'focusout',\n 'blur',\n 'focusin',\n 'focus',\n 'load',\n 'unload',\n 'mouseenter',\n 'mouseleave'\n]\n","import { CAPTURE_EVENTS } from './enum'\nimport _delete from './_delete'\n\n/**\n * (私有方法)取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method _off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须)事件处理器回调函数\n * @private\n */\nconst _off = (el, type, fn) => {\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n /* istanbul ignore else */\n if (fn._delegateListener) {\n fn = fn._delegateListener\n delete fn._delegateListener\n }\n\n // 移除缓存的 _listeners 数据\n _delete(el, type, fn)\n\n el.removeEventListener(type, fn, capture)\n}\n\nexport default _off\n","/**\n * 删除 DOM 元素缓存的 _listeners 数据\n * ========================================================================\n * @method _delete\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\n * @param {String} type - 事件类型(名称)\n * @param {Function} [fn] - 事件处理器回调函数\n */\nconst _delete = function (el, type, fn) {\n const listeners = el._listeners\n let index = -1\n\n if (listeners.length < 1) {\n return false\n }\n\n // 移除缓存的 _listeners 数据\n listeners.forEach((listener, i) => {\n const handler = listener.fn\n\n if (type === listener.type) {\n index = i\n\n if (handler === fn) {\n index = i\n }\n }\n })\n\n /* istanbul ignore else */\n if (index > -1) {\n listeners.splice(index, 1)\n }\n}\n\nexport default _delete\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\nimport getListeners from './getListeners'\nimport _off from './_off'\n\n/**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purgeElement\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\n * @param {String|Boolean} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n */\nconst purgeElement = function (el, type, recurse = false) {\n const $element = isString(el) ? document.querySelector(el) : el\n const $children = $element.childNodes\n const listeners = getListeners($element, type)\n\n listeners.forEach((listener) => {\n _off($element, listener.type, listener.fn)\n })\n\n if (\n (recurse || type === true || arguments.length === 1) &&\n $element &&\n $children\n ) {\n $children.forEach(($child) => {\n if (isElement($child)) {\n purgeElement($child, type, recurse)\n }\n })\n }\n}\n\nexport default purgeElement\n","import isString from '../types/isString'\n\n/**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @methods getListeners\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\nconst getListeners = (el, type) => {\n let listeners = el._listeners || []\n\n if (isString(type) && type) {\n listeners = listeners.filter((listener) => {\n return listener.type === type\n })\n }\n\n return listeners\n}\n\nexport default getListeners\n","import purgeElement from './purgeElement'\nimport isFunction from '../types/isFunction'\nimport _off from './_off'\n\n/**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} [fn] - (可选)事件处理器回调函数\n */\nconst off = (el, type, fn) => {\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\n if (!isFunction(fn)) {\n return purgeElement(el, type)\n }\n\n _off(el, type, fn)\n}\n\nexport default off\n","import closest from '../dom/closest'\nimport off from './off'\nimport getTarget from './getTarget'\n\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst on = (el, selector, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n const listener = function (evt) {\n const target = getTarget(evt)\n // 通过 Element.matches 方法获得点击的目标元素\n const delegateTarget = closest(target, selector, el)\n let overrideContext = context || el\n\n evt.delegateTarget = delegateTarget\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n /* istanbul ignore else */\n if (delegateTarget) {\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n selector,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default on\n","import resolveTextNode from '../dom/resolveTextNode'\n\n/**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\nconst getTarget = function (evt) {\n const target = evt.target\n\n return resolveTextNode(target)\n}\n\nexport default getTarget\n","/**\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\n * resolveTextNode() 方法则会返回实际的目标节点。\n * ========================================================================\n * @method resolveTextNode\n * @param {HTMLElement|Text} el - 要解析的节点\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\n */\nconst resolveTextNode = function (el) {\n if (el && el.nodeType === 3) {\n return el.parentNode\n }\n\n return el\n}\n\nexport default resolveTextNode\n","import matches from './matches'\nimport getParentOrHost from './getParentOrHost'\n\n/**\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\n * ========================================================================\n * @method closest\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)DOM 元素的选择其\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\n */\nconst closest = (el, selector, ctx, includeCTX) => {\n const context = ctx || document\n\n if (!el) {\n return null\n }\n\n do {\n /* istanbul ignore else */\n if (\n (selector != null &&\n (selector.startsWith('>')\n ? el.parentNode === context && matches(el, selector)\n : matches(el, selector))) ||\n (includeCTX && el === context)\n ) {\n return el\n }\n\n /* istanbul ignore else */\n if (el === context) {\n break\n }\n\n /* jshint boss:true */\n } while ((el = getParentOrHost(el)))\n}\n\nexport default closest\n","/**\n * 停止事件(阻止默认行为和阻止事件的捕获或冒泡)\n * ========================================================================\n * @method stop\n * @param {Event} evt - 事件对象\n *\n * @example\n *
\n * Service\n * Help\n *
\n *\n * const $nav = document.querySelector('#nav')\n * const $service = document.querySelector('.anchor')\n *\n * on($nav, 'click', function(evt) {\n * console.log('你点击了导航栏')\n * })\n *\n * on($anchor, 'click', function(evt) {\n * console.log('tagName', this.tagName)\n *\n * // 工作台输出:'a'\n * // 不会触发事件冒泡,输出:'你点击了导航栏'\n * // 也不会切换到 href 属性的页面,阻止了点击链接的默认行为\n * stopEvent(evt)\n * })\n */\nconst stop = function (evt) {\n evt.stopPropagation()\n evt.preventDefault()\n}\n\nexport default stop\n","/**\n * 存储订阅者(主题和处理器的)私有对象\n * ========================================================================\n * @type {{}}\n * @private\n */\nconst _subscribers = {}\n\nexport default _subscribers\n","import _subscribers from './_subscribers'\nimport hasOwn from '../lang/hasOwn'\n\n/**\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\n * ========================================================================\n * @method _hasDirectSubscribersFor\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasDirectSubscribersFor = (topic) => {\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\n}\n\nexport default _hasDirectSubscribersFor\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\nimport _hasSubscribers from './_hasSubscribers'\n\n/**\n * 判断是否存在包含 topic 指定的订阅者信息\n * ========================================================================\n * @method has\n * @param {String} topic - (必须)主题名称\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\n * @returns {Boolean}\n */\nconst has = (topic, isDirect = true) => {\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\n}\n\nexport default has\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * 判断是否存在包含给定 topic 相关的订阅者信息\n * ========================================================================\n * @method _hasSubscribers\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasSubscribers = (topic) => {\n let found = _hasDirectSubscribersFor(topic)\n let position = topic.lastIndexOf('.')\n\n while (!found && position !== -1) {\n topic = topic.substring(0, position)\n position = topic.lastIndexOf('.')\n found = _hasDirectSubscribersFor(topic)\n }\n\n return found\n}\n\nexport default _hasSubscribers\n","import isTypedArray from '../types/isTypedArray'\nimport _subscribers from './_subscribers'\nimport has from './has'\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * (异步)发布订阅主题信息\n * ========================================================================\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\n * ========================================================================\n * @method emit\n * @param {String} topic - (必须)主题名称\n * @param {Object} data - (必须)数据对象\n * @param {Boolean} async - (可选) 是否异步发布\n */\nconst emit = (topic, data, async = true) => {\n const execute = (topic) => {\n if (!_hasDirectSubscribersFor(topic)) {\n return false\n }\n\n _subscribers[topic].forEach((subscriber) => {\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\n // 采用 toString() 方法转化为普通(JSON)字符串\n const message = isTypedArray(data) ? data.toString() : data\n\n subscriber.callback.call(subscriber.context || subscriber, message)\n })\n }\n const deliver = () => {\n let subscriber = topic\n let position = topic.lastIndexOf('.')\n\n while (position !== -1) {\n subscriber = subscriber.substring(0, position)\n position = subscriber.lastIndexOf('.')\n\n execute(subscriber)\n }\n\n // 执行 topic 对应的处理器\n execute(topic)\n // 执行特殊 topic:'*'(监听全部消息的发布)\n execute('*')\n }\n\n if (!has(topic)) {\n return false\n }\n\n if (async) {\n setTimeout(deliver, 10)\n } else {\n deliver()\n }\n}\n\nexport default emit\n","import toString from '../lang/toString'\n/**\n * 判断检测数据是否为 Typed Arrays 类型的数据\n * ========================================================================\n * @param {*} val\n * @returns {boolean}\n */\nconst isTypedArray = (val) => {\n const TYPES = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n '[object BigInt64Array]',\n '[object BigUint64Array]'\n ]\n\n return TYPES.indexOf(toString(val)) > -1\n}\n\nexport default isTypedArray\n","import toString from '../lang/toString'\n\n/**\n * 检测数据是否为 Array 类型\n * ========================================================================\n * @method isArray\n * @param {*} o\n * @returns {boolean}\n */\nconst isArray = (o) => {\n if (Array.isArray) {\n return Array.isArray(o)\n } else {\n return toString(o) === '[object Array]'\n }\n}\n\nexport default isArray\n","import DEFAULTS from './defaults'\n\nconst SYMBOLS = [...DEFAULTS]\n\nexport default SYMBOLS\n","const DEFAULTS = [\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n ''\n]\n\nexport default DEFAULTS\n","import isString from '../types/isString'\nimport getSymbol from './getSymbol'\nimport SYMBOLS from './symbols'\n\n/**\n *\n * @method getSymbols\n * @param {String} [name]\n * @param {String} [iconSet]\n * @returns {string[]|*}\n */\nconst getSymbols = (name, iconSet = 'icon') => {\n if (isString(name)) {\n return getSymbol(name, iconSet)\n }\n\n return [...SYMBOLS]\n}\n\nexport default getSymbols\n","import SYMBOLS from './symbols'\n\n/**\n * @method getSymbol\n * @param {String} name\n * @param {String} [iconSet]\n * @returns {String}\n */\nconst getSymbol = (name, iconSet = 'icon') => {\n const patternName = /id=\"(.*?)\"/\n const patternSet = /^(\\w+)-/\n const symbols = SYMBOLS\n\n return symbols.find((symbol) => {\n const names = patternName.exec(symbol)\n const fullName = names[1]\n const sets = patternSet.exec(fullName)\n const setName = sets[1]\n const iconName =\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\n\n return setName === iconSet && fullName === iconName\n })\n}\n\nexport default getSymbol\n","import add from './add'\nimport getSymbols from './getSymbols'\n\n/**\n * 绘制 SVG 图标集\n * ========================================================================\n * @method paint\n * @param {String|Array} symbol\n */\nconst paint = (symbol = '') => {\n const $body = document.body\n let $icons = document.querySelector('#outline-icons')\n let symbols = []\n\n add(symbol)\n symbols = getSymbols()\n\n if ($icons) {\n $icons.innerHTML = symbols.join('')\n } else {\n $icons = document.createElement('div')\n $icons.innerHTML =\n ``\n $body.insertBefore($icons.firstChild, $body.firstChild)\n }\n}\n\nexport default paint\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport SYMBOLS from './symbols'\n\n/**\n * @method add\n * @param {Array|String} symbols\n * @return {Boolean}\n */\nconst add = (symbols) => {\n if (!symbols) {\n return false\n }\n\n if (isArray(symbols) && symbols.length > 0) {\n symbols.forEach((symbol) => {\n /* istanbul ignore else */\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\n SYMBOLS.push(symbol)\n }\n })\n } else {\n /* istanbul ignore else */\n if (isString(symbols)) {\n SYMBOLS.push(symbols)\n }\n }\n}\n\nexport default add\n","import isString from '../types/isString'\n\n/**\n * 清楚字符串起始位置所有的空格\n * ========================================================================\n * @method trim\n * @param {string} str\n * @returns {string|Boolean}\n */\nconst trim = (str) => {\n if (!isString(str)) {\n return false\n }\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\n}\n\nexport default trim\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\nimport isObject from './isObject'\n\nconst isFragment = (fragment) => {\n return !!(\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\n )\n}\n\nexport default isFragment\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","/**\n * 给 DOM 节点设置属性/值\n * ========================================================================\n * @method setAttribute\n * @param {HTMLElement} el - DOM 节点\n * @param {String} attr - 属性名称\n * @param {String|Number|Boolean} value - 属性值\n */\nconst setAttribute = (el, attr, value) => {\n let tagName = el.tagName.toLowerCase()\n\n switch (attr) {\n case 'style':\n el.style.cssText = value\n break\n case 'value':\n if (tagName === 'input' || tagName === 'textarea') {\n el.value = value\n } else {\n el.setAttribute(attr, value)\n }\n break\n case 'className':\n el.className = value\n break\n default:\n el.setAttribute(attr, value)\n break\n }\n}\n\nexport default setAttribute\n","import hasOwn from '../lang/hasOwn'\nimport isObject from '../types/isObject'\nimport isString from '../types/isString'\nimport isArray from '../types/isArray'\nimport isDOM from '../types/isDOM'\nimport setAttribute from './setAttribute'\n\n/**\n * 创建 DOM 节点,并添加属性和子节点\n * ========================================================================\n * @method createElement\n * @param {String} tagName - 标签名称\n * @param {Object|Array} attrs - 属性对象或者子节点\n * @param {Array} [children] - 子节点数组\n * @returns {HTMLElement}\n */\nconst createElement = (tagName, attrs, children) => {\n const $fragment = document.createDocumentFragment()\n const $el = document.createElement(tagName)\n const isValidChild = (child) => {\n return isDOM(child) || isString(child)\n }\n const append = (child) => {\n let $child\n\n if (!isValidChild(child)) {\n return false\n }\n\n if (isDOM(child)) {\n $child = child\n } else if (isString(child)) {\n $child = document.createTextNode(child)\n }\n\n $fragment.appendChild($child)\n }\n\n if (isObject(attrs)) {\n Object.keys(attrs).forEach((attr) => {\n if (hasOwn(attrs, attr)) {\n setAttribute($el, attr, attrs[attr])\n }\n })\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\n attrs.forEach((child) => {\n append(child)\n })\n }\n\n if (isArray(children)) {\n children.forEach((child) => {\n append(child)\n })\n } else {\n append(children)\n }\n\n $el.appendChild($fragment)\n\n return $el\n}\n\nexport default createElement\n","import isString from './isString'\n\nconst isSVG = (str) => {\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\n const doctype =\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\n const pattern = new RegExp(svg, 'i')\n\n return isString(str) && pattern.test(str)\n}\n\nexport default isSVG\n","import createElement from './createElement'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method icon\n * @alias createElement\n * @see createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst icon = (name, options = {}) => {\n return createElement(name, options)\n}\n\nexport default icon\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport isSVG from '../types/isSVG'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst createElement = (name, options = {}) => {\n const size = options.size || 0\n const color = options.color || ''\n const iconSet = options.iconSet || ''\n const width = isArray(size) ? size[0] : size\n const height = isArray(size) ? size[1] : size\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\n const $icon = document.createElement('i')\n let binds = ''\n let svg = ''\n let $svg\n\n if (!isString(name)) {\n return null\n }\n\n if (isSVG(name)) {\n svg = name\n } else {\n binds =\n iconSet && iconSet !== 'icon'\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\n : `xlink:href=\"#icon-${name}\"`\n svg =\n `` +\n `` +\n ``\n }\n\n $icon.className = 'outline-icon'\n $icon.innerHTML = svg\n\n if (isSVG(name)) {\n $svg = $icon.querySelector('svg')\n $svg.setAttribute('aria-hidden', 'true')\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n $svg.setAttribute('class', 'outline-icon__svg')\n $svg.setAttribute('width', '200')\n $svg.setAttribute('height', '200')\n $svg.style = cssRules\n }\n\n return $icon\n}\n\nexport default createElement\n","import isElement from '../types/isElement'\n/**\n * 检测 DOM 节点是否包含名为 className 的样式\n * ========================================================================\n * @method hasClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst hasClass = (el, className) => {\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\n let allClass\n let classList\n\n if (!isElement(el)) {\n return false\n }\n\n allClass = el.className\n\n if (!allClass) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.contains) {\n return el.classList.contains(className)\n }\n\n return !!pattern.exec(allClass)\n}\n\nexport default hasClass\n","import trim from '../lang/trim'\nimport hasClass from './hasClass'\n\n/**\n * 移除 DOM 节点的 className 样式\n * ========================================================================\n * @method removeClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst removeClass = (el, className) => {\n let allClass = el.className\n let classList\n\n if (!allClass || !hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.remove) {\n classList.remove(className)\n } else {\n allClass = trim(allClass.replace(className, ''))\n el.className = allClass\n }\n}\n\nexport default removeClass\n","import removeClass from './utils/dom/removeClass'\nimport isEmpty from './utils/types/isEmpty'\nimport trim from './utils/lang/trim'\n\nconst _resetHeading = ($heading, hasAnchor = true, isAtStart = true) => {\n const CLS_HEADING = 'outline-heading'\n const text = $heading.innerHTML\n const pattern = /^\\d+(\\.?\\d+)*\\s?/gi\n let $anchor\n\n $heading.innerHTML = text.replace(pattern, '')\n $heading.removeAttribute('id')\n $heading.removeAttribute('data-id')\n\n removeClass($heading, CLS_HEADING)\n\n if (!hasAnchor) {\n return false\n }\n\n $anchor = $heading.querySelector(`.${CLS_HEADING}__anchor`)\n\n if (isAtStart) {\n removeClass($heading, `${CLS_HEADING}_start`)\n }\n\n if (isEmpty(trim($heading.className))) {\n $heading.removeAttribute('class')\n }\n\n $heading.removeChild($anchor)\n}\n\nexport default _resetHeading\n","import isString from './isString'\n/**\n * 检测数据是否为空字符串\n * ========================================================================\n * @method isEmpty\n * @param {String} str\n * @returns {boolean}\n */\nconst isEmpty = (str) => {\n return isString(str) && str === ''\n}\n\nexport default isEmpty\n","import trim from './utils/lang/trim'\nimport stripTags from './utils/lang/stripTags'\n\nimport _getChapterParentIdByDiffer from './_getChapterParentIdByDiffer'\nimport _getChaptersWithCode from './_getChaptersWithCode'\n\nconst getChapters = (headings, showCode = true) => {\n let previous = 1\n let level = 0\n const chapters = []\n\n headings.forEach((heading, i) => {\n const headingLevel = heading.tagName.replace(/h/i, '')\n let current = parseInt(headingLevel, 10)\n let pid = -1\n\n // 场景1:当前标题是前一个标题的子标题\n // 当前标题的(标题标签)序号 > 前一个标题的序号:两个相连的标题是父标题 -> 子标题关系;\n // h2 (前一个标题)\n // h3 (当前标题)\n if (current > previous) {\n level += 1\n\n // 第一层级的 pid 是 -1\n if (level === 1) {\n pid = -1\n } else {\n pid = i - 1\n }\n }\n // 场景2:当前标题和前一个标题层级相同\n // 当前标题的(标题标签)序号 = 前一个标题的序号\n // h2 (前一个标题)\n // h2 (当前标题)\n // 当前标题的(标题标签)序号 < 前一个标题的序号,并且当前标题序号 > 当前的级别\n // h2\n // h4 (前一个标题)\n // h3 (当前标题:这种情况我们还是任务 h3 是 h2 的下一级章节)\n else if (current === previous || (current < previous && current > level)) {\n // H1 的层级肯定是 1\n if (current === 1) {\n level = 1\n pid = -1\n } else {\n pid = chapters[i - 1].pid\n }\n }\n // 场景3:当前标题比前一个标题层级高\n else if (current <= level) {\n // H1 的层级肯定是 1\n if (current === 1) {\n level = 1\n } else {\n level = level - (previous - current)\n\n if (level <= 1) {\n level = 1\n }\n }\n\n // 第一级的标题\n if (level === 1) {\n pid = -1\n } else {\n // 通过当前标题和前一个标题之间的等级差,获得当前标题的父标题ID\n pid = _getChapterParentIdByDiffer(chapters, previous - current, i)\n }\n }\n\n previous = current\n\n chapters.push({\n id: i,\n pid: pid,\n level: level,\n rel: `heading-${i}`,\n text: stripTags(trim(heading.innerHTML))\n })\n })\n\n return showCode ? _getChaptersWithCode(chapters) : chapters\n}\n\nexport default getChapters\n","import isString from '../types/isString'\n\n/**\n * 过滤所有 HTML 标签\n * ========================================================================\n * @method stripTags\n * @param {string} str\n * @returns {string}\n */\nconst stripTags = (str) => {\n if (!isString(str)) {\n return ''\n }\n return str.replace(/<\\/?[^>]+(>|$)/g, '')\n}\n\nexport default stripTags\n","const _getChapterParentIdByDiffer = (chapters, differ, index) => {\n let previous = chapters[index - 1]\n let pid\n let i\n\n for (i = 0; i < differ; i += 1) {\n pid = previous.pid\n previous = chapters[pid]\n }\n\n pid = previous.pid\n\n return pid\n}\n\nexport default _getChapterParentIdByDiffer\n","const _getChaptersWithCode = (chapters) => {\n const groups = {}\n const cb = (o) => {\n return [o.pid]\n }\n\n chapters.forEach((o) => {\n const group = JSON.stringify(cb(o))\n\n groups[group] = groups[group] || []\n groups[group].push(o)\n\n o.index = groups[group].length\n if (o.pid === -1) {\n o.code = String(o.index)\n }\n })\n\n Object.keys(groups).forEach((group) => {\n groups[group].forEach((c) => {\n const subjects = chapters.filter((b) => b.pid === c.id)\n subjects.forEach((o) => {\n o.code = c.code + '.' + o.index\n })\n })\n })\n\n return chapters\n}\n\nexport default _getChaptersWithCode\n","import Base from './base'\n\n// 在文章的标题生成 anchor 链接\nimport isString from './utils/types/isString'\nimport isFunction from './utils/types/isFunction'\nimport isElement from './utils/types/isElement'\nimport toTree from './utils/lang/toTree'\nimport later from './utils/lang/later'\nimport scrollTo from './utils/dom/scrollTo'\nimport _getScrollElement from './utils/dom/_getScrollElement'\nimport offsetTop from './utils/dom/offsetTop'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\nimport stop from './utils/event/stop'\nimport publish from './utils/observer/emit'\nimport paint from './utils/icons/paint'\n\nimport _updateHeading from './_updateHeading'\nimport _resetHeading from './_resetHeading'\nimport getChapters from './getChapters'\n\nclass Anchors extends Base {\n constructor(options) {\n super()\n\n this.attrs = Anchors.DEFAULTS\n this.$articleElement = null\n this.$scrollElement = null\n this.$headings = []\n\n this.chapters = []\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n let scrollElement\n let selector\n let $articleElement\n let articleElement\n\n this.attr(options)\n articleElement = this.attr('articleElement')\n scrollElement = this.attr('scrollElement')\n selector = this.attr('selector')\n created = this.attr('created')\n\n if (isString(articleElement)) {\n $articleElement = document.querySelector(articleElement)\n } else if (isElement(articleElement)) {\n $articleElement = articleElement\n }\n\n if (!$articleElement) {\n return this\n }\n\n this.$articleElement = $articleElement\n this.$scrollElement = _getScrollElement(scrollElement)\n this.$headings = [...$articleElement.querySelectorAll(selector)]\n\n if (this.$headings.length < 1) {\n return this\n }\n\n this.chapters = getChapters(this.$headings)\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n this.render().addListeners()\n\n return this\n }\n\n getChapters(isTreeStructured = false) {\n const chapters = this.chapters\n return isTreeStructured ? toTree(chapters, 'id', 'pid') : chapters\n }\n\n count() {\n return this.chapters.length\n }\n\n render() {\n const mounted = this.attr('mounted')\n const hasAnchor = this.attr('hasAnchor')\n const isAtStart = this.attr('isAtStart')\n const showCode = this.attr('showCode')\n const anchorURL = this.attr('anchorURL')\n const $headings = this.$headings\n const chapters = this.getChapters()\n\n paint()\n\n $headings.forEach(($heading, i) => {\n const chapterCode = chapters[i].code\n _updateHeading($heading, i, {\n hasAnchor,\n isAtStart,\n showCode,\n chapterCode,\n anchorURL\n })\n })\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n return this\n }\n\n scrollTo(top, after) {\n const el = this.$scrollElement\n\n scrollTo(el, top, after)\n\n return this\n }\n\n destroy() {\n const hasAnchor = this.attr('hasAnchor')\n const isAtStart = this.attr('isAtStart')\n const beforeDestroy = this.attr('beforeDestroy')\n const afterDestroy = this.attr('afterDestroy')\n const $headings = this.$headings\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n $headings.forEach(($heading) => {\n _resetHeading($heading, hasAnchor, isAtStart)\n })\n\n this.attr(Anchors.DEFAULTS)\n this.$articleElement = null\n this.$scrollElement = null\n this.$headings = []\n this.chapters = []\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n return this\n }\n\n onAnchorTrigger(evt) {\n const anchorURL = this.attr('anchorURL')\n const afterScroll = this.attr('afterScroll')\n const stickyHeight = this.attr('stickyHeight')\n const $anchor = evt.delegateTarget\n const $heading = $anchor.parentNode\n const top = offsetTop($heading) - (stickyHeight + 10)\n const $scrollElement = this.$scrollElement\n const min = 0\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\n const after = () => {\n if (isFunction(afterScroll)) {\n afterScroll.call(this, 'anchor')\n }\n\n later(() => {\n publish('toolbar:update', {\n top,\n min,\n max\n })\n })\n }\n\n this.scrollTo(top, after)\n\n if (!anchorURL) {\n stop(evt)\n }\n\n return this\n }\n\n addListeners() {\n const $articleElement = this.$articleElement\n\n on(\n $articleElement,\n '.outline-heading__anchor',\n 'click',\n this.onAnchorTrigger,\n this,\n true\n )\n\n return this\n }\n\n removeListeners() {\n const $articleElement = this.$articleElement\n\n off($articleElement, 'click', this.onAnchorTrigger)\n\n return this\n }\n}\n\nAnchors.DEFAULTS = {\n scrollElement: 'html,body',\n articleElement: '#article',\n selector: 'h1,h2,h3,h4,h5,h6',\n stickyHeight: 0,\n anchorURL: '',\n hasAnchor: true,\n isAtStart: true,\n showCode: false,\n created: null,\n mounted: null,\n afterScroll: null,\n beforeDestroy: null,\n afterDestroy: null\n}\n\nexport default Anchors\n","const toTree = (list, nodeKey, parentKey) => {\r\n const map = {}\r\n const roots = []\r\n\r\n list.forEach((item, i) => {\r\n // initialize the map\r\n map[item[nodeKey]] = i\r\n // initialize the children\r\n item.children = []\r\n })\r\n\r\n list.forEach((item) => {\r\n const node = list[map[item[parentKey]]]\r\n\r\n if (item[parentKey] !== -1) {\r\n // if you have dangling branches check that map[node.parentId] exists\r\n node.children.push(item)\r\n } else {\r\n roots.push(item)\r\n }\r\n })\r\n\r\n return roots\r\n}\r\n\r\nexport default toTree\r\n","import trim from './utils/lang/trim'\nimport createElement from './utils/dom/createElement'\nimport setAttribute from './utils/dom/setAttribute'\n\nimport icon from './utils/icons/icon'\n\nconst _updateHeading = ($heading, i, options) => {\n const $fragment = document.createDocumentFragment()\n const CLS_HEADING = 'outline-heading'\n const hasAnchor = options.hasAnchor || true\n const isAtStart = options.isAtStart || true\n const showCode = options.showCode || false\n const chapterCode = options.chapterCode || ''\n const anchorURL = options.anchorURL || ''\n const headingId = `heading-${i}`\n const attrs = {\n id: headingId,\n className: isAtStart ? `${CLS_HEADING} ${CLS_HEADING}_start` : CLS_HEADING,\n 'data-id': i\n }\n const keys = Object.keys(attrs)\n const text = trim($heading.innerHTML)\n let $anchor\n let $icon\n\n keys.forEach((prop) => {\n setAttribute($heading, prop, attrs[prop])\n })\n\n if (showCode) {\n $heading.innerHTML = chapterCode + ' ' + text\n }\n\n if (!hasAnchor) {\n return false\n }\n\n $icon = icon('hash', { iconSet: 'outline' })\n $anchor = createElement(\n 'a',\n {\n id: `anchor-${i}`,\n className: `${CLS_HEADING}__anchor anchor-${i}`,\n href: anchorURL || `#${headingId}`,\n target: anchorURL ? '_blank' : 'self',\n 'data-id': i\n },\n [$icon]\n )\n $fragment.appendChild($anchor)\n $heading.appendChild($fragment)\n}\n\nexport default _updateHeading\n","import hasClass from './hasClass'\n\n/**\n * 给 DOM 节点添加名为 className 的样式\n * ========================================================================\n * @method addClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst addClass = (el, className) => {\n let classList\n let allClass\n\n if (hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.add) {\n classList.add(className)\n } else {\n allClass = el.className\n allClass += allClass.length > 0 ? ' ' + className : className\n el.className = allClass\n }\n}\n\nexport default addClass\n","const setProperty = (prop, value) => {\r\n const documentElement = document.documentElement\r\n documentElement.style.setProperty(prop, value)\r\n}\r\n\r\nexport default setProperty\r\n","import setProperty from './utils/dom/setProperty'\n\nlet index = 2000\n\nconst zIndex = (idx) => {\n if (idx) {\n index = idx\n } else {\n index += 1\n }\n\n setProperty('--outline-zIndex', `${index}`)\n\n return index\n}\n\nexport default zIndex\n","import Base from './base'\n\nimport later from './utils/lang/later'\nimport isFunction from './utils/types/isFunction'\nimport addClass from './utils/dom/addClass'\nimport removeClass from './utils/dom/removeClass'\nimport createElement from './utils/dom/createElement'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\n\nimport paint from './utils/icons/paint'\nimport icon from './utils/icons/icon'\nimport zIndex from './zIndex'\n\nclass Drawer extends Base {\n constructor(options) {\n super()\n\n this.attrs = Drawer.DEFAULTS\n this.title = ''\n this.closed = true\n this.$el = null\n this.$modal = null\n this.$header = null\n this.$title = null\n this.$close = null\n this.$main = null\n this.$footer = null\n this.$overlay = null\n this.zIndex = 0\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n\n this.attr(options)\n\n this.title = this.attr('title')\n created = this.attr('created')\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n this.render().addListeners()\n return this\n }\n\n setTitle(title) {\n this.attr('title', title)\n this.title = title\n this.$title.innerHTML = title\n\n return this\n }\n\n isClosed() {\n return this.closed\n }\n\n render() {\n const mounted = this.attr('mounted')\n const size = this.attr('size')\n const placement = this.attr('placement')\n const hasClose = this.attr('hasClose')\n const hasOverlay = this.attr('hasOverlay')\n const hasOffset = this.attr('hasOffset')\n const hasPadding = this.attr('hasPadding')\n const autoHeight = this.attr('autoHeight')\n const customClass = this.attr('customClass')\n let $el\n let $modal\n let $header\n let $title\n let $close\n let $main\n let $footer\n let $overlay\n\n paint()\n this.zIndex = zIndex()\n\n $title = createElement(\n 'h2',\n {\n className: 'outline-drawer__title'\n },\n [this.title]\n )\n this.$title = $title\n\n if (hasClose) {\n $close = createElement(\n 'div',\n {\n className: 'outline-drawer__close'\n },\n [icon('close', { size: 20 })]\n )\n this.$close = $close\n }\n\n $header = createElement(\n 'header',\n {\n className: 'outline-drawer__header'\n },\n [$title, $close]\n )\n this.$header = $header\n\n $main = createElement(\n 'div',\n {\n className: 'outline-drawer__main'\n },\n ['']\n )\n this.$main = $main\n\n if (!hasPadding) {\n addClass($main, 'outline-drawer_full')\n }\n\n $footer = createElement(\n 'footer',\n {\n className: 'outline-drawer__footer'\n },\n ['']\n )\n this.$footer = $footer\n\n $modal = createElement(\n 'div',\n {\n className: `outline-drawer__modal outline-drawer_${placement} outline-drawer_${size} outline-drawer_closed`\n },\n [$header, $main, $footer]\n )\n this.$modal = $modal\n\n if (hasOffset) {\n addClass($modal, 'outline-drawer_offset')\n }\n\n if (autoHeight) {\n addClass($modal, 'outline-drawer_auto')\n }\n\n if (customClass) {\n addClass($modal, customClass)\n }\n\n if (hasOverlay) {\n $overlay = createElement(\n 'div',\n {\n className: 'outline-drawer__overlay'\n },\n ['']\n )\n this.$overlay = $overlay\n }\n\n $el = createElement(\n 'div',\n {\n className: `outline-drawer`\n },\n [$modal, $overlay]\n )\n this.$el = $el\n document.body.appendChild($el)\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n return this\n }\n\n open() {\n const opened = this.attr('afterOpened')\n const $modal = this.$modal\n\n addClass(this.$el, 'outline-drawer_opened')\n removeClass($modal, 'outline-drawer_closed')\n addClass($modal, 'outline-drawer_opened')\n\n later(() => {\n this.closed = false\n\n if (isFunction(opened)) {\n opened.call(this)\n }\n })\n\n return this\n }\n\n close() {\n const closed = this.attr('afterClosed')\n const $modal = this.$modal\n\n removeClass($modal, 'outline-drawer_opened')\n addClass($modal, 'outline-drawer_closed')\n\n later(() => {\n removeClass(this.$el, 'outline-drawer_opened')\n this.closed = true\n\n if (isFunction(closed)) {\n closed.call(this)\n }\n })\n\n return this\n }\n\n toggle() {\n const afterToggle = this.attr('afterToggle')\n const closed = this.isClosed()\n\n if (closed) {\n this.open()\n } else {\n this.close()\n }\n\n if (isFunction(afterToggle)) {\n later(() => {\n afterToggle.call(this, closed)\n })\n }\n\n return this\n }\n\n destroy() {\n const afterDestroy = this.attr('afterDestroy')\n const beforeDestroy = this.attr('beforeDestroy')\n let index = this.zIndex\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n\n this.attrs = Drawer.DEFAULTS\n this.title = ''\n this.closed = false\n this.$el = null\n this.$modal = null\n this.$header = null\n this.$title = null\n this.$close = null\n this.$main = null\n this.$footer = null\n this.$overlay = null\n\n index -= 1\n zIndex(index)\n this.zIndex = 0\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n return this\n }\n\n addListeners() {\n const hasClose = this.attr('hasClose')\n const hasOverlay = this.attr('hasOverlay')\n const $el = this.$el\n\n if (hasClose) {\n on($el, '.outline-drawer__close', 'click', this.onClose, this, true)\n }\n\n if (hasOverlay) {\n on($el, '.outline-drawer__overlay', 'click', this.onClose, this, true)\n }\n\n return this\n }\n\n removeListeners() {\n const hasClose = this.attr('hasClose')\n const hasOverlay = this.attr('hasOverlay')\n const $el = this.$el\n\n if (!hasClose && !hasOverlay) {\n return this\n }\n\n off($el, 'click', this.onClose)\n\n return this\n }\n\n onClose() {\n this.close()\n return this\n }\n}\n\nDrawer.DEFAULTS = {\n placement: 'rtl',\n title: '标题',\n size: 'regular',\n hasClose: true,\n hasOverlay: true,\n hasOffset: false,\n hasPadding: true,\n autoHeight: true,\n created: null,\n mounted: null,\n afterClosed: null,\n afterOpened: null,\n afterScroll: null,\n beforeDestroy: null,\n afterDestroy: null,\n afterToggle: null\n}\n\nexport default Drawer\n","import isFunction from '../types/isFunction'\nimport off from './off'\n\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定事件\n * ========================================================================\n * @method at\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\n * @param {Function|Object} fn - (必须) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst at = (el, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n const listener = function (evt) {\n let overrideContext = context || el\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n\n if (!isFunction(fn)) {\n return false\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default at\n","/**\r\n * 获取HTML元素的某个CSS样式值\r\n * ====================================================\r\n * @param el\r\n * @param ruleName\r\n * @returns {*}\r\n */\r\nconst getStyle = (el, ruleName) => {\r\n return getComputedStyle(el)[ruleName]\r\n}\r\n\r\nexport default getStyle\r\n","import Base from './base'\n\nimport isString from './utils/types/isString'\nimport isFunction from './utils/types/isFunction'\nimport isElement from './utils/types/isElement'\nimport later from './utils/lang/later'\nimport at from './utils/event/at'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\nimport stop from './utils/event/stop'\nimport createElement from './utils/dom/createElement'\nimport scrollTo from './utils/dom/scrollTo'\nimport addClass from './utils/dom/addClass'\nimport intersection from './utils/dom/intersection'\nimport removeClass from './utils/dom/removeClass'\nimport offsetTop from './utils/dom/offsetTop'\nimport getStyle from './utils/dom/getStyle'\nimport setProperty from './utils/dom/setProperty'\nimport publish from './utils/observer/emit'\n\nimport _getScrollElement from './utils/dom/_getScrollElement'\nimport _paintChapters from './_paintChapters'\n\nclass Chapters extends Base {\n constructor(options) {\n super()\n\n this.attrs = Chapters.DEFAULTS\n this.$el = null\n this.$title = null\n this.$main = null\n this.$list = null\n this.$placeholder = null\n this.$parentElement = null\n this.$scrollElement = null\n this.chapters = []\n this.closed = false\n this.active = 0\n this.offsetTop = 0\n this.offsetWidth = 0\n this.$active = null\n this.scrollTimer = null\n this.resizeTimer = null\n this.playing = false\n this.Observer = null\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n let parentElement\n let scrollElement\n let $parent\n\n this.attr(options)\n created = this.attr('created')\n parentElement = this.attr('parentElement')\n scrollElement = this.attr('scrollElement')\n\n if (isString(parentElement)) {\n $parent = document.querySelector(parentElement)\n } else if (isElement(parentElement)) {\n $parent = parentElement\n }\n this.$parentElement = $parent\n this.$scrollElement = _getScrollElement(scrollElement)\n\n this.chapters = this.attr('chapters')\n this.closed = this.attr('closed')\n this.active = this.attr('active')\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n if (this.chapters.length < 1) {\n return this\n }\n\n this.render().addListeners()\n\n this.$active = document.querySelector(`#chapter-${this.active}`)\n\n return this\n }\n\n isClosed() {\n return this.closed\n }\n\n isSticky() {\n const position = this.attr('position')\n return position === 'sticky'\n }\n\n isFixed() {\n const position = this.attr('position')\n return position === 'fixed'\n }\n\n isInside() {\n return this.isFixed() || this.isSticky()\n }\n\n isOutside() {\n return !this.isInside()\n }\n\n _paintEdge() {\n const $fragment = document.createDocumentFragment()\n const STICKY = 'outline-chapters_sticky'\n const HIDDEN = 'outline-chapters_hidden'\n const title = this.attr('title')\n const customClass = this.attr('customClass')\n const $parentElement = this.$parentElement\n const contents = []\n let $title = null\n let $el\n let $main\n let $list\n let $placeholder\n\n if (!$parentElement) {\n return this\n }\n\n if (this.isInside()) {\n $title = createElement(\n 'h2',\n {\n className: 'outline-chapters__title'\n },\n [title]\n )\n this.$title = $title\n contents.push($title)\n }\n\n $list = createElement(\n 'ul',\n {\n // 为优化性能,添加了 _fixed 和 _hidden\n // fixed 为了让 $list 脱离流布局\n // hidden 让 $list 不可见\n className: `outline-chapters__list`\n },\n ['']\n )\n this.$list = $list\n\n $placeholder = createElement(\n 'div',\n {\n className: 'outline-chapters__placeholder'\n },\n ['']\n )\n this.$placeholder = $placeholder\n\n $main = createElement(\n 'div',\n {\n className: 'outline-chapters__main'\n },\n [$list, $placeholder]\n )\n this.$main = $main\n contents.push($main)\n\n $el = createElement(\n 'nav',\n {\n id: 'outline-chapters',\n className: `outline-chapters ${HIDDEN}`\n },\n contents\n )\n this.$el = $el\n\n if (this.isSticky()) {\n this.calculateStickyHeight()\n addClass($el, STICKY)\n }\n\n if (customClass) {\n addClass($el, customClass)\n }\n $fragment.appendChild($el)\n $parentElement.appendChild($fragment)\n\n return this\n }\n\n render() {\n const HIDDEN = 'outline-chapters_hidden'\n const showCode = this.attr('showCode')\n const mounted = this.attr('mounted')\n const $parentElement = this.$parentElement\n const chapters = this.chapters\n let $el\n let $list\n\n if (!$parentElement || chapters.length < 1) {\n return this\n }\n\n this._paintEdge()\n\n $el = this.$el\n $list = this.$list\n _paintChapters($list, chapters, showCode)\n removeClass($el, HIDDEN)\n this.positionPlaceholder(this.active)\n\n this.offsetTop = offsetTop($el)\n this.offsetWidth = $el.offsetWidth\n\n if (this.isFixed()) {\n this.sticky()\n setProperty('--outline-chapters-width', `${this.offsetWidth}px`)\n }\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n this.onObserver()\n\n return this\n }\n\n positionPlaceholder(index) {\n const $main = this.$main\n const $list = this.$list\n const $placeholder = this.$placeholder\n const $anchor = $list.querySelector('.outline-chapters__anchor')\n const mainPaddingTop = parseInt(getStyle($main, 'padding-top'), 10)\n const mainBorderTop = parseInt(getStyle($main, 'border-top-width'), 10)\n const placeholderPaddingTop = parseInt(getStyle($list, 'padding-top'), 10)\n const placeholderMarginTop = parseInt(getStyle($list, 'margin-top'), 10)\n const placeholderBorderTop = parseInt(\n getStyle($list, 'border-top-width'),\n 10\n )\n let height = $anchor.offsetHeight\n let offsetTop = 0\n let top\n\n if (mainPaddingTop) {\n offsetTop += mainPaddingTop\n }\n\n if (placeholderPaddingTop) {\n offsetTop += placeholderPaddingTop\n }\n\n if (placeholderMarginTop) {\n offsetTop += placeholderMarginTop\n }\n\n if (mainBorderTop) {\n offsetTop += mainBorderTop\n }\n\n if (placeholderBorderTop) {\n offsetTop += placeholderBorderTop\n }\n\n top = height * index\n // top:calc(${offsetTop}px + ${top}px);\n $placeholder.style.cssText = `transform: translateY(${\n offsetTop + top\n }px);height:${height}px;`\n\n return this\n }\n\n highlight(id) {\n const $anchor = this.$el.querySelector(`#chapter__anchor-${id}`)\n const HIGHLIGHT = 'outline-chapters_active'\n\n if (!$anchor) {\n return this\n }\n\n if (this.$active) {\n removeClass(this.$active, HIGHLIGHT)\n }\n\n this.active = parseInt($anchor.getAttribute('data-id'), 10)\n this.$active = $anchor\n addClass(this.$active, HIGHLIGHT)\n\n this.positionPlaceholder(this.active)\n\n return this\n }\n\n sticky() {\n const afterSticky = this.attr('afterSticky')\n const FIXED = 'outline-chapters_fixed'\n const $el = this.$el\n const top = this.offsetTop\n const scrollTop = this.$scrollElement.scrollTop\n let isStickying\n\n if (!this.isFixed()) {\n return this\n }\n\n isStickying = scrollTop >= top\n\n if (isStickying) {\n addClass($el, FIXED)\n } else {\n removeClass($el, FIXED)\n }\n\n if (isFunction(afterSticky)) {\n afterSticky.call(this, this.isClosed(), isStickying)\n }\n\n return this\n }\n\n calculateStickyHeight() {\n const documentElement = document.documentElement\n const height = Math.max(\n documentElement.clientHeight || 0,\n window.innerHeight || 0\n )\n setProperty('--outline-sticky-height', `${height}px`)\n return this\n }\n\n scrollTo(top, after) {\n const el = this.$scrollElement\n\n scrollTo(el, top, after)\n\n return this\n }\n\n show() {\n const FOLDED = 'outline-chapters_folded'\n const HIDDEN = 'outline-chapters_hidden'\n const opened = this.attr('afterOpened')\n const $el = this.$el\n const $parent = this.$parentElement\n\n if (this.isInside()) {\n removeClass($parent, HIDDEN)\n removeClass($el, HIDDEN)\n later(() => {\n removeClass($parent, FOLDED)\n removeClass($el, FOLDED)\n }, 30)\n } else {\n removeClass($el, HIDDEN)\n }\n this.closed = false\n\n if (isFunction(opened)) {\n opened.call(this)\n }\n\n return this\n }\n\n hide() {\n const FOLDED = 'outline-chapters_folded'\n const HIDDEN = 'outline-chapters_hidden'\n const closed = this.attr('afterClosed')\n const $el = this.$el\n const $parent = this.$parentElement\n\n if (this.isInside()) {\n addClass($parent, FOLDED)\n addClass($el, FOLDED)\n later(() => {\n addClass($parent, HIDDEN)\n addClass($el, HIDDEN)\n })\n } else {\n addClass($el, HIDDEN)\n }\n this.closed = true\n\n if (isFunction(closed)) {\n closed.call(this)\n }\n\n return this\n }\n\n toggle() {\n const afterToggle = this.attr('afterToggle')\n const top = this.offsetTop\n const scrollTop = this.$scrollElement.scrollTop\n let isStickying\n\n if (this.isClosed()) {\n this.show()\n } else {\n this.hide()\n }\n\n if (isFunction(afterToggle)) {\n later(() => {\n isStickying = scrollTop >= top\n afterToggle.call(this, this.isClosed(), isStickying)\n })\n }\n\n return this\n }\n\n destroy() {\n const beforeDestroy = this.attr('beforeDestroy')\n const afterDestroy = this.attr('afterDestroy')\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n this.$parentElement.removeChild(this.$el)\n\n this.attr(Chapters.DEFAULTS)\n this.$el = null\n this.$title = null\n this.$main = null\n this.$list = null\n this.$placeholder = null\n this.$parentElement = null\n this.$scrollElement = null\n this.chapters = []\n this.active = 0\n this.offsetTop = 0\n this.$active = null\n this.closed = false\n\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer)\n this.scrollTimer = null\n }\n\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer)\n this.resizeTimer = null\n }\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n if (this.Observer) {\n this.Observer = null\n }\n\n return this\n }\n\n onObserver() {\n const selector = this.attr('selector')\n let timer = null\n\n this.Observer = intersection(\n ($heading) => {\n const id = $heading.getAttribute('data-id')\n\n if (this.playing) {\n return false\n }\n\n if (timer) {\n clearTimeout(timer)\n }\n\n timer = later(() => {\n this.highlight(id)\n }, 100)\n },\n {\n selector,\n context: this\n }\n )\n\n return this\n }\n\n onSelect(evt) {\n const stickyHeight = this.attr('stickyHeight')\n const $anchor = evt.delegateTarget\n const id = $anchor.getAttribute('data-id')\n const headingId = $anchor.href.split('#')[1]\n const $heading = document.querySelector(`#${headingId}`)\n const top = offsetTop($heading) - (stickyHeight + 10)\n const min = 0\n const max = this.$scrollElement.scrollHeight\n const afterScroll = this.attr('afterScroll')\n const after = () => {\n if (isFunction(afterScroll)) {\n afterScroll.call(this, 'chapter')\n }\n\n later(() => {\n this.playing = false\n publish('toolbar:update', {\n top,\n min,\n max\n })\n })\n }\n\n this.playing = true\n if (this.isFixed()) {\n this.sticky()\n later(() => {\n this.scrollTo(top, after)\n this.highlight(id)\n }, 10)\n } else {\n this.scrollTo(top, after)\n this.highlight(id)\n }\n\n stop(evt)\n\n return this\n }\n\n onScroll() {\n const $scrollElement = this.$scrollElement\n\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer)\n }\n\n this.scrollTimer = later(() => {\n const top = $scrollElement.scrollTop\n const min = 0\n const max = $scrollElement.scrollHeight - $scrollElement.clientHeight\n\n if (this.isFixed()) {\n this.sticky()\n }\n\n publish('toolbar:update', {\n top,\n min,\n max\n })\n }, 100)\n\n return this\n }\n\n onResize() {\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer)\n }\n\n this.resizeTimer = later(() => {\n this.calculateStickyHeight()\n })\n\n return this\n }\n\n addListeners() {\n const $el = this.$el\n const $scrollElement = this.$scrollElement\n const tagName = $scrollElement.tagName.toLowerCase()\n let $element = $scrollElement\n\n if (tagName === 'html' || tagName === 'body') {\n $element = window\n }\n\n on($el, '.outline-chapters__anchor', 'click', this.onSelect, this, true)\n at($element, 'scroll', this.onScroll, this, true)\n if (this.isSticky()) {\n at($element, 'resize', this.onResize, this, true)\n }\n\n return this\n }\n\n removeListeners() {\n const selector = this.attr('selector')\n const $el = this.$el\n const $scrollElement = this.$scrollElement\n const tagName = $scrollElement.tagName.toLowerCase()\n let $element = $scrollElement\n\n if (tagName === 'html' || tagName === 'body') {\n $element = window\n }\n\n off($el, 'click', this.onSelect)\n off($element, 'scroll', this.onScroll)\n\n if (this.isSticky()) {\n at($element, 'resize', this.onResize)\n }\n\n if (this.Observer) {\n document.querySelectorAll(selector).forEach((section) => {\n this.Observer.unobserve(section)\n })\n }\n\n return this\n }\n}\n\nChapters.DEFAULTS = {\n parentElement: '',\n scrollElement: '',\n selector: '.outline-heading',\n active: 0,\n closed: false,\n showCode: true,\n position: 'relative',\n stickyHeight: 0,\n chapters: [],\n created: null,\n mounted: null,\n afterClosed: null,\n afterOpened: null,\n afterScroll: null,\n beforeDestroy: null,\n afterDestroy: null,\n afterSticky: null\n}\n\nexport default Chapters\n","import createElement from './utils/dom/createElement'\n\nconst _paintChapters = ($list, chapters, showCode = false) => {\n const byId = (id) => document.querySelector(`#${id}`)\n\n chapters.forEach((chapter) => {\n const pid = chapter.pid\n const id = chapter.id\n const rel = chapter.rel\n const $text = createElement(\n 'span',\n {\n className: 'outline-chapters__text'\n },\n [chapter.text]\n )\n const $link = createElement(\n 'a',\n {\n id: `chapter__anchor-${id}`,\n className: 'outline-chapters__anchor',\n href: '#' + rel,\n rel: rel,\n 'data-id': id\n },\n [$text]\n )\n let $code\n let $li\n let $ul\n let $parent\n\n if (showCode) {\n $code = createElement(\n 'span',\n {\n className: 'outline-chapters__code',\n 'data-id': id\n },\n [chapter.code]\n )\n\n $link.insertBefore($code, $link.firstChild)\n }\n\n $li = createElement(\n 'li',\n {\n id: `chapter-${id}`,\n className: 'outline-chapters__item',\n 'data-id': id\n },\n [$link]\n )\n\n if (pid === -1) {\n $list.appendChild($li)\n } else {\n $parent = byId(`chapter-${pid}`)\n $ul = byId(`subject-${pid}`)\n\n if (!$ul) {\n $ul = createElement(\n 'ul',\n {\n id: 'subject-' + pid,\n className: 'outline-chapters__subject'\n },\n [$li]\n )\n\n $parent.appendChild($ul)\n } else {\n $ul.appendChild($li)\n }\n }\n })\n}\n\nexport default _paintChapters\n","import isFunction from '../types/isFunction'\nimport isElement from '../types/isElement'\n\n/**\n * 通用的 IntersectionObserver 观察者处理器\n * ========================================================================\n * @method intersection\n * @param {Function} fn\n * @param {Object} [props]\n * @param {Object|HTMLElement} [props.root]\n * @param {String} [props.selector]\n * @param {Object} [props.context]\n * @param {String} [props.attr]\n * @param {String} [props.rootMargin]\n */\nconst intersection = (fn, props = {}) => {\n const root = props.root || null\n const selector = props.selector || '.outline-heading'\n const context = props.context || null\n const rootMargin = props.rootMargin || '0px 0px -90% 0px'\n const options = {\n rootMargin: rootMargin\n }\n const Observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.intersectionRatio > 0) {\n if (isFunction(fn)) {\n fn.call(context || entry.target, entry.target)\n }\n }\n })\n }, options)\n const $root = isElement(root) ? root : document\n\n if (root) {\n options.root = root\n }\n\n $root.querySelectorAll(selector).forEach((section) => {\n Observer.observe(section)\n })\n\n return Observer\n}\n\nexport default intersection\n","import icon from './utils/icons/icon'\nimport createElement from './utils/dom/createElement'\nimport addClass from './utils/dom/addClass'\n\nconst _createButton = (button, rounded = true) => {\n const $icon = icon(button.icon, {\n iconSet: button.iconSet || 'outline',\n color: button.color || '',\n size: button.size\n })\n const $anchor = createElement(\n 'a',\n {\n className: `outline-toolbar__anchor`,\n href: button.link\n },\n [$icon]\n )\n const $button = createElement(\n 'div',\n {\n className: `outline-toolbar__button ${button.name}`\n },\n [button.link ? $anchor : $icon]\n )\n\n addClass($icon, 'outline-toolbar__icon')\n\n if (rounded) {\n addClass($button, 'outline-toolbar_rounded')\n }\n\n if (button.disabled) {\n addClass($button, 'outline-toolbar_disabled')\n }\n\n return $button\n}\n\nexport default _createButton\n","import Base from './base'\n\nimport isString from './utils/types/isString'\nimport isFunction from './utils/types/isFunction'\nimport isObject from './utils/types/isObject'\nimport isArray from './utils/types/isArray'\nimport later from './utils/lang/later'\nimport createElement from './utils/dom/createElement'\nimport addClass from './utils/dom/addClass'\nimport hasClass from './utils/dom/hasClass'\nimport removeClass from './utils/dom/removeClass'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\nimport publish from './utils/observer/emit'\nimport paint from './utils/icons/paint'\n\nimport _createButton from './_createButton'\n\nconst DISABLED = 'outline-toolbar_disabled'\nconst HIDDEN = 'outline-toolbar_hidden'\n\nclass Toolbar extends Base {\n constructor(options) {\n super()\n\n this.attrs = Toolbar.DEFAULTS\n this.$el = null\n this.disabled = false\n this.closed = false\n this.buttons = []\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n\n this.attr(options)\n created = this.attr('created')\n this.disabled = this.attr('disabled')\n this.closed = this.attr('closed')\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n this.render().addListeners()\n\n return this\n }\n\n isDisabled(name) {\n const buttons = this.attr('buttons')\n let button\n\n if (name) {\n button = buttons.find((option) => option.name === name)\n\n return button?.disabled\n }\n\n return this.disabled\n }\n\n isClosed() {\n return this.closed\n }\n\n highlight(name) {\n const button = this.buttons.find((item) => item.name === name)\n const ACTIVE = 'outline-toolbar_active'\n let $button\n\n if ($button) {\n return this\n }\n\n $button = button.$el\n\n if (hasClass($button, ACTIVE)) {\n removeClass($button, ACTIVE)\n } else {\n addClass($button, ACTIVE)\n }\n\n return this\n }\n\n render() {\n const mounted = this.attr('mounted')\n const buttons = this.attr('buttons') || []\n const rounded = this.attr('rounded')\n const placement = this.attr('placement')\n const $buttons = document.createDocumentFragment()\n const $fragment = document.createDocumentFragment()\n\n paint()\n\n buttons.forEach((button) => {\n const $button = _createButton(button, rounded)\n\n $buttons.appendChild($button)\n this.buttons.push({\n name: button.name,\n $el: $button\n })\n })\n\n this.$el = createElement(\n 'div',\n {\n id: 'outline-toolbar',\n className: `outline-toolbar outline-toolbar_${placement}`\n },\n [$buttons]\n )\n $fragment.appendChild(this.$el)\n document.body.appendChild($fragment)\n\n if (this.closed) {\n this.hide()\n }\n\n if (this.disabled) {\n this.disable()\n }\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n return this\n }\n\n add(button) {\n const $el = this.$el\n const buttons = this.attr('buttons')\n const action = button.action\n const $fragment = document.createDocumentFragment()\n let type\n\n if (isObject(button)) {\n buttons.push(button)\n $fragment.appendChild(_createButton(button))\n } else if (isArray(button)) {\n button.forEach((item) => {\n $fragment.appendChild(_createButton(item))\n })\n }\n $el.appendChild($fragment)\n\n if (action && isFunction(action.handler)) {\n type = action.type || 'click'\n on($el, `.${button.name}`, type, action.handler)\n }\n\n return this\n }\n\n remove(name) {\n const $el = this.$el\n const buttons = this.attr('buttons')\n const button = buttons.find((option) => option.name === name)\n let index = -1\n let $button\n\n if (!button) {\n return this\n }\n\n buttons.forEach((button, i) => {\n if (button.name === name) {\n index = i\n }\n })\n\n if (index > -1) {\n this.attr().buttons.splice(index, 1)\n }\n\n $button = $el.querySelector(`.${name}`)\n this.switch(name, false)\n $el.removeChild($button)\n\n return this\n }\n\n switch(name, enabled) {\n const $el = this.$el\n const buttons = this.attr('buttons')\n const button = buttons.find((option) => option.name === name)\n let action\n let type\n let listener\n let $button\n\n if (!button) {\n return this\n }\n\n buttons.forEach((option) => {\n if (option.name === name) {\n button.disabled = !enabled\n }\n })\n\n action = button.action\n $button = $el.querySelector(`.${name}`)\n\n if (action) {\n type = action.type || 'click'\n listener = action.handler\n }\n\n if (enabled) {\n removeClass($button, DISABLED)\n\n if (type && listener) {\n on($el, `.${name}`, type, listener)\n }\n } else {\n addClass($button, DISABLED)\n\n if (type && listener) {\n off($el, type, listener)\n }\n }\n\n return this\n }\n\n disable(name) {\n const disabled = this.attr('afterDisabled')\n\n if (name) {\n this.switch(name, false)\n } else {\n addClass(this.$el, DISABLED)\n this.removeListeners()\n this.disabled = true\n\n if (isFunction(disabled)) {\n disabled.call(this)\n }\n }\n\n return this\n }\n\n enable(name) {\n const enabled = this.attr('afterEnabled')\n\n if (name) {\n this.switch(name, true)\n } else {\n this.disabled = false\n removeClass(this.$el, DISABLED)\n this.addListeners()\n\n if (isFunction(enabled)) {\n enabled.call(this)\n }\n }\n\n return this\n }\n\n show(name) {\n const opened = this.attr('afterOpened')\n const button = this.attr('buttons').find((option) => option.name === name)\n const $el = this.$el\n let $button\n\n if (name) {\n if (!button) {\n return this\n }\n\n $button = $el.querySelector(`.${name}`)\n removeClass($button, HIDDEN)\n } else {\n removeClass($el, HIDDEN)\n this.closed = false\n\n if (isFunction(opened)) {\n later(() => {\n opened.call(this)\n }, 310)\n }\n }\n\n return this\n }\n\n hide(name) {\n const closed = this.attr('afterClosed')\n const button = this.attr('buttons').find((option) => option.name === name)\n const $el = this.$el\n let $button\n\n if (name) {\n if (!button) {\n return this\n }\n $button = $el.querySelector(`.${name}`)\n addClass($button, HIDDEN)\n } else {\n addClass($el, HIDDEN)\n this.closed = true\n\n if (isFunction(closed)) {\n later(() => {\n closed.call(this)\n }, 310)\n }\n }\n\n return this\n }\n\n toggle() {\n if (this.isClosed()) {\n this.show()\n } else {\n this.hide()\n }\n\n return this\n }\n\n destroy() {\n const beforeDestroy = this.attr('beforeDestroy')\n const afterDestroy = this.attr('afterDestroy')\n let $el = this.$el\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n document.body.removeChild($el)\n $el = null\n\n this.attr(Toolbar.DEFAULTS)\n this.disabled = false\n this.closed = false\n this.buttons = []\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n return this\n }\n\n refresh() {\n const $el = this.$el\n const buttons = this.attr('buttons') || []\n\n this.removeListeners()\n $el.innerHTML = ''\n\n buttons.forEach((button) => {\n this.$el.appendChild(_createButton(button))\n })\n\n this.addListeners()\n\n return this\n }\n\n addListeners() {\n const buttons = this.attr('buttons')\n const $el = this.$el\n\n if (!buttons || buttons.length < 1) {\n return this\n }\n\n buttons.forEach((button) => {\n const action = button.action\n const disabled = this.disabled\n let type\n let listener\n let context\n let command\n\n if (disabled) {\n return false\n }\n\n if (action) {\n listener = action.handler\n if (isString(listener)) {\n command = listener\n action.handler = function () {\n publish(command, button.name)\n }\n listener = action.handler\n }\n\n type = action.type || 'click'\n context = action.context\n }\n\n if (isFunction(listener)) {\n on($el, `.${button.name}`, type, listener, context || this, true)\n }\n })\n\n return this\n }\n\n removeListeners() {\n const buttons = this.attr('buttons')\n const $el = this.$el\n\n if (!buttons || buttons.length < 1) {\n return this\n }\n\n buttons.forEach((button) => {\n const action = button.action\n const disabled = this.disabled\n let type\n let listener\n\n if (disabled) {\n return false\n }\n\n if (action) {\n listener = action.handler\n type = action.type || 'click'\n }\n\n if (isFunction(listener)) {\n off($el, type, listener)\n }\n })\n\n return this\n }\n}\n\nToolbar.DEFAULTS = {\n placement: 'ltr',\n closed: false,\n disabled: false,\n rounded: true,\n buttons: [],\n created: null,\n mounted: null,\n afterClosed: null,\n afterOpened: null,\n afterDisabled: null,\n afterEnabled: null,\n beforeDestroy: null,\n afterDestroy: null\n}\n\nexport default Toolbar\n","/**\n * 生成唯一 id 字符串的函数\n * ========================================================================\n * @method guid\n * @param {String} [prefix] - 生成 id 的前缀字符串\n * @return {String} 返回一个表示唯一 id 的字符串\n */\nconst guid = (() => {\n let uuid = 0\n\n return (prefix) => {\n uuid += 1\n\n return prefix ? prefix + '-' + uuid : 'guid-' + uuid\n }\n})()\n\nexport default guid\n","import _subscribers from './_subscribers'\nimport isFunction from '../types/isFunction'\nimport guid from '../lang/guid'\n\n/**\n * 订阅主题,并给出处理器函数\n * ========================================================================\n * @method on\n * @param {String} topic - (必须)主题名称\n * @param {Function} handler - (必须)主题的处理器函数\n * @param {Object} [context] - (可选)指定 this 执行上下文\n * @return {String} - 唯一的 token 字符串,例如:'guid-1'。\n */\nconst on = (topic, handler, context = null) => {\n const token = guid()\n let subject = typeof topic === 'symbol' ? topic.toString() : topic\n\n if (!isFunction(handler)) {\n return ''\n }\n\n /* istanbul ignore else */\n if (!_subscribers[subject]) {\n _subscribers[subject] = []\n }\n\n _subscribers[subject].push({\n topic: subject,\n callback: handler,\n context,\n token\n })\n\n return token\n}\n\nexport default on\n","import _subscribers from './_subscribers'\nimport hasOwn from '../lang/hasOwn'\n\n/**\n * 删除与给定 topic 相同的订阅者信息\n * ========================================================================\n * @method _removeSubscriber\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _removeSubscriber = (topic) => {\n if (!hasOwn(_subscribers, topic)) {\n return false\n }\n\n delete _subscribers[topic]\n}\n\nexport default _removeSubscriber\n","import has from './has'\nimport _removeSubscriber from './_removeSubscriber'\nimport _removeSubscriberByToken from './_removeSubscriberByToken'\n\n/**\n * 取消订阅主题\n * ========================================================================\n * @method off\n * @param {String} topic - (必须)订阅的主题\n * @param {Function|String} [token] - (可选)订阅主题的处理器函数或者唯一 Id 值\n */\nconst off = (topic, token) => {\n if (!has(topic)) {\n return false\n }\n\n if (token) {\n _removeSubscriberByToken(token)\n } else {\n _removeSubscriber(topic)\n }\n}\n\nexport default off\n","import _subscribers from './_subscribers'\nimport _removeSubscriber from './_removeSubscriber'\n\n/**\n * 通过订阅者 token 值删除订阅者信息\n * ========================================================================\n * @method _removeSubscriberByToken\n * @param {String} token - 订阅者 token 字符串\n * @returns {boolean}\n * @private\n */\nconst _removeSubscriberByToken = (token) => {\n const keys = Object.keys(_subscribers)\n let index = -1\n\n if (!token || keys.length < 1) {\n return false\n }\n\n keys.forEach((subject) => {\n const subscriber = _subscribers[subject]\n let topic\n\n subscriber.forEach((execution, j) => {\n if (execution.callback === token || execution.token === token) {\n topic = execution.topic\n subscriber.splice(index, j)\n }\n })\n\n /* istanbul ignore else */\n if (subscriber.length < 1) {\n _removeSubscriber(topic)\n }\n })\n}\n\nexport default _removeSubscriberByToken\n","import Base from './base'\nimport Anchors from './anchors'\nimport Drawer from './drawer'\nimport Chapters from './chapters'\nimport Toolbar from './toolbar'\n\nimport later from './utils/lang/later'\nimport isFunction from './utils/types/isFunction'\nimport scrollTo from './utils/dom/scrollTo'\nimport _getScrollElement from './utils/dom/_getScrollElement'\nimport subscribe from './utils/observer/on'\nimport unsubscribe from './utils/observer/off'\n\nclass Outline extends Base {\n constructor(options) {\n super()\n\n this.attrs = Outline.DEFAULTS\n this.anchors = null\n this.drawer = null\n this.chapters = null\n this.toolbar = null\n this.buttons = []\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n this.attr(options).render().addListeners()\n return this\n }\n\n getChapters(isTreeStructured = false) {\n return this.anchors.getChapters(isTreeStructured)\n }\n\n count() {\n return this.anchors.count()\n }\n\n render() {\n const scrollElement = this.attr('scrollElement')\n const $scrollElement = document.querySelector(scrollElement) || document.getElementById(scrollElement)\n\n this._renderAnchors()._renderChapters()._renderToolbar()\n\n if ($scrollElement) {\n this.onToolbarUpdate({\n top: $scrollElement.scrollTop,\n min: 0,\n max: $scrollElement.scrollHeight\n })\n }\n\n return this\n }\n\n _renderAnchors() {\n const articleElement = this.attr('articleElement')\n const selector = this.attr('selector')\n const stickyHeight = this.attr('stickyHeight')\n const scrollElement = this.attr('scrollElement')\n const showCode = this.attr('showCode')\n const anchorURL = this.attr('anchorURL')\n const afterScroll = this.attr('afterScroll')\n\n this.anchors = new Anchors({\n articleElement,\n stickyHeight,\n scrollElement,\n selector,\n showCode,\n anchorURL,\n afterScroll\n })\n\n return this\n }\n\n _renderChapters() {\n const title = this.attr('title')\n const stickyHeight = this.attr('stickyHeight')\n const scrollElement = this.attr('scrollElement')\n const customClass = this.attr('customClass')\n const showCode = this.attr('showCode')\n const position = this.attr('position')\n const placement = this.attr('placement')\n const afterSticky = this.attr('afterSticky')\n const afterToggle = this.attr('afterToggle')\n const afterScroll = this.attr('afterScroll')\n const count = this.count()\n let parentElement = this.attr('parentElement')\n let CHAPTERS_OPTIONS\n\n if (count < 1) {\n return this\n }\n\n CHAPTERS_OPTIONS = {\n scrollElement,\n showCode,\n position,\n title,\n stickyHeight,\n chapters: this.getChapters(),\n afterSticky,\n afterToggle,\n afterScroll\n }\n\n if (position === 'relative') {\n this.drawer = new Drawer({\n placement,\n title,\n size: 'tiny',\n hasOffset: true,\n hasPadding: false,\n customClass,\n afterClosed: () => {\n const toolbar = this.toolbar\n toolbar.toggle()\n }\n })\n parentElement = this.drawer.$main\n } else {\n CHAPTERS_OPTIONS.customClass = customClass\n }\n\n CHAPTERS_OPTIONS.parentElement = parentElement\n this.chapters = new Chapters(CHAPTERS_OPTIONS)\n\n return this\n }\n\n _renderToolbar() {\n const placement = this.attr('placement')\n const homepage = this.attr('homepage')\n const git = this.attr('git')\n const tags = this.attr('tags')\n const issues = this.attr('issues')\n const tools = this.attr('tools')\n const count = this.count()\n const UP = {\n name: 'up',\n icon: 'up',\n size: 20,\n action: {\n type: 'click',\n handler: 'toolbar:action:up'\n }\n }\n const HOME = {\n name: 'homepage',\n icon: 'homepage',\n size: 20,\n link: homepage\n }\n const GIT = {\n name: 'github',\n icon: 'github',\n size: 20,\n link: git\n }\n const TAGS = {\n name: 'tags',\n icon: 'tags',\n size: 20,\n link: tags\n }\n const ISSUES = {\n name: 'issues',\n icon: 'issues',\n size: 20,\n link: issues\n }\n const MENU = {\n name: 'menu',\n icon: 'menu',\n size: 18,\n action: {\n type: 'click',\n handler: 'toolbar:action:toggle'\n }\n }\n const DOWN = {\n name: 'down',\n icon: 'down',\n size: 20,\n action: {\n type: 'click',\n handler: 'toolbar:action:down'\n }\n }\n const buttons = []\n\n buttons.push(UP)\n if (homepage) {\n buttons.push(HOME)\n }\n if (count > 0) {\n buttons.push(MENU)\n }\n if (git) {\n buttons.push(GIT)\n }\n if (tags) {\n buttons.push(TAGS)\n }\n if (issues) {\n buttons.push(ISSUES)\n }\n if (tools?.length > 0) {\n buttons.push(...tools)\n }\n buttons.push(DOWN)\n this.buttons = [...buttons]\n\n this.toolbar = new Toolbar({\n placement,\n buttons: buttons\n })\n\n return this\n }\n\n addButton(button) {\n const toolbar = this.toolbar\n const buttons = this.buttons\n buttons.splice(-1, 0, button)\n toolbar.attr({\n buttons\n })\n toolbar.refresh()\n return this\n }\n\n removeButton(name) {\n this.toolbar.remove(name)\n return this\n }\n\n toTop() {\n const afterScroll = this.attr('afterScroll')\n const toolbar = this.toolbar\n const chapters = this.chapters\n const count = this.count()\n const afterTop = () => {\n toolbar.hide('up')\n toolbar.show('down')\n\n if (count > 0) {\n chapters.highlight(0)\n chapters.playing = false\n }\n\n if (isFunction(afterScroll)) {\n afterScroll.call(toolbar, 'up')\n }\n }\n\n if (count > 0) {\n chapters.playing = true\n }\n this.scrollTo(0, afterTop)\n\n return this\n }\n\n toBottom() {\n const afterScroll = this.attr('afterScroll')\n const $scrollElement = _getScrollElement(this.attr('scrollElement'))\n const toolbar = this.toolbar\n const chapters = this.chapters\n const count = this.count()\n const top = Math.floor(\n $scrollElement.scrollHeight - $scrollElement.clientHeight\n )\n const afterDown = () => {\n toolbar.hide('down')\n toolbar.show('up')\n\n if (count > 0) {\n chapters.highlight(count - 1)\n chapters.playing = false\n }\n\n if (isFunction(afterScroll)) {\n afterScroll.call(toolbar, 'bottom')\n }\n }\n\n if (count > 0) {\n chapters.playing = true\n }\n this.scrollTo(top, afterDown)\n\n return this\n }\n\n scrollTo(top, afterScroll) {\n const scrollElement = this.attr('scrollElement')\n scrollTo(scrollElement, top, afterScroll)\n return this\n }\n\n toggle() {\n const position = this.attr('position')\n const toolbar = this.toolbar\n const drawer = this.drawer\n const chapters = this.chapters\n const count = this.count()\n\n if (count < 1) {\n return this\n }\n\n if (position !== 'relative') {\n chapters.toggle()\n toolbar.highlight('menu')\n } else {\n toolbar.toggle()\n\n later(() => {\n if (chapters.isInside()) {\n chapters.toggle()\n } else {\n drawer.toggle()\n }\n })\n }\n\n return this\n }\n\n destroy() {\n let anchors = this.anchors\n let chapters = this.chapters\n let drawer = this.drawer\n let toolbar = this.toolbar\n let isOutside = false\n const count = this.count()\n\n this.removeListeners()\n\n if (count > 0) {\n isOutside = chapters.isOutside()\n\n chapters.destroy()\n chapters = null\n\n if (isOutside) {\n drawer.destroy()\n drawer = null\n }\n }\n\n toolbar.destroy()\n toolbar = null\n\n anchors.destroy()\n anchors = null\n\n this.attr(Outline.DEFAULTS)\n\n return this\n }\n\n onToggle() {\n this.toggle()\n return this\n }\n\n onScrollTop() {\n this.toTop()\n return this\n }\n\n onScrollBottom() {\n this.toBottom()\n return this\n }\n\n onToolbarUpdate({ top, min, max }) {\n const toolbar = this.toolbar\n const current = Math.ceil(top)\n\n if (current <= min) {\n toolbar.hide('up')\n toolbar.show('down')\n } else if (current >= max) {\n toolbar.hide('down')\n toolbar.show('up')\n } else if (current > min && current < max) {\n toolbar.show('up')\n toolbar.show('down')\n }\n\n return this\n }\n\n addListeners() {\n subscribe('toolbar:update', this.onToolbarUpdate, this)\n subscribe('toolbar:action:up', this.onScrollTop, this)\n subscribe('toolbar:action:toggle', this.onToggle, this)\n subscribe('toolbar:action:down', this.onScrollBottom, this)\n return this\n }\n\n removeListeners() {\n unsubscribe('toolbar:update')\n unsubscribe('toolbar:action:up')\n unsubscribe('toolbar:action:toggle')\n unsubscribe('toolbar:action:down')\n return this\n }\n}\n\nOutline.DEFAULTS = {\n articleElement: '#article',\n selector: 'h2,h3,h4,h5,h6',\n title: '目录',\n scrollElement: 'html,body',\n position: 'relative',\n parentElement: '#aside',\n placement: 'rtl',\n showCode: true,\n anchorURL: '',\n stickyHeight: 0,\n homepage: '',\n git: '',\n tags: '',\n issues: '',\n tools: [],\n customClass: '',\n afterSticky: null,\n afterToggle: null,\n afterScroll: null\n}\n\nif (window.jQuery) {\n // 将 Outline 扩展为一个 jquery 插件\n // eslint-disable-next-line no-undef\n jQuery.extend(jQuery.fn, {\n outline: function (options) {\n // eslint-disable-next-line no-undef\n let $article = jQuery(this)\n\n return new Outline(\n // eslint-disable-next-line no-undef\n jQuery.extend({}, options, {\n articleElement: $article\n })\n )\n }\n })\n}\n\nexport default Outline\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isElement","nodeName","tagName","nodeType","later","fn","delay","setTimeout","easeInQuad","x","_getScrollElement","scrollElement","$rootElements","$scrollElement","document","querySelector","querySelectorAll","scrollTop","scrollTo","top","afterStop","step","distance","MAX_HEIGHT","scrollHeight","MAX_TOP","stop","play","requestAnimationFrame","offsetTop","el","offsetParent","matches","selector","sel","replace","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","$children","childNodes","filter","getListeners","$child","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","stopPropagation","preventDefault","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","isArray","Array","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","exec","iconName","getSymbol","paint","$body","body","$icons","symbols","add","innerHTML","join","createElement","insertBefore","firstChild","trim","isDOM","isHTMLCollection","fragment","isTextNode","setAttribute","toLowerCase","style","cssText","className","children","$fragment","createDocumentFragment","$el","isValidChild","child","append","createTextNode","appendChild","every","isSVG","pattern","RegExp","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","hasClass","allClass","classList","contains","removeClass","remove","_resetHeading","$heading","hasAnchor","isAtStart","CLS_HEADING","text","$anchor","removeAttribute","removeChild","getChapters","headings","showCode","previous","level","chapters","heading","headingLevel","current","parseInt","pid","differ","_getChapterParentIdByDiffer","id","rel","groups","group","JSON","stringify","cb","code","String","c","b","_getChaptersWithCode","Anchors","super","DEFAULTS","$articleElement","$headings","created","articleElement","isTreeStructured","list","nodeKey","parentKey","map","roots","item","node","toTree","count","mounted","anchorURL","chapterCode","headingId","href","_updateHeading","after","beforeDestroy","afterDestroy","onAnchorTrigger","afterScroll","stickyHeight","max","clientHeight","publish","min","addClass","setProperty","documentElement","zIndex","idx","Drawer","title","closed","$modal","$header","$title","$close","$main","$footer","$overlay","setTitle","isClosed","placement","hasClose","hasOverlay","hasOffset","hasPadding","autoHeight","customClass","open","opened","close","toggle","afterToggle","onClose","afterClosed","afterOpened","at","getStyle","ruleName","getComputedStyle","Chapters","$list","$placeholder","$parentElement","active","offsetWidth","$active","scrollTimer","resizeTimer","playing","Observer","parentElement","$parent","isSticky","isFixed","isInside","isOutside","_paintEdge","contents","calculateStickyHeight","byId","chapter","$text","$link","$code","$li","$ul","_paintChapters","positionPlaceholder","sticky","onObserver","mainPaddingTop","mainBorderTop","placeholderPaddingTop","placeholderMarginTop","placeholderBorderTop","offsetHeight","highlight","HIGHLIGHT","getAttribute","afterSticky","FIXED","isStickying","Math","window","innerHeight","show","FOLDED","HIDDEN","hide","clearTimeout","timer","props","root","rootMargin","IntersectionObserver","entries","entry","intersectionRatio","$root","section","observe","intersection","onSelect","split","onScroll","onResize","unobserve","_createButton","button","rounded","link","$button","disabled","DISABLED","Toolbar","buttons","isDisabled","option","ACTIVE","$buttons","disable","action","switch","enabled","enable","refresh","command","afterDisabled","afterEnabled","guid","uuid","prefix","token","subject","_removeSubscriber","execution","j","_removeSubscriberByToken","Outline","anchors","drawer","toolbar","getElementById","_renderAnchors","_renderChapters","_renderToolbar","onToolbarUpdate","CHAPTERS_OPTIONS","homepage","git","tags","issues","tools","HOME","GIT","TAGS","ISSUES","MENU","addButton","removeButton","toTop","toBottom","floor","onToggle","onScrollTop","onScrollBottom","ceil","subscribe","unsubscribe","jQuery","extend","outline","$article"],"mappings":"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"} \ No newline at end of file diff --git a/src/outline.js b/src/outline.js index 59ef8107..c7714b3c 100644 --- a/src/outline.js +++ b/src/outline.js @@ -41,8 +41,21 @@ class Outline extends Base { } render() { + const scrollElement = this.attr('scrollElement') + const $scrollElement = + document.querySelector(scrollElement) || + document.getElementById(scrollElement) + this._renderAnchors()._renderChapters()._renderToolbar() + if ($scrollElement) { + this.onToolbarUpdate({ + top: $scrollElement.scrollTop, + min: 0, + max: $scrollElement.scrollHeight + }) + } + return this } @@ -185,12 +198,12 @@ class Outline extends Base { const buttons = [] buttons.push(UP) - if (count > 0) { - buttons.push(MENU) - } if (homepage) { buttons.push(HOME) } + if (count > 0) { + buttons.push(MENU) + } if (git) { buttons.push(GIT) } diff --git a/toolbar.css b/toolbar.css index 965435bf..23957697 100644 --- a/toolbar.css +++ b/toolbar.css @@ -151,4 +151,4 @@ display: none; } -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLzxpbnB1dCBjc3MgND4iLCJ0b29sYmFyLmxlc3MiLCJzaGFkb3cubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFDbEQsbURBQW1EO0FBQ25EOzs7OztHQUtHO0FBQ0gsNEJBQTRCO0FDSjVCO0VBQ0UsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsVUFBQTtFQUNBLGtDQUFBO1VBQUEsMEJBQUE7RUFDQSxpQkFBQTtDRE1EO0FDSkM7RUNEQSx3Q0FBQTtVQUFBLGdDQUFBO0VER0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsYUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsMEJBQUE7RUFDQSxtQkFBQTtFQUNBLCtCQUFBO1VBQUEsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsaUJBQUE7Q0RNSDtBQ0pHO0VBQ0UsZUFBQTtFQUNBLHNCQUFBO0NETUw7QUNIRztFQUNFLGNBQUE7Q0RLTDtBQ0FHOzs7RUFHRSxZQUFBO0VBQ0Esc0JBQUE7Q0RFTDtBQ0NHO0VBQ0UsZUFBQTtDRENMO0FDR0M7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EseUNBQUE7VUFBQSxpQ0FBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7Q0RESDtBQ01LO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q0RKUDtBQ01PO0VBQ0UsWUFBQTtDREpUO0FDVUs7OztFQUdFLFlBQUE7Q0RSUDtBQ2NHO0VBQ0Usb0JBQUE7Q0RaTDtBQ21CSzs7Ozs7Ozs7RUFJRSxvQkFBQTtFQUNBLFlBQUE7Q0RiUDtBQ2VPOzs7Ozs7OztFQUNFLFlBQUE7Q0ROVDtBQ1VLOztFQUNFLDBCQUFBO0NEUFA7QUNZQzs7RUFFRSxVQUFBO0VBQ0Esb0NBQUE7VUFBQSw0QkFBQTtDRFZIO0FDT0M7O0VBTUksc0JBQUE7Q0RUTDtBQ2FDO0VBQ0UsVUFBQTtDRFhIO0FDYUc7RUFDRSxXQUFBO0NEWEw7QUNlQztFQUNFLGFBQUE7Q0RiSDtBQ2VHO0VBQ0UsY0FBQTtDRGJMO0FDaUJDOztFQUVFLG9DQUFBO1VBQUEsNEJBQUE7RUFDQSxZQUFBO0NEZkg7QUNrQkM7RUFDRSxTQUFBO0VBQ0EsWUFBQTtDRGhCSDtBQ2tCRztFQUNFLGFBQUE7Q0RoQkw7QUNvQkM7RUFDRSxTQUFBO0VBQ0EsV0FBQTtDRGxCSDtBQ29CRztFQUNFLFlBQUE7Q0RsQkw7QUMyQks7Ozs7RUFDRSxjQUFBO0NEdEJQIiwiZmlsZSI6InRvb2xiYXIuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogPT09PT09PT09PSBidXR0b25zLnRoZW1lIC0g5oyJ6ZKu5a+86Iiq5qC35byPID09PT09PT09PT0gKi9cbi8qID09PT09PT09PT0gY29sb3JzLnRoZW1lIC0g5Z+656GA6aKc6Imy5Y+Y6YeP6ZuG5ZCIID09PT09PT09PT0gKi9cbi8qKlxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMjBcbiAqL1xuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cbi5vdXRsaW5lLXRvb2xiYXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5O1xuICBtYXJnaW46IDA7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMTBweDtcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RjZGZlNjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICM1NTU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgYm9yZGVyLWNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLmhpZGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2ljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDU4OTQyO1xuICBib3JkZXItY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9yb3VuZGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogMThweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgY29sb3I6ICM5OTk7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbms6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZDpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXI6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiLFxuLm91dGxpbmUtdG9vbGJhcl9idHQge1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIHtcbiAgdG9wOiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIHRvcDogLTU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2J0dCB7XG4gIGJvdHRvbTogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYnR0Lm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBib3R0b206IC01NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwsXG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgd2lkdGg6IDU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bCB7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICByaWdodDogLTg2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9sdHIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGxlZnQ6IC04NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX3J0bCAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9sdHIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuIiwiLyogPT09PT09PT09PSBidXR0b25zLnRoZW1lIC0g5oyJ6ZKu5a+86Iiq5qC35byPID09PT09PT09PT0gKi9cclxuQGltcG9ydCAnLi9jb2xvcnMnO1xyXG5AaW1wb3J0ICcuL3NoYWRvdyc7XHJcblxyXG4ub3V0bGluZS10b29sYmFyIHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgei1pbmRleDogOTk5OTk7XHJcbiAgbWFyZ2luOiAwO1xyXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuXHJcbiAgJl9fYnV0dG9uIHtcclxuICAgIC5zaGFkb3dfbGlnaHRfcmVndWxhcigpO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgei1pbmRleDogMTtcclxuICAgIG1hcmdpbjogMTBweDtcclxuICAgIHdpZHRoOiAzNnB4O1xyXG4gICAgaGVpZ2h0OiAzNnB4O1xyXG4gICAgYm9yZGVyOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xyXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcclxuICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgIGNvbG9yOiBAc2Vjb25kYXJ5X3RleHRfY29sb3I7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICAgIGJvcmRlci1jb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgJi5oaWRlIHtcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfX2FuY2hvciB7XHJcbiAgICAmOmxpbmssXHJcbiAgICAmOnZpc2l0ZWQsXHJcbiAgICAmOmhvdmVyIHtcclxuICAgICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG4gICAgfVxyXG5cclxuICAgICY6aG92ZXIge1xyXG4gICAgICBjb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX19pY29uIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHotaW5kZXg6IDI7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIHdpZHRoOiAyMHB4O1xyXG4gICAgaGVpZ2h0OiAyMHB4O1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbiAgICBmaWxsOiBjdXJyZW50Y29sb3I7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1cclxuXHJcbiAgJl9hY3RpdmUge1xyXG4gICAgJi5vdXRsaW5lLXRvb2xiYXIge1xyXG4gICAgICAmX19idXR0b24ge1xyXG4gICAgICAgIGNvbG9yOiBAd2hpdGU7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHN1Y2Nlc3NfY29sb3I7XHJcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcclxuXHJcbiAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICBjb2xvcjogQHdoaXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvciB7XHJcbiAgICAgICY6bGluayxcclxuICAgICAgJjp2aXNpdGVkLFxyXG4gICAgICAmOmhvdmVyIHtcclxuICAgICAgICBjb2xvcjogQHdoaXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3JvdW5kZWQge1xyXG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX2Rpc2FibGVkIHtcclxuICAgICYub3V0bGluZS10b29sYmFyLFxyXG4gICAgLm91dGxpbmUtdG9vbGJhciB7XHJcbiAgICAgICZfX2FuY2hvcjpsaW5rLFxyXG4gICAgICAmX19hbmNob3I6dmlzaXRlZCxcclxuICAgICAgJl9fYW5jaG9yOmhvdmVyLFxyXG4gICAgICAmX19idXR0b24ge1xyXG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgY29sb3I6IEBmb3VydGhfdGV4dF9jb2xvcjtcclxuXHJcbiAgICAgICAgJjpob3ZlciB7XHJcbiAgICAgICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgJl9fYnV0dG9uIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAZGlzYWJsZWRfYmdfY29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfdHRiLFxyXG4gICZfYnR0IHtcclxuICAgIGxlZnQ6IDUwJTtcclxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcclxuXHJcbiAgICAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xyXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAmX3R0YiB7XHJcbiAgICB0b3A6IDEycHg7XHJcblxyXG4gICAgJi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcclxuICAgICAgdG9wOiAtNTZweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfYnR0IHtcclxuICAgIGJvdHRvbTogMTJweDtcclxuXHJcbiAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xyXG4gICAgICBib3R0b206IC01NnB4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJl9ydGwsXHJcbiAgJl9sdHIge1xyXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xyXG4gICAgd2lkdGg6IDU2cHg7XHJcbiAgfVxyXG5cclxuICAmX3J0bCB7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAxMnB4O1xyXG5cclxuICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XHJcbiAgICAgIHJpZ2h0OiAtODZweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfbHRyIHtcclxuICAgIHRvcDogNTAlO1xyXG4gICAgbGVmdDogMTJweDtcclxuXHJcbiAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xyXG4gICAgICBsZWZ0OiAtODZweDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICZfdHRiLFxyXG4gICZfcnRsLFxyXG4gICZfYnR0LFxyXG4gICZfbHRyIHtcclxuICAgIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XHJcbiAgICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCIvKipcclxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENyZWF0ZWQgQnk6IFlhb2hhaXhpYW9cclxuICogVXBkYXRlOiAyMDIyLjMuMjBcclxuICovXHJcbkBpbXBvcnQgJy4vY29sb3JzJztcclxuXHJcbi8qID09PT09PSDpmLTlvbHmoLflvI/orr7nva7lh73mlbAgPT09PT09ICovXHJcbi5zaGFkb3coQG9mZnNldDogMCAwIDZweCAxcHgsIEBjb2xvcjogQHByaW1hcnlfYm9yZGVyX2NvbG9yKSB7XHJcbiAgYm94LXNoYWRvdzogQG9mZnNldCBAY29sb3I7XHJcbn1cclxuXHJcbi5zaGFkb3dfcmVndWxhcihAY29sb3I6IEBwcmltYXJ5X2JvcmRlcl9jb2xvcikge1xyXG4gIC5zaGFkb3coMCAwIDZweCAxcHgsIEBjb2xvcik7XHJcbn1cclxuXHJcbi5zaGFkb3dfbGFyZ2UoQGNvbG9yOiBAcHJpbWFyeV9ib3JkZXJfY29sb3IpIHtcclxuICAuc2hhZG93KDAgMCAxMnB4IDFweCwgQGNvbG9yKTtcclxufVxyXG5cclxuLnNoYWRvd19saWdodF9yZWd1bGFyKCkge1xyXG4gIC5zaGFkb3dfcmVndWxhcigpO1xyXG59XHJcblxyXG4uc2hhZG93X2xpZ2h0X2xhcmdlKCkge1xyXG4gIC5zaGFkb3dfbGFyZ2UoKTtcclxufVxyXG5cclxuLnNoYWRvd19kYXJrX3JlZ3VsYXIoKSB7XHJcbiAgLnNoYWRvd19yZWd1bGFyKEBzZWNvbmRhcnlfYm9yZGVyX2NvbG9yKTtcclxufVxyXG5cclxuLnNoYWRvd19kYXJrX2xhcmdlKCkge1xyXG4gIC5zaGFkb3dfbGFyZ2UoQHNlY29uZGFyeV9ib3JkZXJfY29sb3IpO1xyXG59XHJcbiJdfQ== */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLzxpbnB1dCBjc3MgND4iLCJ0b29sYmFyLmxlc3MiLCJzaGFkb3cubGVzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFDbEQsbURBQW1EO0FBQ25EOzs7OztHQUtHO0FBQ0gsNEJBQTRCO0FDSjVCO0VBQ0UsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsVUFBQTtFQUNBLGtDQUFBO1VBQUEsMEJBQUE7RUFDQSxpQkFBQTtDRE1EO0FDSkM7RUNEQSx3Q0FBQTtVQUFBLGdDQUFBO0VER0UsbUJBQUE7RUFDQSxXQUFBO0VBQ0EsYUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsMEJBQUE7RUFDQSxtQkFBQTtFQUNBLCtCQUFBO1VBQUEsdUJBQUE7RUFDQSx1QkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxZQUFBO0VBQ0EsaUJBQUE7Q0RNSDtBQ0pHO0VBQ0UsZUFBQTtFQUNBLHNCQUFBO0NETUw7QUNIRztFQUNFLGNBQUE7Q0RLTDtBQ0FHOzs7RUFHRSxZQUFBO0VBQ0Esc0JBQUE7Q0RFTDtBQ0NHO0VBQ0UsZUFBQTtDRENMO0FDR0M7RUFDRSxtQkFBQTtFQUNBLFdBQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EseUNBQUE7VUFBQSxpQ0FBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7Q0RESDtBQ01LO0VBQ0UsWUFBQTtFQUNBLDBCQUFBO0VBQ0Esc0JBQUE7Q0RKUDtBQ01PO0VBQ0UsWUFBQTtDREpUO0FDVUs7OztFQUdFLFlBQUE7Q0RSUDtBQ2NHO0VBQ0Usb0JBQUE7Q0RaTDtBQ21CSzs7Ozs7Ozs7RUFJRSxvQkFBQTtFQUNBLFlBQUE7Q0RiUDtBQ2VPOzs7Ozs7OztFQUNFLFlBQUE7Q0ROVDtBQ1VLOztFQUNFLDBCQUFBO0NEUFA7QUNZQzs7RUFFRSxVQUFBO0VBQ0Esb0NBQUE7VUFBQSw0QkFBQTtDRFZIO0FDT0M7O0VBTUksc0JBQUE7Q0RUTDtBQ2FDO0VBQ0UsVUFBQTtDRFhIO0FDYUc7RUFDRSxXQUFBO0NEWEw7QUNlQztFQUNFLGFBQUE7Q0RiSDtBQ2VHO0VBQ0UsY0FBQTtDRGJMO0FDaUJDOztFQUVFLG9DQUFBO1VBQUEsNEJBQUE7RUFDQSxZQUFBO0NEZkg7QUNrQkM7RUFDRSxTQUFBO0VBQ0EsWUFBQTtDRGhCSDtBQ2tCRztFQUNFLGFBQUE7Q0RoQkw7QUNvQkM7RUFDRSxTQUFBO0VBQ0EsV0FBQTtDRGxCSDtBQ29CRztFQUNFLFlBQUE7Q0RsQkw7QUMyQks7Ozs7RUFDRSxjQUFBO0NEdEJQIiwiZmlsZSI6InRvb2xiYXIuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyogPT09PT09PT09PSBidXR0b25zLnRoZW1lIC0g5oyJ6ZKu5a+86Iiq5qC35byPID09PT09PT09PT0gKi9cbi8qID09PT09PT09PT0gY29sb3JzLnRoZW1lIC0g5Z+656GA6aKc6Imy5Y+Y6YeP6ZuG5ZCIID09PT09PT09PT0gKi9cbi8qKlxuICogc2hhZG93Lmxlc3MgLSDpmLTlvbHmoLflvI/orr7nva4gbWl4aW54IOWHveaVsFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ3JlYXRlZCBCeTogWWFvaGFpeGlhb1xuICogVXBkYXRlOiAyMDIyLjMuMjBcbiAqL1xuLyogPT09PT09IOmYtOW9seagt+W8j+iuvue9ruWHveaVsCA9PT09PT0gKi9cbi5vdXRsaW5lLXRvb2xiYXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5O1xuICBtYXJnaW46IDA7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBib3gtc2hhZG93OiAwIDAgNnB4IDFweCAjZGNkZmU2O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHotaW5kZXg6IDE7XG4gIG1hcmdpbjogMTBweDtcbiAgd2lkdGg6IDM2cHg7XG4gIGhlaWdodDogMzZweDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2RjZGZlNjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICM1NTU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogIzA1ODk0MjtcbiAgYm9yZGVyLWNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLmhpZGUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogIzA1ODk0Mjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2ljb24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAyMHB4O1xuICBoZWlnaHQ6IDIwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBmaWxsOiBjdXJyZW50Y29sb3I7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDU4OTQyO1xuICBib3JkZXItY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZS5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xufVxuLm91dGxpbmUtdG9vbGJhcl9yb3VuZGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYm9yZGVyLXJhZGl1czogMThweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgY29sb3I6ICM5OTk7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbms6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZDpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXI6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjOTk5O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiLFxuLm91dGxpbmUtdG9vbGJhcl9idHQge1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIHtcbiAgdG9wOiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIHRvcDogLTU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2J0dCB7XG4gIGJvdHRvbTogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYnR0Lm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBib3R0b206IC01NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwsXG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgd2lkdGg6IDU2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bCB7XG4gIHRvcDogNTAlO1xuICByaWdodDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICByaWdodDogLTg2cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2x0ciB7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiAxMnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9sdHIub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gIGxlZnQ6IC04NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl90dGIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX3J0bCAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9sdHIgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuIiwiLyogPT09PT09PT09PSBidXR0b25zLnRoZW1lIC0g5oyJ6ZKu5a+86Iiq5qC35byPID09PT09PT09PT0gKi9cbkBpbXBvcnQgJy4vY29sb3JzJztcbkBpbXBvcnQgJy4vc2hhZG93JztcblxuLm91dGxpbmUtdG9vbGJhciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogOTk5OTk7XG4gIG1hcmdpbjogMDtcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4zcztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmX19idXR0b24ge1xuICAgIC5zaGFkb3dfbGlnaHRfcmVndWxhcigpO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIG1hcmdpbjogMTBweDtcbiAgICB3aWR0aDogMzZweDtcbiAgICBoZWlnaHQ6IDM2cHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgQHByaW1hcnlfYm9yZGVyX2NvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQtY29sb3I6IEB3aGl0ZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiBAc2Vjb25kYXJ5X3RleHRfY29sb3I7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xuICAgICAgYm9yZGVyLWNvbG9yOiBAc3VjY2Vzc19jb2xvcjtcbiAgICB9XG5cbiAgICAmLmhpZGUge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gIH1cblxuICAmX19hbmNob3Ige1xuICAgICY6bGluayxcbiAgICAmOnZpc2l0ZWQsXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6IEBzdWNjZXNzX2NvbG9yO1xuICAgIH1cbiAgfVxuXG4gICZfX2ljb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgZmlsbDogY3VycmVudGNvbG9yO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gIH1cblxuICAmX2FjdGl2ZSB7XG4gICAgJi5vdXRsaW5lLXRvb2xiYXIge1xuICAgICAgJl9fYnV0dG9uIHtcbiAgICAgICAgY29sb3I6IEB3aGl0ZTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG4gICAgICAgIGJvcmRlci1jb2xvcjogQHN1Y2Nlc3NfY29sb3I7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgY29sb3I6IEB3aGl0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvciB7XG4gICAgICAmOmxpbmssXG4gICAgICAmOnZpc2l0ZWQsXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IEB3aGl0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX3JvdW5kZWQge1xuICAgICYub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICAgICAgYm9yZGVyLXJhZGl1czogMThweDtcbiAgICB9XG4gIH1cblxuICAmX2Rpc2FibGVkIHtcbiAgICAmLm91dGxpbmUtdG9vbGJhcixcbiAgICAub3V0bGluZS10b29sYmFyIHtcbiAgICAgICZfX2FuY2hvcjpsaW5rLFxuICAgICAgJl9fYW5jaG9yOnZpc2l0ZWQsXG4gICAgICAmX19hbmNob3I6aG92ZXIsXG4gICAgICAmX19idXR0b24ge1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICBjb2xvcjogQGZvdXJ0aF90ZXh0X2NvbG9yO1xuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIGNvbG9yOiBAZm91cnRoX3RleHRfY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJl9fYnV0dG9uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogQGRpc2FibGVkX2JnX2NvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfdHRiLFxuICAmX2J0dCB7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcblxuICAgIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgJl90dGIge1xuICAgIHRvcDogMTJweDtcblxuICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gICAgICB0b3A6IC01NnB4O1xuICAgIH1cbiAgfVxuXG4gICZfYnR0IHtcbiAgICBib3R0b206IDEycHg7XG5cbiAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICAgICAgYm90dG9tOiAtNTZweDtcbiAgICB9XG4gIH1cblxuICAmX3J0bCxcbiAgJl9sdHIge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB3aWR0aDogNTZweDtcbiAgfVxuXG4gICZfcnRsIHtcbiAgICB0b3A6IDUwJTtcbiAgICByaWdodDogMTJweDtcblxuICAgICYub3V0bGluZS10b29sYmFyX2hpZGRlbiB7XG4gICAgICByaWdodDogLTg2cHg7XG4gICAgfVxuICB9XG5cbiAgJl9sdHIge1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDEycHg7XG5cbiAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICAgICAgbGVmdDogLTg2cHg7XG4gICAgfVxuICB9XG5cbiAgJl90dGIsXG4gICZfcnRsLFxuICAmX2J0dCxcbiAgJl9sdHIge1xuICAgIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gICAgICAmLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxuICovXG5AaW1wb3J0ICcuL2NvbG9ycyc7XG5cbi8qID09PT09PSDpmLTlvbHmoLflvI/orr7nva7lh73mlbAgPT09PT09ICovXG4uc2hhZG93KEBvZmZzZXQ6IDAgMCA2cHggMXB4LCBAY29sb3I6IEBwcmltYXJ5X2JvcmRlcl9jb2xvcikge1xuICBib3gtc2hhZG93OiBAb2Zmc2V0IEBjb2xvcjtcbn1cblxuLnNoYWRvd19yZWd1bGFyKEBjb2xvcjogQHByaW1hcnlfYm9yZGVyX2NvbG9yKSB7XG4gIC5zaGFkb3coMCAwIDZweCAxcHgsIEBjb2xvcik7XG59XG5cbi5zaGFkb3dfbGFyZ2UoQGNvbG9yOiBAcHJpbWFyeV9ib3JkZXJfY29sb3IpIHtcbiAgLnNoYWRvdygwIDAgMTJweCAxcHgsIEBjb2xvcik7XG59XG5cbi5zaGFkb3dfbGlnaHRfcmVndWxhcigpIHtcbiAgLnNoYWRvd19yZWd1bGFyKCk7XG59XG5cbi5zaGFkb3dfbGlnaHRfbGFyZ2UoKSB7XG4gIC5zaGFkb3dfbGFyZ2UoKTtcbn1cblxuLnNoYWRvd19kYXJrX3JlZ3VsYXIoKSB7XG4gIC5zaGFkb3dfcmVndWxhcihAc2Vjb25kYXJ5X2JvcmRlcl9jb2xvcik7XG59XG5cbi5zaGFkb3dfZGFya19sYXJnZSgpIHtcbiAgLnNoYWRvd19sYXJnZShAc2Vjb25kYXJ5X2JvcmRlcl9jb2xvcik7XG59XG4iXX0= */ diff --git a/toolbar.min.css b/toolbar.min.css index 3b3d5a4a..c8af9925 100644 --- a/toolbar.min.css +++ b/toolbar.min.css @@ -1,2 +1,2 @@ .outline-toolbar{position:fixed;z-index:99999;margin:0;-webkit-transition-duration:.3s;transition-duration:.3s;overflow:hidden}.outline-toolbar__button{-webkit-box-shadow:0 0 6px 1px #dcdfe6;box-shadow:0 0 6px 1px #dcdfe6;position:relative;z-index:1;margin:10px;width:36px;height:36px;border:1px solid #dcdfe6;border-radius:3px;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;cursor:pointer;text-align:center;color:#555;overflow:hidden}.outline-toolbar__button:hover{color:#058942;border-color:#058942}.outline-toolbar__button.hide{display:none}.outline-toolbar__anchor:hover,.outline-toolbar__anchor:link,.outline-toolbar__anchor:visited{color:#999;text-decoration:none}.outline-toolbar__anchor:hover{color:#058942}.outline-toolbar__icon{position:absolute;z-index:2;top:50%;left:50%;width:20px;height:20px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);fill:currentcolor;overflow:hidden}.outline-toolbar_active.outline-toolbar__button{color:#fff;background-color:#058942;border-color:#058942}.outline-toolbar_active .outline-toolbar__anchor:hover,.outline-toolbar_active .outline-toolbar__anchor:link,.outline-toolbar_active .outline-toolbar__anchor:visited,.outline-toolbar_active.outline-toolbar__button:hover{color:#fff}.outline-toolbar_rounded.outline-toolbar__button{border-radius:18px}.outline-toolbar_disabled .outline-toolbar__anchor:hover,.outline-toolbar_disabled .outline-toolbar__anchor:link,.outline-toolbar_disabled .outline-toolbar__anchor:visited,.outline-toolbar_disabled .outline-toolbar__button,.outline-toolbar_disabled.outline-toolbar__anchor:hover,.outline-toolbar_disabled.outline-toolbar__anchor:link,.outline-toolbar_disabled.outline-toolbar__anchor:visited,.outline-toolbar_disabled.outline-toolbar__button{cursor:not-allowed;color:#999}.outline-toolbar_disabled .outline-toolbar__anchor:hover:hover,.outline-toolbar_disabled .outline-toolbar__anchor:link:hover,.outline-toolbar_disabled .outline-toolbar__anchor:visited:hover,.outline-toolbar_disabled .outline-toolbar__button:hover,.outline-toolbar_disabled.outline-toolbar__anchor:hover:hover,.outline-toolbar_disabled.outline-toolbar__anchor:link:hover,.outline-toolbar_disabled.outline-toolbar__anchor:visited:hover,.outline-toolbar_disabled.outline-toolbar__button:hover{color:#999}.outline-toolbar_disabled .outline-toolbar__button,.outline-toolbar_disabled.outline-toolbar__button{background-color:#f5f5f5}.outline-toolbar_btt,.outline-toolbar_ttb{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.outline-toolbar_btt .outline-toolbar__button,.outline-toolbar_ttb .outline-toolbar__button{display:inline-block}.outline-toolbar_ttb{top:12px}.outline-toolbar_ttb.outline-toolbar_hidden{top:-56px}.outline-toolbar_btt{bottom:12px}.outline-toolbar_btt.outline-toolbar_hidden{bottom:-56px}.outline-toolbar_ltr,.outline-toolbar_rtl{-webkit-transform:translateY(-50%);transform:translateY(-50%);width:56px}.outline-toolbar_rtl{top:50%;right:12px}.outline-toolbar_rtl.outline-toolbar_hidden{right:-86px}.outline-toolbar_ltr{top:50%;left:12px}.outline-toolbar_ltr.outline-toolbar_hidden{left:-86px}.outline-toolbar_btt .outline-toolbar__button.outline-toolbar_hidden,.outline-toolbar_ltr .outline-toolbar__button.outline-toolbar_hidden,.outline-toolbar_rtl .outline-toolbar__button.outline-toolbar_hidden,.outline-toolbar_ttb .outline-toolbar__button.outline-toolbar_hidden{display:none} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJ0b29sYmFyLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiA9PT09PT09PT09IGJ1dHRvbnMudGhlbWUgLSDmjInpkq7lr7zoiKrmoLflvI8gPT09PT09PT09PSAqL1xuLyogPT09PT09PT09PSBjb2xvcnMudGhlbWUgLSDln7rnoYDpopzoibLlj5jph4/pm4blkIggPT09PT09PT09PSAqL1xuLyoqXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxuICovXG4vKiA9PT09PT0g6Zi05b2x5qC35byP6K6+572u5Ye95pWwID09PT09PSAqL1xuLm91dGxpbmUtdG9vbGJhciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogOTk5OTk7XG4gIG1hcmdpbjogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDEwcHg7XG4gIHdpZHRoOiAzNnB4O1xuICBoZWlnaHQ6IDM2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkY2RmZTY7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzU1NTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICBib3JkZXItY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b24uaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgZmlsbDogY3VycmVudGNvbG9yO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA1ODk0MjtcbiAgYm9yZGVyLWNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcm91bmRlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDE4cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b24sXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIGNvbG9yOiAjOTk5O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluazpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZDpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQ6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXI6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b24sXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG4ub3V0bGluZS10b29sYmFyX3R0Yixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IHtcbiAgbGVmdDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiAub3V0bGluZS10b29sYmFyX19idXR0b24sXG4ub3V0bGluZS10b29sYmFyX2J0dCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiB7XG4gIHRvcDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICB0b3A6IC01NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9idHQge1xuICBib3R0b206IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX2J0dC5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgYm90dG9tOiAtNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsLFxuLm91dGxpbmUtdG9vbGJhcl9sdHIge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIHdpZHRoOiA1NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwge1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bC5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgcmlnaHQ6IC04NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9sdHIge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfbHRyLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBsZWZ0OiAtODZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9ydGwgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX2J0dCAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfbHRyIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx6eHBibkIxZENCamMzTWdORDRpTENKMGIyOXNZbUZ5TG14bGMzTWlMQ0p6YUdGa2IzY3ViR1Z6Y3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeHJSRUZCYTBRN1FVRkRiRVFzYlVSQlFXMUVPMEZCUTI1RU96czdPenRIUVV0SE8wRkJRMGdzTkVKQlFUUkNPMEZEU2pWQ08wVkJRMFVzWjBKQlFVRTdSVUZEUVN4bFFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxHdERRVUZCTzFWQlFVRXNNRUpCUVVFN1JVRkRRU3hwUWtGQlFUdERSRTFFTzBGRFNrTTdSVU5FUVN4M1EwRkJRVHRWUVVGQkxHZERRVUZCTzBWRVIwVXNiVUpCUVVFN1JVRkRRU3hYUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc01FSkJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMQ3RDUVVGQk8xVkJRVUVzZFVKQlFVRTdSVUZEUVN4MVFrRkJRVHRGUVVOQkxHZENRVUZCTzBWQlEwRXNiVUpCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzYVVKQlFVRTdRMFJOU0R0QlEwcEhPMFZCUTBVc1pVRkJRVHRGUVVOQkxITkNRVUZCTzBORVRVdzdRVU5JUnp0RlFVTkZMR05CUVVFN1EwUkxURHRCUTBGSE96czdSVUZIUlN4WlFVRkJPMFZCUTBFc2MwSkJRVUU3UTBSRlREdEJRME5ITzBWQlEwVXNaVUZCUVR0RFJFTk1PMEZEUjBNN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VFFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNlVU5CUVVFN1ZVRkJRU3hwUTBGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UTBSRVNEdEJRMDFMTzBWQlEwVXNXVUZCUVR0RlFVTkJMREJDUVVGQk8wVkJRMEVzYzBKQlFVRTdRMFJLVUR0QlEwMVBPMFZCUTBVc1dVRkJRVHREUkVwVU8wRkRWVXM3T3p0RlFVZEZMRmxCUVVFN1EwUlNVRHRCUTJOSE8wVkJRMFVzYjBKQlFVRTdRMFJhVER0QlEyMUNTenM3T3pzN096czdSVUZKUlN4dlFrRkJRVHRGUVVOQkxGbEJRVUU3UTBSaVVEdEJRMlZQT3pzN096czdPenRGUVVORkxGbEJRVUU3UTBST1ZEdEJRMVZMT3p0RlFVTkZMREJDUVVGQk8wTkVVRkE3UVVOWlF6czdSVUZGUlN4VlFVRkJPMFZCUTBFc2IwTkJRVUU3VlVGQlFTdzBRa0ZCUVR0RFJGWklPMEZEVDBNN08wVkJUVWtzYzBKQlFVRTdRMFJVVER0QlEyRkRPMFZCUTBVc1ZVRkJRVHREUkZoSU8wRkRZVWM3UlVGRFJTeFhRVUZCTzBORVdFdzdRVU5sUXp0RlFVTkZMR0ZCUVVFN1EwUmlTRHRCUTJWSE8wVkJRMFVzWTBGQlFUdERSR0pNTzBGRGFVSkRPenRGUVVWRkxHOURRVUZCTzFWQlFVRXNORUpCUVVFN1JVRkRRU3haUVVGQk8wTkVaa2c3UVVOclFrTTdSVUZEUlN4VFFVRkJPMFZCUTBFc1dVRkJRVHREUkdoQ1NEdEJRMnRDUnp0RlFVTkZMR0ZCUVVFN1EwUm9Ra3c3UVVOdlFrTTdSVUZEUlN4VFFVRkJPMFZCUTBFc1YwRkJRVHREUkd4Q1NEdEJRMjlDUnp0RlFVTkZMRmxCUVVFN1EwUnNRa3c3UVVNeVFrczdPenM3UlVGRFJTeGpRVUZCTzBORWRFSlFJaXdpWm1sc1pTSTZJblJ2YjJ4aVlYSXVZM056SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b2dQVDA5UFQwOVBUMDlQU0JpZFhSMGIyNXpMblJvWlcxbElDMGc1b3lKNlpLdTVhKzg2SWlxNXFDMzVieVBJRDA5UFQwOVBUMDlQVDBnS2k5Y2JpOHFJRDA5UFQwOVBUMDlQVDBnWTI5c2IzSnpMblJvWlcxbElDMGc1Wis2NTZHQTZhS2M2SW15NVkrWTZZZVA2WnVHNVpDSUlEMDlQVDA5UFQwOVBUMGdLaTljYmk4cUtseHVJQ29nYzJoaFpHOTNMbXhsYzNNZ0xTRHBtTFRsdmJIbW9MZmx2SS9vcnI3bnZhNGdiV2w0YVc1NElPV0h2ZWFWc0Z4dUlDb2dQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVJQ29nUTNKbFlYUmxaQ0JDZVRvZ1dXRnZhR0ZwZUdsaGIxeHVJQ29nVlhCa1lYUmxPaUF5TURJeUxqTXVNakJjYmlBcUwxeHVMeW9nUFQwOVBUMDlJT21ZdE9XOXNlYWd0K1c4aitpdXZ1ZTlydVdIdmVhVnNDQTlQVDA5UFQwZ0tpOWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSWdlMXh1SUNCd2IzTnBkR2x2YmpvZ1ptbDRaV1E3WEc0Z0lIb3RhVzVrWlhnNklEazVPVGs1TzF4dUlDQnRZWEpuYVc0NklEQTdYRzRnSUhSeVlXNXphWFJwYjI0dFpIVnlZWFJwYjI0NklEQXVNM003WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCaWIzZ3RjMmhoWkc5M09pQXdJREFnTm5CNElERndlQ0FqWkdOa1ptVTJPMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lHMWhjbWRwYmpvZ01UQndlRHRjYmlBZ2QybGtkR2c2SURNMmNIZzdYRzRnSUdobGFXZG9kRG9nTXpad2VEdGNiaUFnWW05eVpHVnlPaUF4Y0hnZ2MyOXNhV1FnSTJSalpHWmxOanRjYmlBZ1ltOXlaR1Z5TFhKaFpHbDFjem9nTTNCNE8xeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUFqWm1abU8xeHVJQ0JqZFhKemIzSTZJSEJ2YVc1MFpYSTdYRzRnSUhSbGVIUXRZV3hwWjI0NklHTmxiblJsY2p0Y2JpQWdZMjlzYjNJNklDTTFOVFU3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNDZhRzkyWlhJZ2UxeHVJQ0JqYjJ4dmNqb2dJekExT0RrME1qdGNiaUFnWW05eVpHVnlMV052Ykc5eU9pQWpNRFU0T1RReU8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVMbWhwWkdVZ2UxeHVJQ0JrYVhOd2JHRjVPaUJ1YjI1bE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWVc1amFHOXlPbXhwYm1zc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmRtbHphWFJsWkN4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBak9UazVPMXh1SUNCMFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXpBMU9EazBNanRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgybGpiMjRnZTF4dUlDQndiM05wZEdsdmJqb2dZV0p6YjJ4MWRHVTdYRzRnSUhvdGFXNWtaWGc2SURJN1hHNGdJSFJ2Y0RvZ05UQWxPMXh1SUNCc1pXWjBPaUExTUNVN1hHNGdJSGRwWkhSb09pQXlNSEI0TzF4dUlDQm9aV2xuYUhRNklESXdjSGc3WEc0Z0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxLQzAxTUNVc0lDMDFNQ1VwTzF4dUlDQm1hV3hzT2lCamRYSnlaVzUwWTI5c2IzSTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyRmpkR2wyWlM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaUI3WEc0Z0lHTnZiRzl5T2lBalptWm1PMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBak1EVTRPVFF5TzF4dUlDQmliM0prWlhJdFkyOXNiM0k2SUNNd05UZzVOREk3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyRmpkR2wyWlM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZianBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqWm1abU8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDloWTNScGRtVWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9teHBibXNzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJGamRHbDJaU0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTloYm1Ob2IzSTZkbWx6YVhSbFpDeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZZV04wYVhabElDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBalptWm1PMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5eWIzVnVaR1ZrTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1ltOXlaR1Z5TFhKaFpHbDFjem9nTVRod2VEdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTloYm1Ob2IzSTZiR2x1YXl4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlpHbHpZV0pzWldRZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T214cGJtc3NYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9uWnBjMmwwWldRc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9taHZkbVZ5TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1FnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1kzVnljMjl5T2lCdWIzUXRZV3hzYjNkbFpEdGNiaUFnWTI5c2IzSTZJQ001T1RrN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9teHBibXM2YUc5MlpYSXNYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcHNhVzVyT21odmRtVnlMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcDJhWE5wZEdWa09taHZkbVZ5TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2ZG1semFYUmxaRHBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmFHOTJaWEk2YUc5MlpYSXNYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcG9iM1psY2pwb2IzWmxjaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNDZhRzkyWlhJc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2Ympwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBak9UazVPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1FnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWTFaalZtTlR0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZkSFJpTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5aWRIUWdlMXh1SUNCc1pXWjBPaUExTUNVN1hHNGdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV0NndE5UQWxLVHRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmRIUmlJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZZblIwSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaUI3WEc0Z0lHUnBjM0JzWVhrNklHbHViR2x1WlMxaWJHOWphenRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmRIUmlJSHRjYmlBZ2RHOXdPaUF4TW5CNE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDkwZEdJdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEc0Z0lIUnZjRG9nTFRVMmNIZzdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJKMGRDQjdYRzRnSUdKdmRIUnZiVG9nTVRKd2VEdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWW5SMExtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRnZTF4dUlDQmliM1IwYjIwNklDMDFObkI0TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOXlkR3dzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJ4MGNpQjdYRzRnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2JpQWdkMmxrZEdnNklEVTJjSGc3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzSjBiQ0I3WEc0Z0lIUnZjRG9nTlRBbE8xeHVJQ0J5YVdkb2REb2dNVEp3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZjblJzTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlvYVdSa1pXNGdlMXh1SUNCeWFXZG9kRG9nTFRnMmNIZzdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJ4MGNpQjdYRzRnSUhSdmNEb2dOVEFsTzF4dUlDQnNaV1owT2lBeE1uQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5c2RISXViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYmlCN1hHNGdJR3hsWm5RNklDMDRObkI0TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOTBkR0lnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOW9hV1JrWlc0c1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzSjBiQ0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYml4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlluUjBJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmFHbGtaR1Z1TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5c2RISWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRnZTF4dUlDQmthWE53YkdGNU9pQnViMjVsTzF4dWZWeHVJaXdpTHlvZ1BUMDlQVDA5UFQwOVBTQmlkWFIwYjI1ekxuUm9aVzFsSUMwZzVveUo2Wkt1NWErODZJaXE1cUMzNWJ5UElEMDlQVDA5UFQwOVBUMGdLaTljY2x4dVFHbHRjRzl5ZENBbkxpOWpiMnh2Y25Nbk8xeHlYRzVBYVcxd2IzSjBJQ2N1TDNOb1lXUnZkeWM3WEhKY2JseHlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlJSHRjY2x4dUlDQndiM05wZEdsdmJqb2dabWw0WldRN1hISmNiaUFnZWkxcGJtUmxlRG9nT1RrNU9UazdYSEpjYmlBZ2JXRnlaMmx1T2lBd08xeHlYRzRnSUhSeVlXNXphWFJwYjI0dFpIVnlZWFJwYjI0NklEQXVNM003WEhKY2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNjbHh1WEhKY2JpQWdKbDlmWW5WMGRHOXVJSHRjY2x4dUlDQWdJQzV6YUdGa2IzZGZiR2xuYUhSZmNtVm5kV3hoY2lncE8xeHlYRzRnSUNBZ2NHOXphWFJwYjI0NklISmxiR0YwYVhabE8xeHlYRzRnSUNBZ2VpMXBibVJsZURvZ01UdGNjbHh1SUNBZ0lHMWhjbWRwYmpvZ01UQndlRHRjY2x4dUlDQWdJSGRwWkhSb09pQXpObkI0TzF4eVhHNGdJQ0FnYUdWcFoyaDBPaUF6Tm5CNE8xeHlYRzRnSUNBZ1ltOXlaR1Z5T2lBeGNIZ2djMjlzYVdRZ1FIQnlhVzFoY25sZlltOXlaR1Z5WDJOdmJHOXlPMXh5WEc0Z0lDQWdZbTl5WkdWeUxYSmhaR2wxY3pvZ00zQjRPMXh5WEc0Z0lDQWdZbTk0TFhOcGVtbHVaem9nWW05eVpHVnlMV0p2ZUR0Y2NseHVJQ0FnSUdKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUVCM2FHbDBaVHRjY2x4dUlDQWdJR04xY25OdmNqb2djRzlwYm5SbGNqdGNjbHh1SUNBZ0lIUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdGNjbHh1SUNBZ0lHTnZiRzl5T2lCQWMyVmpiMjVrWVhKNVgzUmxlSFJmWTI5c2IzSTdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzVjY2x4dUlDQWdJQ1k2YUc5MlpYSWdlMXh5WEc0Z0lDQWdJQ0JqYjJ4dmNqb2dRSE4xWTJObGMzTmZZMjlzYjNJN1hISmNiaUFnSUNBZ0lHSnZjbVJsY2kxamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQjlYSEpjYmx4eVhHNGdJQ0FnSmk1b2FXUmxJSHRjY2x4dUlDQWdJQ0FnWkdsemNHeGhlVG9nYm05dVpUdGNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZYMkZ1WTJodmNpQjdYSEpjYmlBZ0lDQW1PbXhwYm1zc1hISmNiaUFnSUNBbU9uWnBjMmwwWldRc1hISmNiaUFnSUNBbU9taHZkbVZ5SUh0Y2NseHVJQ0FnSUNBZ1kyOXNiM0k2SUVCbWIzVnlkR2hmZEdWNGRGOWpiMnh2Y2p0Y2NseHVJQ0FnSUNBZ2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPMXh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUNZNmFHOTJaWElnZTF4eVhHNGdJQ0FnSUNCamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMTlwWTI5dUlIdGNjbHh1SUNBZ0lIQnZjMmwwYVc5dU9pQmhZbk52YkhWMFpUdGNjbHh1SUNBZ0lIb3RhVzVrWlhnNklESTdYSEpjYmlBZ0lDQjBiM0E2SURVd0pUdGNjbHh1SUNBZ0lHeGxablE2SURVd0pUdGNjbHh1SUNBZ0lIZHBaSFJvT2lBeU1IQjRPMXh5WEc0Z0lDQWdhR1ZwWjJoME9pQXlNSEI0TzF4eVhHNGdJQ0FnZEhKaGJuTm1iM0p0T2lCMGNtRnVjMnhoZEdVb0xUVXdKU3dnTFRVd0pTazdYSEpjYmlBZ0lDQm1hV3hzT2lCamRYSnlaVzUwWTI5c2IzSTdYSEpjYmlBZ0lDQnZkbVZ5Wm14dmR6b2dhR2xrWkdWdU8xeHlYRzRnSUgxY2NseHVYSEpjYmlBZ0psOWhZM1JwZG1VZ2UxeHlYRzRnSUNBZ0ppNXZkWFJzYVc1bExYUnZiMnhpWVhJZ2UxeHlYRzRnSUNBZ0lDQW1YMTlpZFhSMGIyNGdlMXh5WEc0Z0lDQWdJQ0FnSUdOdmJHOXlPaUJBZDJocGRHVTdYSEpjYmlBZ0lDQWdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUhOMVkyTmxjM05mWTI5c2IzSTdYSEpjYmlBZ0lDQWdJQ0FnWW05eVpHVnlMV052Ykc5eU9pQkFjM1ZqWTJWemMxOWpiMnh2Y2p0Y2NseHVYSEpjYmlBZ0lDQWdJQ0FnSmpwb2IzWmxjaUI3WEhKY2JpQWdJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ1FIZG9hWFJsTzF4eVhHNGdJQ0FnSUNBZ0lIMWNjbHh1SUNBZ0lDQWdmVnh5WEc0Z0lDQWdmVnh5WEc1Y2NseHVJQ0FnSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjaUI3WEhKY2JpQWdJQ0FnSUNZNmJHbHVheXhjY2x4dUlDQWdJQ0FnSmpwMmFYTnBkR1ZrTEZ4eVhHNGdJQ0FnSUNBbU9taHZkbVZ5SUh0Y2NseHVJQ0FnSUNBZ0lDQmpiMnh2Y2pvZ1FIZG9hWFJsTzF4eVhHNGdJQ0FnSUNCOVhISmNiaUFnSUNCOVhISmNiaUFnZlZ4eVhHNWNjbHh1SUNBbVgzSnZkVzVrWldRZ2UxeHlYRzRnSUNBZ0ppNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2YmlCN1hISmNiaUFnSUNBZ0lHSnZjbVJsY2kxeVlXUnBkWE02SURFNGNIZzdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YMlJwYzJGaWJHVmtJSHRjY2x4dUlDQWdJQ1l1YjNWMGJHbHVaUzEwYjI5c1ltRnlMRnh5WEc0Z0lDQWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNpQjdYSEpjYmlBZ0lDQWdJQ1pmWDJGdVkyaHZjanBzYVc1ckxGeHlYRzRnSUNBZ0lDQW1YMTloYm1Ob2IzSTZkbWx6YVhSbFpDeGNjbHh1SUNBZ0lDQWdKbDlmWVc1amFHOXlPbWh2ZG1WeUxGeHlYRzRnSUNBZ0lDQW1YMTlpZFhSMGIyNGdlMXh5WEc0Z0lDQWdJQ0FnSUdOMWNuTnZjam9nYm05MExXRnNiRzkzWldRN1hISmNiaUFnSUNBZ0lDQWdZMjlzYjNJNklFQm1iM1Z5ZEdoZmRHVjRkRjlqYjJ4dmNqdGNjbHh1WEhKY2JpQWdJQ0FnSUNBZ0pqcG9iM1psY2lCN1hISmNiaUFnSUNBZ0lDQWdJQ0JqYjJ4dmNqb2dRR1p2ZFhKMGFGOTBaWGgwWDJOdmJHOXlPMXh5WEc0Z0lDQWdJQ0FnSUgxY2NseHVJQ0FnSUNBZ2ZWeHlYRzVjY2x4dUlDQWdJQ0FnSmw5ZlluVjBkRzl1SUh0Y2NseHVJQ0FnSUNBZ0lDQmlZV05yWjNKdmRXNWtMV052Ykc5eU9pQkFaR2x6WVdKc1pXUmZZbWRmWTI5c2IzSTdYSEpjYmlBZ0lDQWdJSDFjY2x4dUlDQWdJSDFjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmZEhSaUxGeHlYRzRnSUNaZlluUjBJSHRjY2x4dUlDQWdJR3hsWm5RNklEVXdKVHRjY2x4dUlDQWdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV0NndE5UQWxLVHRjY2x4dVhISmNiaUFnSUNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aWRYUjBiMjRnZTF4eVhHNGdJQ0FnSUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYSEpjYmlBZ0lDQjlYSEpjYmlBZ2ZWeHlYRzVjY2x4dUlDQW1YM1IwWWlCN1hISmNiaUFnSUNCMGIzQTZJREV5Y0hnN1hISmNibHh5WEc0Z0lDQWdKaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZhR2xrWkdWdUlIdGNjbHh1SUNBZ0lDQWdkRzl3T2lBdE5UWndlRHRjY2x4dUlDQWdJSDFjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmWW5SMElIdGNjbHh1SUNBZ0lHSnZkSFJ2YlRvZ01USndlRHRjY2x4dVhISmNiaUFnSUNBbUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRnZTF4eVhHNGdJQ0FnSUNCaWIzUjBiMjA2SUMwMU5uQjRPMXh5WEc0Z0lDQWdmVnh5WEc0Z0lIMWNjbHh1WEhKY2JpQWdKbDl5ZEd3c1hISmNiaUFnSmw5c2RISWdlMXh5WEc0Z0lDQWdkSEpoYm5ObWIzSnRPaUIwY21GdWMyeGhkR1ZaS0MwMU1DVXBPMXh5WEc0Z0lDQWdkMmxrZEdnNklEVTJjSGc3WEhKY2JpQWdmVnh5WEc1Y2NseHVJQ0FtWDNKMGJDQjdYSEpjYmlBZ0lDQjBiM0E2SURVd0pUdGNjbHh1SUNBZ0lISnBaMmgwT2lBeE1uQjRPMXh5WEc1Y2NseHVJQ0FnSUNZdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEhKY2JpQWdJQ0FnSUhKcFoyaDBPaUF0T0Rad2VEdGNjbHh1SUNBZ0lIMWNjbHh1SUNCOVhISmNibHh5WEc0Z0lDWmZiSFJ5SUh0Y2NseHVJQ0FnSUhSdmNEb2dOVEFsTzF4eVhHNGdJQ0FnYkdWbWREb2dNVEp3ZUR0Y2NseHVYSEpjYmlBZ0lDQW1MbTkxZEd4cGJtVXRkRzl2YkdKaGNsOW9hV1JrWlc0Z2UxeHlYRzRnSUNBZ0lDQnNaV1owT2lBdE9EWndlRHRjY2x4dUlDQWdJSDFjY2x4dUlDQjlYSEpjYmx4eVhHNGdJQ1pmZEhSaUxGeHlYRzRnSUNaZmNuUnNMRnh5WEc0Z0lDWmZZblIwTEZ4eVhHNGdJQ1pmYkhSeUlIdGNjbHh1SUNBZ0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2YmlCN1hISmNiaUFnSUNBZ0lDWXViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYmlCN1hISmNiaUFnSUNBZ0lDQWdaR2x6Y0d4aGVUb2dibTl1WlR0Y2NseHVJQ0FnSUNBZ2ZWeHlYRzRnSUNBZ2ZWeHlYRzRnSUgxY2NseHVmVnh5WEc0aUxDSXZLaXBjY2x4dUlDb2djMmhoWkc5M0xteGxjM01nTFNEcG1MVGx2Ykhtb0xmbHZJL29ycjdudmE0Z2JXbDRhVzU0SU9XSHZlYVZzRnh5WEc0Z0tpQTlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVhISmNiaUFxSUVOeVpXRjBaV1FnUW5rNklGbGhiMmhoYVhocFlXOWNjbHh1SUNvZ1ZYQmtZWFJsT2lBeU1ESXlMak11TWpCY2NseHVJQ292WEhKY2JrQnBiWEJ2Y25RZ0p5NHZZMjlzYjNKekp6dGNjbHh1WEhKY2JpOHFJRDA5UFQwOVBTRHBtTFRsdmJIbW9MZmx2SS9vcnI3bnZhN2xoNzNtbGJBZ1BUMDlQVDA5SUNvdlhISmNiaTV6YUdGa2IzY29RRzltWm5ObGREb2dNQ0F3SURad2VDQXhjSGdzSUVCamIyeHZjam9nUUhCeWFXMWhjbmxmWW05eVpHVnlYMk52Ykc5eUtTQjdYSEpjYmlBZ1ltOTRMWE5vWVdSdmR6b2dRRzltWm5ObGRDQkFZMjlzYjNJN1hISmNibjFjY2x4dVhISmNiaTV6YUdGa2IzZGZjbVZuZFd4aGNpaEFZMjlzYjNJNklFQndjbWx0WVhKNVgySnZjbVJsY2w5amIyeHZjaWtnZTF4eVhHNGdJQzV6YUdGa2IzY29NQ0F3SURad2VDQXhjSGdzSUVCamIyeHZjaWs3WEhKY2JuMWNjbHh1WEhKY2JpNXphR0ZrYjNkZmJHRnlaMlVvUUdOdmJHOXlPaUJBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJcElIdGNjbHh1SUNBdWMyaGhaRzkzS0RBZ01DQXhNbkI0SURGd2VDd2dRR052Ykc5eUtUdGNjbHh1ZlZ4eVhHNWNjbHh1TG5Ob1lXUnZkMTlzYVdkb2RGOXlaV2QxYkdGeUtDa2dlMXh5WEc0Z0lDNXphR0ZrYjNkZmNtVm5kV3hoY2lncE8xeHlYRzU5WEhKY2JseHlYRzR1YzJoaFpHOTNYMnhwWjJoMFgyeGhjbWRsS0NrZ2UxeHlYRzRnSUM1emFHRmtiM2RmYkdGeVoyVW9LVHRjY2x4dWZWeHlYRzVjY2x4dUxuTm9ZV1J2ZDE5a1lYSnJYM0psWjNWc1lYSW9LU0I3WEhKY2JpQWdMbk5vWVdSdmQxOXlaV2QxYkdGeUtFQnpaV052Ym1SaGNubGZZbTl5WkdWeVgyTnZiRzl5S1R0Y2NseHVmVnh5WEc1Y2NseHVMbk5vWVdSdmQxOWtZWEpyWDJ4aGNtZGxLQ2tnZTF4eVhHNGdJQzV6YUdGa2IzZGZiR0Z5WjJVb1FITmxZMjl1WkdGeWVWOWliM0prWlhKZlkyOXNiM0lwTzF4eVhHNTlYSEpjYmlKZGZRPT0gKi9cbiJdLCJmaWxlIjoidG9vbGJhci5taW4uY3NzIn0= */ +/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJ0b29sYmFyLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiA9PT09PT09PT09IGJ1dHRvbnMudGhlbWUgLSDmjInpkq7lr7zoiKrmoLflvI8gPT09PT09PT09PSAqL1xuLyogPT09PT09PT09PSBjb2xvcnMudGhlbWUgLSDln7rnoYDpopzoibLlj5jph4/pm4blkIggPT09PT09PT09PSAqL1xuLyoqXG4gKiBzaGFkb3cubGVzcyAtIOmYtOW9seagt+W8j+iuvue9riBtaXhpbngg5Ye95pWwXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDcmVhdGVkIEJ5OiBZYW9oYWl4aWFvXG4gKiBVcGRhdGU6IDIwMjIuMy4yMFxuICovXG4vKiA9PT09PT0g6Zi05b2x5qC35byP6K6+572u5Ye95pWwID09PT09PSAqL1xuLm91dGxpbmUtdG9vbGJhciB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogOTk5OTk7XG4gIG1hcmdpbjogMDtcbiAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjNzO1xuICAgICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuM3M7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA2cHggMXB4ICNkY2RmZTY7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCAwIDZweCAxcHggI2RjZGZlNjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAxO1xuICBtYXJnaW46IDEwcHg7XG4gIHdpZHRoOiAzNnB4O1xuICBoZWlnaHQ6IDM2cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkY2RmZTY7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogIzU1NTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xuICBib3JkZXItY29sb3I6ICMwNTg5NDI7XG59XG4ub3V0bGluZS10b29sYmFyX19idXR0b24uaGlkZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4ub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluayxcbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyIHtcbiAgY29sb3I6ICM5OTk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3ZlciB7XG4gIGNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9faWNvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMjtcbiAgdG9wOiA1MCU7XG4gIGxlZnQ6IDUwJTtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMjBweDtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgZmlsbDogY3VycmVudGNvbG9yO1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzA1ODk0MjtcbiAgYm9yZGVyLWNvbG9yOiAjMDU4OTQyO1xufVxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfYWN0aXZlIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9hY3RpdmUgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQsXG4ub3V0bGluZS10b29sYmFyX2FjdGl2ZSAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcm91bmRlZC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGJvcmRlci1yYWRpdXM6IDE4cHg7XG59XG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmxpbmssXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjp2aXNpdGVkLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZCxcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b24sXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIGNvbG9yOiAjOTk5O1xufVxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZC5vdXRsaW5lLXRvb2xiYXJfX2FuY2hvcjpsaW5rOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6bGluazpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19hbmNob3I6dmlzaXRlZDpob3Zlcixcbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQgLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOnZpc2l0ZWQ6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYW5jaG9yOmhvdmVyOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19hbmNob3I6aG92ZXI6aG92ZXIsXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uOmhvdmVyLFxuLm91dGxpbmUtdG9vbGJhcl9kaXNhYmxlZCAub3V0bGluZS10b29sYmFyX19idXR0b246aG92ZXIge1xuICBjb2xvcjogIzk5OTtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfZGlzYWJsZWQub3V0bGluZS10b29sYmFyX19idXR0b24sXG4ub3V0bGluZS10b29sYmFyX2Rpc2FibGVkIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG59XG4ub3V0bGluZS10b29sYmFyX3R0Yixcbi5vdXRsaW5lLXRvb2xiYXJfYnR0IHtcbiAgbGVmdDogNTAlO1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiAub3V0bGluZS10b29sYmFyX19idXR0b24sXG4ub3V0bGluZS10b29sYmFyX2J0dCAub3V0bGluZS10b29sYmFyX19idXR0b24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ub3V0bGluZS10b29sYmFyX3R0YiB7XG4gIHRvcDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICB0b3A6IC01NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9idHQge1xuICBib3R0b206IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX2J0dC5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgYm90dG9tOiAtNTZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfcnRsLFxuLm91dGxpbmUtdG9vbGJhcl9sdHIge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIHdpZHRoOiA1NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9ydGwge1xuICB0b3A6IDUwJTtcbiAgcmlnaHQ6IDEycHg7XG59XG4ub3V0bGluZS10b29sYmFyX3J0bC5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgcmlnaHQ6IC04NnB4O1xufVxuLm91dGxpbmUtdG9vbGJhcl9sdHIge1xuICB0b3A6IDUwJTtcbiAgbGVmdDogMTJweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfbHRyLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4ge1xuICBsZWZ0OiAtODZweDtcbn1cbi5vdXRsaW5lLXRvb2xiYXJfdHRiIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuLFxuLm91dGxpbmUtdG9vbGJhcl9ydGwgLm91dGxpbmUtdG9vbGJhcl9fYnV0dG9uLm91dGxpbmUtdG9vbGJhcl9oaWRkZW4sXG4ub3V0bGluZS10b29sYmFyX2J0dCAub3V0bGluZS10b29sYmFyX19idXR0b24ub3V0bGluZS10b29sYmFyX2hpZGRlbixcbi5vdXRsaW5lLXRvb2xiYXJfbHRyIC5vdXRsaW5lLXRvb2xiYXJfX2J1dHRvbi5vdXRsaW5lLXRvb2xiYXJfaGlkZGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx6eHBibkIxZENCamMzTWdORDRpTENKMGIyOXNZbUZ5TG14bGMzTWlMQ0p6YUdGa2IzY3ViR1Z6Y3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeHJSRUZCYTBRN1FVRkRiRVFzYlVSQlFXMUVPMEZCUTI1RU96czdPenRIUVV0SE8wRkJRMGdzTkVKQlFUUkNPMEZEU2pWQ08wVkJRMFVzWjBKQlFVRTdSVUZEUVN4bFFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxHdERRVUZCTzFWQlFVRXNNRUpCUVVFN1JVRkRRU3hwUWtGQlFUdERSRTFFTzBGRFNrTTdSVU5FUVN4M1EwRkJRVHRWUVVGQkxHZERRVUZCTzBWRVIwVXNiVUpCUVVFN1JVRkRRU3hYUVVGQk8wVkJRMEVzWVVGQlFUdEZRVU5CTEZsQlFVRTdSVUZEUVN4aFFVRkJPMFZCUTBFc01FSkJRVUU3UlVGRFFTeHRRa0ZCUVR0RlFVTkJMQ3RDUVVGQk8xVkJRVUVzZFVKQlFVRTdSVUZEUVN4MVFrRkJRVHRGUVVOQkxHZENRVUZCTzBWQlEwRXNiVUpCUVVFN1JVRkRRU3haUVVGQk8wVkJRMEVzYVVKQlFVRTdRMFJOU0R0QlEwcEhPMFZCUTBVc1pVRkJRVHRGUVVOQkxITkNRVUZCTzBORVRVdzdRVU5JUnp0RlFVTkZMR05CUVVFN1EwUkxURHRCUTBGSE96czdSVUZIUlN4WlFVRkJPMFZCUTBFc2MwSkJRVUU3UTBSRlREdEJRME5ITzBWQlEwVXNaVUZCUVR0RFJFTk1PMEZEUjBNN1JVRkRSU3h0UWtGQlFUdEZRVU5CTEZkQlFVRTdSVUZEUVN4VFFVRkJPMFZCUTBFc1ZVRkJRVHRGUVVOQkxGbEJRVUU3UlVGRFFTeGhRVUZCTzBWQlEwRXNlVU5CUVVFN1ZVRkJRU3hwUTBGQlFUdEZRVU5CTEcxQ1FVRkJPMFZCUTBFc2FVSkJRVUU3UTBSRVNEdEJRMDFMTzBWQlEwVXNXVUZCUVR0RlFVTkJMREJDUVVGQk8wVkJRMEVzYzBKQlFVRTdRMFJLVUR0QlEwMVBPMFZCUTBVc1dVRkJRVHREUkVwVU8wRkRWVXM3T3p0RlFVZEZMRmxCUVVFN1EwUlNVRHRCUTJOSE8wVkJRMFVzYjBKQlFVRTdRMFJhVER0QlEyMUNTenM3T3pzN096czdSVUZKUlN4dlFrRkJRVHRGUVVOQkxGbEJRVUU3UTBSaVVEdEJRMlZQT3pzN096czdPenRGUVVORkxGbEJRVUU3UTBST1ZEdEJRMVZMT3p0RlFVTkZMREJDUVVGQk8wTkVVRkE3UVVOWlF6czdSVUZGUlN4VlFVRkJPMFZCUTBFc2IwTkJRVUU3VlVGQlFTdzBRa0ZCUVR0RFJGWklPMEZEVDBNN08wVkJUVWtzYzBKQlFVRTdRMFJVVER0QlEyRkRPMFZCUTBVc1ZVRkJRVHREUkZoSU8wRkRZVWM3UlVGRFJTeFhRVUZCTzBORVdFdzdRVU5sUXp0RlFVTkZMR0ZCUVVFN1EwUmlTRHRCUTJWSE8wVkJRMFVzWTBGQlFUdERSR0pNTzBGRGFVSkRPenRGUVVWRkxHOURRVUZCTzFWQlFVRXNORUpCUVVFN1JVRkRRU3haUVVGQk8wTkVaa2c3UVVOclFrTTdSVUZEUlN4VFFVRkJPMFZCUTBFc1dVRkJRVHREUkdoQ1NEdEJRMnRDUnp0RlFVTkZMR0ZCUVVFN1EwUm9Ra3c3UVVOdlFrTTdSVUZEUlN4VFFVRkJPMFZCUTBFc1YwRkJRVHREUkd4Q1NEdEJRMjlDUnp0RlFVTkZMRmxCUVVFN1EwUnNRa3c3UVVNeVFrczdPenM3UlVGRFJTeGpRVUZCTzBORWRFSlFJaXdpWm1sc1pTSTZJblJ2YjJ4aVlYSXVZM056SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b2dQVDA5UFQwOVBUMDlQU0JpZFhSMGIyNXpMblJvWlcxbElDMGc1b3lKNlpLdTVhKzg2SWlxNXFDMzVieVBJRDA5UFQwOVBUMDlQVDBnS2k5Y2JpOHFJRDA5UFQwOVBUMDlQVDBnWTI5c2IzSnpMblJvWlcxbElDMGc1Wis2NTZHQTZhS2M2SW15NVkrWTZZZVA2WnVHNVpDSUlEMDlQVDA5UFQwOVBUMGdLaTljYmk4cUtseHVJQ29nYzJoaFpHOTNMbXhsYzNNZ0xTRHBtTFRsdmJIbW9MZmx2SS9vcnI3bnZhNGdiV2w0YVc1NElPV0h2ZWFWc0Z4dUlDb2dQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBWeHVJQ29nUTNKbFlYUmxaQ0JDZVRvZ1dXRnZhR0ZwZUdsaGIxeHVJQ29nVlhCa1lYUmxPaUF5TURJeUxqTXVNakJjYmlBcUwxeHVMeW9nUFQwOVBUMDlJT21ZdE9XOXNlYWd0K1c4aitpdXZ1ZTlydVdIdmVhVnNDQTlQVDA5UFQwZ0tpOWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSWdlMXh1SUNCd2IzTnBkR2x2YmpvZ1ptbDRaV1E3WEc0Z0lIb3RhVzVrWlhnNklEazVPVGs1TzF4dUlDQnRZWEpuYVc0NklEQTdYRzRnSUhSeVlXNXphWFJwYjI0dFpIVnlZWFJwYjI0NklEQXVNM003WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNGdlMXh1SUNCaWIzZ3RjMmhoWkc5M09pQXdJREFnTm5CNElERndlQ0FqWkdOa1ptVTJPMXh1SUNCd2IzTnBkR2x2YmpvZ2NtVnNZWFJwZG1VN1hHNGdJSG90YVc1a1pYZzZJREU3WEc0Z0lHMWhjbWRwYmpvZ01UQndlRHRjYmlBZ2QybGtkR2c2SURNMmNIZzdYRzRnSUdobGFXZG9kRG9nTXpad2VEdGNiaUFnWW05eVpHVnlPaUF4Y0hnZ2MyOXNhV1FnSTJSalpHWmxOanRjYmlBZ1ltOXlaR1Z5TFhKaFpHbDFjem9nTTNCNE8xeHVJQ0JpYjNndGMybDZhVzVuT2lCaWIzSmtaWEl0WW05NE8xeHVJQ0JpWVdOclozSnZkVzVrTFdOdmJHOXlPaUFqWm1abU8xeHVJQ0JqZFhKemIzSTZJSEJ2YVc1MFpYSTdYRzRnSUhSbGVIUXRZV3hwWjI0NklHTmxiblJsY2p0Y2JpQWdZMjlzYjNJNklDTTFOVFU3WEc0Z0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNDZhRzkyWlhJZ2UxeHVJQ0JqYjJ4dmNqb2dJekExT0RrME1qdGNiaUFnWW05eVpHVnlMV052Ykc5eU9pQWpNRFU0T1RReU8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVMbWhwWkdVZ2UxeHVJQ0JrYVhOd2JHRjVPaUJ1YjI1bE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWVc1amFHOXlPbXhwYm1zc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmRtbHphWFJsWkN4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBak9UazVPMXh1SUNCMFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2YUc5MlpYSWdlMXh1SUNCamIyeHZjam9nSXpBMU9EazBNanRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgybGpiMjRnZTF4dUlDQndiM05wZEdsdmJqb2dZV0p6YjJ4MWRHVTdYRzRnSUhvdGFXNWtaWGc2SURJN1hHNGdJSFJ2Y0RvZ05UQWxPMXh1SUNCc1pXWjBPaUExTUNVN1hHNGdJSGRwWkhSb09pQXlNSEI0TzF4dUlDQm9aV2xuYUhRNklESXdjSGc3WEc0Z0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxLQzAxTUNVc0lDMDFNQ1VwTzF4dUlDQm1hV3hzT2lCamRYSnlaVzUwWTI5c2IzSTdYRzRnSUc5MlpYSm1iRzkzT2lCb2FXUmtaVzQ3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyRmpkR2wyWlM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaUI3WEc0Z0lHTnZiRzl5T2lBalptWm1PMXh1SUNCaVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lBak1EVTRPVFF5TzF4dUlDQmliM0prWlhJdFkyOXNiM0k2SUNNd05UZzVOREk3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyRmpkR2wyWlM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZianBvYjNabGNpQjdYRzRnSUdOdmJHOXlPaUFqWm1abU8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDloWTNScGRtVWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9teHBibXNzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJGamRHbDJaU0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTloYm1Ob2IzSTZkbWx6YVhSbFpDeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZZV04wYVhabElDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBalptWm1PMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5eWIzVnVaR1ZrTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1ltOXlaR1Z5TFhKaFpHbDFjem9nTVRod2VEdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTloYm1Ob2IzSTZiR2x1YXl4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlpHbHpZV0pzWldRZ0xtOTFkR3hwYm1VdGRHOXZiR0poY2w5ZllXNWphRzl5T214cGJtc3NYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9uWnBjMmwwWldRc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2pwMmFYTnBkR1ZrTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJGdVkyaHZjanBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9taHZkbVZ5TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1FnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1kzVnljMjl5T2lCdWIzUXRZV3hzYjNkbFpEdGNiaUFnWTI5c2IzSTZJQ001T1RrN1hHNTlYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZVzVqYUc5eU9teHBibXM2YUc5MlpYSXNYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcHNhVzVyT21odmRtVnlMRnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDlrYVhOaFlteGxaQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcDJhWE5wZEdWa09taHZkbVZ5TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDE5aGJtTm9iM0k2ZG1semFYUmxaRHBvYjNabGNpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZaR2x6WVdKc1pXUXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWhibU5vYjNJNmFHOTJaWEk2YUc5MlpYSXNYRzR1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMlJwYzJGaWJHVmtJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkZ1WTJodmNqcG9iM1psY2pwb2IzWmxjaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNDZhRzkyWlhJc1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyUnBjMkZpYkdWa0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2Ympwb2IzWmxjaUI3WEc0Z0lHTnZiRzl5T2lBak9UazVPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5a2FYTmhZbXhsWkM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaXhjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWkdsellXSnNaV1FnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVJSHRjYmlBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWTFaalZtTlR0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZkSFJpTEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5aWRIUWdlMXh1SUNCc1pXWjBPaUExTUNVN1hHNGdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV0NndE5UQWxLVHRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmRIUmlJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpeGNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZZblIwSUM1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWDJKMWRIUnZiaUI3WEc0Z0lHUnBjM0JzWVhrNklHbHViR2x1WlMxaWJHOWphenRjYm4xY2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmRIUmlJSHRjYmlBZ2RHOXdPaUF4TW5CNE8xeHVmVnh1TG05MWRHeHBibVV0ZEc5dmJHSmhjbDkwZEdJdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEc0Z0lIUnZjRG9nTFRVMmNIZzdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJKMGRDQjdYRzRnSUdKdmRIUnZiVG9nTVRKd2VEdGNibjFjYmk1dmRYUnNhVzVsTFhSdmIyeGlZWEpmWW5SMExtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRnZTF4dUlDQmliM1IwYjIwNklDMDFObkI0TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOXlkR3dzWEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJ4MGNpQjdYRzRnSUhSeVlXNXpabTl5YlRvZ2RISmhibk5zWVhSbFdTZ3ROVEFsS1R0Y2JpQWdkMmxrZEdnNklEVTJjSGc3WEc1OVhHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzSjBiQ0I3WEc0Z0lIUnZjRG9nTlRBbE8xeHVJQ0J5YVdkb2REb2dNVEp3ZUR0Y2JuMWNiaTV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZjblJzTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlvYVdSa1pXNGdlMXh1SUNCeWFXZG9kRG9nTFRnMmNIZzdYRzU5WEc0dWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJ4MGNpQjdYRzRnSUhSdmNEb2dOVEFsTzF4dUlDQnNaV1owT2lBeE1uQjRPMXh1ZlZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5c2RISXViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYmlCN1hHNGdJR3hsWm5RNklDMDRObkI0TzF4dWZWeHVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOTBkR0lnTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlmWW5WMGRHOXVMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOW9hV1JrWlc0c1hHNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgzSjBiQ0F1YjNWMGJHbHVaUzEwYjI5c1ltRnlYMTlpZFhSMGIyNHViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYml4Y2JpNXZkWFJzYVc1bExYUnZiMnhpWVhKZlluUjBJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpNXZkWFJzYVc1bExYUnZiMnhpWVhKZmFHbGtaR1Z1TEZ4dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5c2RISWdMbTkxZEd4cGJtVXRkRzl2YkdKaGNsOWZZblYwZEc5dUxtOTFkR3hwYm1VdGRHOXZiR0poY2w5b2FXUmtaVzRnZTF4dUlDQmthWE53YkdGNU9pQnViMjVsTzF4dWZWeHVJaXdpTHlvZ1BUMDlQVDA5UFQwOVBTQmlkWFIwYjI1ekxuUm9aVzFsSUMwZzVveUo2Wkt1NWErODZJaXE1cUMzNWJ5UElEMDlQVDA5UFQwOVBUMGdLaTljYmtCcGJYQnZjblFnSnk0dlkyOXNiM0p6Snp0Y2JrQnBiWEJ2Y25RZ0p5NHZjMmhoWkc5M0p6dGNibHh1TG05MWRHeHBibVV0ZEc5dmJHSmhjaUI3WEc0Z0lIQnZjMmwwYVc5dU9pQm1hWGhsWkR0Y2JpQWdlaTFwYm1SbGVEb2dPVGs1T1RrN1hHNGdJRzFoY21kcGJqb2dNRHRjYmlBZ2RISmhibk5wZEdsdmJpMWtkWEpoZEdsdmJqb2dNQzR6Y3p0Y2JpQWdiM1psY21ac2IzYzZJR2hwWkdSbGJqdGNibHh1SUNBbVgxOWlkWFIwYjI0Z2UxeHVJQ0FnSUM1emFHRmtiM2RmYkdsbmFIUmZjbVZuZFd4aGNpZ3BPMXh1SUNBZ0lIQnZjMmwwYVc5dU9pQnlaV3hoZEdsMlpUdGNiaUFnSUNCNkxXbHVaR1Y0T2lBeE8xeHVJQ0FnSUcxaGNtZHBiam9nTVRCd2VEdGNiaUFnSUNCM2FXUjBhRG9nTXpad2VEdGNiaUFnSUNCb1pXbG5hSFE2SURNMmNIZzdYRzRnSUNBZ1ltOXlaR1Z5T2lBeGNIZ2djMjlzYVdRZ1FIQnlhVzFoY25sZlltOXlaR1Z5WDJOdmJHOXlPMXh1SUNBZ0lHSnZjbVJsY2kxeVlXUnBkWE02SUROd2VEdGNiaUFnSUNCaWIzZ3RjMmw2YVc1bk9pQmliM0prWlhJdFltOTRPMXh1SUNBZ0lHSmhZMnRuY205MWJtUXRZMjlzYjNJNklFQjNhR2wwWlR0Y2JpQWdJQ0JqZFhKemIzSTZJSEJ2YVc1MFpYSTdYRzRnSUNBZ2RHVjRkQzFoYkdsbmJqb2dZMlZ1ZEdWeU8xeHVJQ0FnSUdOdmJHOXlPaUJBYzJWamIyNWtZWEo1WDNSbGVIUmZZMjlzYjNJN1hHNGdJQ0FnYjNabGNtWnNiM2M2SUdocFpHUmxianRjYmx4dUlDQWdJQ1k2YUc5MlpYSWdlMXh1SUNBZ0lDQWdZMjlzYjNJNklFQnpkV05qWlhOelgyTnZiRzl5TzF4dUlDQWdJQ0FnWW05eVpHVnlMV052Ykc5eU9pQkFjM1ZqWTJWemMxOWpiMnh2Y2p0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0FtTG1ocFpHVWdlMXh1SUNBZ0lDQWdaR2x6Y0d4aGVUb2dibTl1WlR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgxOWhibU5vYjNJZ2UxeHVJQ0FnSUNZNmJHbHVheXhjYmlBZ0lDQW1PblpwYzJsMFpXUXNYRzRnSUNBZ0pqcG9iM1psY2lCN1hHNGdJQ0FnSUNCamIyeHZjam9nUUdadmRYSjBhRjkwWlhoMFgyTnZiRzl5TzF4dUlDQWdJQ0FnZEdWNGRDMWtaV052Y21GMGFXOXVPaUJ1YjI1bE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUNZNmFHOTJaWElnZTF4dUlDQWdJQ0FnWTI5c2IzSTZJRUJ6ZFdOalpYTnpYMk52Ykc5eU8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDWmZYMmxqYjI0Z2UxeHVJQ0FnSUhCdmMybDBhVzl1T2lCaFluTnZiSFYwWlR0Y2JpQWdJQ0I2TFdsdVpHVjRPaUF5TzF4dUlDQWdJSFJ2Y0RvZ05UQWxPMXh1SUNBZ0lHeGxablE2SURVd0pUdGNiaUFnSUNCM2FXUjBhRG9nTWpCd2VEdGNiaUFnSUNCb1pXbG5hSFE2SURJd2NIZzdYRzRnSUNBZ2RISmhibk5tYjNKdE9pQjBjbUZ1YzJ4aGRHVW9MVFV3SlN3Z0xUVXdKU2s3WEc0Z0lDQWdabWxzYkRvZ1kzVnljbVZ1ZEdOdmJHOXlPMXh1SUNBZ0lHOTJaWEptYkc5M09pQm9hV1JrWlc0N1hHNGdJSDFjYmx4dUlDQW1YMkZqZEdsMlpTQjdYRzRnSUNBZ0ppNXZkWFJzYVc1bExYUnZiMnhpWVhJZ2UxeHVJQ0FnSUNBZ0psOWZZblYwZEc5dUlIdGNiaUFnSUNBZ0lDQWdZMjlzYjNJNklFQjNhR2wwWlR0Y2JpQWdJQ0FnSUNBZ1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ1FITjFZMk5sYzNOZlkyOXNiM0k3WEc0Z0lDQWdJQ0FnSUdKdmNtUmxjaTFqYjJ4dmNqb2dRSE4xWTJObGMzTmZZMjlzYjNJN1hHNWNiaUFnSUNBZ0lDQWdKanBvYjNabGNpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5c2IzSTZJRUIzYUdsMFpUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgyRnVZMmh2Y2lCN1hHNGdJQ0FnSUNBbU9teHBibXNzWEc0Z0lDQWdJQ0FtT25acGMybDBaV1FzWEc0Z0lDQWdJQ0FtT21odmRtVnlJSHRjYmlBZ0lDQWdJQ0FnWTI5c2IzSTZJRUIzYUdsMFpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQW1YM0p2ZFc1a1pXUWdlMXh1SUNBZ0lDWXViM1YwYkdsdVpTMTBiMjlzWW1GeVgxOWlkWFIwYjI0Z2UxeHVJQ0FnSUNBZ1ltOXlaR1Z5TFhKaFpHbDFjem9nTVRod2VEdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQW1YMlJwYzJGaWJHVmtJSHRjYmlBZ0lDQW1MbTkxZEd4cGJtVXRkRzl2YkdKaGNpeGNiaUFnSUNBdWIzVjBiR2x1WlMxMGIyOXNZbUZ5SUh0Y2JpQWdJQ0FnSUNaZlgyRnVZMmh2Y2pwc2FXNXJMRnh1SUNBZ0lDQWdKbDlmWVc1amFHOXlPblpwYzJsMFpXUXNYRzRnSUNBZ0lDQW1YMTloYm1Ob2IzSTZhRzkyWlhJc1hHNGdJQ0FnSUNBbVgxOWlkWFIwYjI0Z2UxeHVJQ0FnSUNBZ0lDQmpkWEp6YjNJNklHNXZkQzFoYkd4dmQyVmtPMXh1SUNBZ0lDQWdJQ0JqYjJ4dmNqb2dRR1p2ZFhKMGFGOTBaWGgwWDJOdmJHOXlPMXh1WEc0Z0lDQWdJQ0FnSUNZNmFHOTJaWElnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZiRzl5T2lCQVptOTFjblJvWDNSbGVIUmZZMjlzYjNJN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdKbDlmWW5WMGRHOXVJSHRjYmlBZ0lDQWdJQ0FnWW1GamEyZHliM1Z1WkMxamIyeHZjam9nUUdScGMyRmliR1ZrWDJKblgyTnZiRzl5TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZmRIUmlMRnh1SUNBbVgySjBkQ0I3WEc0Z0lDQWdiR1ZtZERvZ05UQWxPMXh1SUNBZ0lIUnlZVzV6Wm05eWJUb2dkSEpoYm5Oc1lYUmxXQ2d0TlRBbEtUdGNibHh1SUNBZ0lDNXZkWFJzYVc1bExYUnZiMnhpWVhKZlgySjFkSFJ2YmlCN1hHNGdJQ0FnSUNCa2FYTndiR0Y1T2lCcGJteHBibVV0WW14dlkyczdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDkwZEdJZ2UxeHVJQ0FnSUhSdmNEb2dNVEp3ZUR0Y2JseHVJQ0FnSUNZdWIzVjBiR2x1WlMxMGIyOXNZbUZ5WDJocFpHUmxiaUI3WEc0Z0lDQWdJQ0IwYjNBNklDMDFObkI0TzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUNaZlluUjBJSHRjYmlBZ0lDQmliM1IwYjIwNklERXljSGc3WEc1Y2JpQWdJQ0FtTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlvYVdSa1pXNGdlMXh1SUNBZ0lDQWdZbTkwZEc5dE9pQXROVFp3ZUR0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBbVgzSjBiQ3hjYmlBZ0psOXNkSElnZTF4dUlDQWdJSFJ5WVc1elptOXliVG9nZEhKaGJuTnNZWFJsV1NndE5UQWxLVHRjYmlBZ0lDQjNhV1IwYURvZ05UWndlRHRjYmlBZ2ZWeHVYRzRnSUNaZmNuUnNJSHRjYmlBZ0lDQjBiM0E2SURVd0pUdGNiaUFnSUNCeWFXZG9kRG9nTVRKd2VEdGNibHh1SUNBZ0lDWXViM1YwYkdsdVpTMTBiMjlzWW1GeVgyaHBaR1JsYmlCN1hHNGdJQ0FnSUNCeWFXZG9kRG9nTFRnMmNIZzdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdKbDlzZEhJZ2UxeHVJQ0FnSUhSdmNEb2dOVEFsTzF4dUlDQWdJR3hsWm5RNklERXljSGc3WEc1Y2JpQWdJQ0FtTG05MWRHeHBibVV0ZEc5dmJHSmhjbDlvYVdSa1pXNGdlMXh1SUNBZ0lDQWdiR1ZtZERvZ0xUZzJjSGc3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnSmw5MGRHSXNYRzRnSUNaZmNuUnNMRnh1SUNBbVgySjBkQ3hjYmlBZ0psOXNkSElnZTF4dUlDQWdJQzV2ZFhSc2FXNWxMWFJ2YjJ4aVlYSmZYMkoxZEhSdmJpQjdYRzRnSUNBZ0lDQW1MbTkxZEd4cGJtVXRkRzl2YkdKaGNsOW9hV1JrWlc0Z2UxeHVJQ0FnSUNBZ0lDQmthWE53YkdGNU9pQnViMjVsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVmVnh1SWl3aUx5b3FYRzRnS2lCemFHRmtiM2N1YkdWemN5QXRJT21ZdE9XOXNlYWd0K1c4aitpdXZ1ZTlyaUJ0YVhocGJuZ2c1WWU5NXBXd1hHNGdLaUE5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlYRzRnS2lCRGNtVmhkR1ZrSUVKNU9pQlpZVzlvWVdsNGFXRnZYRzRnS2lCVmNHUmhkR1U2SURJd01qSXVNeTR5TUZ4dUlDb3ZYRzVBYVcxd2IzSjBJQ2N1TDJOdmJHOXljeWM3WEc1Y2JpOHFJRDA5UFQwOVBTRHBtTFRsdmJIbW9MZmx2SS9vcnI3bnZhN2xoNzNtbGJBZ1BUMDlQVDA5SUNvdlhHNHVjMmhoWkc5M0tFQnZabVp6WlhRNklEQWdNQ0EyY0hnZ01YQjRMQ0JBWTI5c2IzSTZJRUJ3Y21sdFlYSjVYMkp2Y21SbGNsOWpiMnh2Y2lrZ2UxeHVJQ0JpYjNndGMyaGhaRzkzT2lCQWIyWm1jMlYwSUVCamIyeHZjanRjYm4xY2JseHVMbk5vWVdSdmQxOXlaV2QxYkdGeUtFQmpiMnh2Y2pvZ1FIQnlhVzFoY25sZlltOXlaR1Z5WDJOdmJHOXlLU0I3WEc0Z0lDNXphR0ZrYjNjb01DQXdJRFp3ZUNBeGNIZ3NJRUJqYjJ4dmNpazdYRzU5WEc1Y2JpNXphR0ZrYjNkZmJHRnlaMlVvUUdOdmJHOXlPaUJBY0hKcGJXRnllVjlpYjNKa1pYSmZZMjlzYjNJcElIdGNiaUFnTG5Ob1lXUnZkeWd3SURBZ01USndlQ0F4Y0hnc0lFQmpiMnh2Y2lrN1hHNTlYRzVjYmk1emFHRmtiM2RmYkdsbmFIUmZjbVZuZFd4aGNpZ3BJSHRjYmlBZ0xuTm9ZV1J2ZDE5eVpXZDFiR0Z5S0NrN1hHNTlYRzVjYmk1emFHRmtiM2RmYkdsbmFIUmZiR0Z5WjJVb0tTQjdYRzRnSUM1emFHRmtiM2RmYkdGeVoyVW9LVHRjYm4xY2JseHVMbk5vWVdSdmQxOWtZWEpyWDNKbFozVnNZWElvS1NCN1hHNGdJQzV6YUdGa2IzZGZjbVZuZFd4aGNpaEFjMlZqYjI1a1lYSjVYMkp2Y21SbGNsOWpiMnh2Y2lrN1hHNTlYRzVjYmk1emFHRmtiM2RmWkdGeWExOXNZWEpuWlNncElIdGNiaUFnTG5Ob1lXUnZkMTlzWVhKblpTaEFjMlZqYjI1a1lYSjVYMkp2Y21SbGNsOWpiMnh2Y2lrN1hHNTlYRzRpWFgwPSAqL1xuIl0sImZpbGUiOiJ0b29sYmFyLm1pbi5jc3MifQ== */ diff --git a/toolbar.min.js.map b/toolbar.min.js.map index a1ac6564..44604075 100644 --- a/toolbar.min.js.map +++ b/toolbar.min.js.map @@ -1 +1 @@ -{"version":3,"file":"toolbar.min.js","sources":["src/utils/types/isString.js","src/utils/lang/hasOwn.js","src/utils/lang/toString.js","src/utils/types/isFunction.js","src/utils/types/isObject.js","src/base.js","src/utils/lang/extend.js","src/utils/types/isArray.js","src/utils/lang/later.js","src/utils/types/isElement.js","src/utils/types/isDOM.js","src/utils/types/isHTMLCollection.js","src/utils/types/isFragment.js","src/utils/types/isTextNode.js","src/utils/dom/createElement.js","src/utils/dom/setAttribute.js","src/utils/dom/hasClass.js","src/utils/dom/addClass.js","src/utils/dom/removeClass.js","src/utils/lang/trim.js","src/utils/dom/matches.js","src/utils/dom/getParentOrHost.js","src/utils/event/enum.js","src/utils/event/_off.js","src/utils/event/_delete.js","src/utils/event/purgeElement.js","src/utils/event/getListeners.js","src/utils/event/off.js","src/utils/event/on.js","src/utils/event/getTarget.js","src/utils/dom/resolveTextNode.js","src/utils/dom/closest.js","src/utils/observer/_subscribers.js","src/utils/observer/_hasDirectSubscribersFor.js","src/utils/observer/has.js","src/utils/observer/_hasSubscribers.js","src/utils/observer/emit.js","src/utils/types/isTypedArray.js","src/utils/icons/symbols.js","src/utils/icons/defaults.js","src/utils/icons/getSymbols.js","src/utils/icons/getSymbol.js","src/utils/icons/paint.js","src/utils/icons/add.js","src/utils/types/isSVG.js","src/utils/icons/icon.js","src/utils/icons/createElement.js","src/_createButton.js","src/toolbar.js"],"sourcesContent":["/**\r\n * 检测数据是否为 String 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} str\r\n * @returns {boolean}\r\n */\r\nconst isString = (str) => {\r\n return typeof str === 'string'\r\n}\r\n\r\nexport default isString\r\n","/**\r\n * 检测对象自身属性中是否具有指定的属性。\r\n * ========================================================================\r\n * @method hasOwn\r\n * @param {Object} obj - (必须)检测的目标对象\r\n * @param {String} prop - (必须)属性名\r\n * @returns {Boolean}\r\n */\r\nconst hasOwn = (obj, prop) => {\r\n const hasOwnProperty = Object.prototype.hasOwnProperty\r\n return obj && hasOwnProperty.call(obj, prop)\r\n}\r\n\r\nexport default hasOwn\r\n","/**\r\n * Object 对象原型上的 toString 方法\r\n * ========================================================================\r\n * @method toString\r\n * @param {*} val\r\n * @returns {string}\r\n */\r\nconst toString = (val) => {\r\n return Object.prototype.toString.apply(val)\r\n}\r\n\r\nexport default toString\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测测试数据是否为 Function 类型\r\n * ========================================================================\r\n * @method isFunction\r\n * @param {*} val - (必须)待检测的数据\r\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\r\n */\r\nconst isFunction = (val) => {\r\n return typeof val === 'function' || toString(val) === '[object Function]'\r\n}\r\n\r\nexport default isFunction\r\n","import toString from '../lang/toString'\r\nimport isFunction from '../types/isFunction'\r\n\r\n/**\r\n * 检测数据是否为 Object 类型\r\n * ========================================================================\r\n * @method isObject\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isObject = (o) => {\r\n return (\r\n (toString(o) === '[object Object]' ||\r\n typeof o === 'object' ||\r\n isFunction(o)) &&\r\n o !== null\r\n )\r\n}\r\n\r\nexport default isObject\r\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\r\n\r\n/**\r\n * 扩展对象\r\n * ========================================================================\r\n * @method extend\r\n * @param {Object} origin\r\n * @param {Object} source\r\n */\r\nconst extend = (origin, source) => {\r\n const keys = Object.keys(source)\r\n\r\n keys.forEach((prop) => {\r\n if (hasOwn(source, prop)) {\r\n origin[prop] = source[prop]\r\n }\r\n })\r\n}\r\n\r\nexport default extend\r\n","import toString from '../lang/toString'\r\n\r\n/**\r\n * 检测数据是否为 Array 类型\r\n * ========================================================================\r\n * @method isArray\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isArray = (o) => {\r\n if (Array.isArray) {\r\n return Array.isArray(o)\r\n } else {\r\n return toString(o) === '[object Array]'\r\n }\r\n}\r\n\r\nexport default isArray\r\n","import isFunction from '../types/isFunction'\r\n\r\n/**\r\n * later - 延迟执行方法\r\n * ========================================================================\r\n * @method later\r\n * @param {Function} fn\r\n * @param {Number} [delay]\r\n * @returns {number|boolean}\r\n */\r\nconst later = (fn, delay = 300) => {\r\n if (!isFunction(fn)) {\r\n return false\r\n }\r\n\r\n return setTimeout(() => {\r\n fn()\r\n }, delay)\r\n}\r\n\r\nexport default later\r\n","import isObject from './isObject'\r\n\r\n/**\r\n * 检测数据是否为 HTMLElement DOM 节点\r\n * ========================================================================\r\n * @method isElement\r\n * @param {*} o\r\n * @returns {boolean}\r\n */\r\nconst isElement = (o) => {\r\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\r\n}\r\n\r\nexport default isElement\r\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isFragment = (fragment) => {\r\n return !!(\r\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\r\n )\r\n}\r\n\r\nexport default isFragment\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","import hasOwn from '../lang/hasOwn'\r\nimport isObject from '../types/isObject'\r\nimport isString from '../types/isString'\r\nimport isArray from '../types/isArray'\r\nimport isDOM from '../types/isDOM'\r\nimport setAttribute from './setAttribute'\r\n\r\n/**\r\n * 创建 DOM 节点,并添加属性和子节点\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} tagName - 标签名称\r\n * @param {Object|Array} attrs - 属性对象或者子节点\r\n * @param {Array} [children] - 子节点数组\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (tagName, attrs, children) => {\r\n const $fragment = document.createDocumentFragment()\r\n const $el = document.createElement(tagName)\r\n const isValidChild = (child) => {\r\n return isDOM(child) || isString(child)\r\n }\r\n const append = (child) => {\r\n let $child\r\n\r\n if (!isValidChild(child)) {\r\n return false\r\n }\r\n\r\n if (isDOM(child)) {\r\n $child = child\r\n } else if (isString(child)) {\r\n $child = document.createTextNode(child)\r\n }\r\n\r\n $fragment.appendChild($child)\r\n }\r\n\r\n if (isObject(attrs)) {\r\n Object.keys(attrs).forEach((attr) => {\r\n if (hasOwn(attrs, attr)) {\r\n setAttribute($el, attr, attrs[attr])\r\n }\r\n })\r\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\r\n attrs.forEach((child) => {\r\n append(child)\r\n })\r\n }\r\n\r\n if (isArray(children)) {\r\n children.forEach((child) => {\r\n append(child)\r\n })\r\n } else {\r\n append(children)\r\n }\r\n\r\n $el.appendChild($fragment)\r\n\r\n return $el\r\n}\r\n\r\nexport default createElement\r\n","/**\r\n * 给 DOM 节点设置属性/值\r\n * ========================================================================\r\n * @method setAttribute\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} attr - 属性名称\r\n * @param {String|Number|Boolean} value - 属性值\r\n */\r\nconst setAttribute = (el, attr, value) => {\r\n let tagName = el.tagName.toLowerCase()\r\n\r\n switch (attr) {\r\n case 'style':\r\n el.style.cssText = value\r\n break\r\n case 'value':\r\n if (tagName === 'input' || tagName === 'textarea') {\r\n el.value = value\r\n } else {\r\n el.setAttribute(attr, value)\r\n }\r\n break\r\n case 'className':\r\n el.className = value\r\n break\r\n default:\r\n el.setAttribute(attr, value)\r\n break\r\n }\r\n}\r\n\r\nexport default setAttribute\r\n","import isElement from '../types/isElement'\r\n/**\r\n * 检测 DOM 节点是否包含名为 className 的样式\r\n * ========================================================================\r\n * @method hasClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst hasClass = (el, className) => {\r\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\r\n let allClass\r\n let classList\r\n\r\n if (!isElement(el)) {\r\n return false\r\n }\r\n\r\n allClass = el.className\r\n\r\n if (!allClass) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.contains) {\r\n return el.classList.contains(className)\r\n }\r\n\r\n return !!pattern.exec(allClass)\r\n}\r\n\r\nexport default hasClass\r\n","import hasClass from './hasClass'\r\n\r\n/**\r\n * 给 DOM 节点添加名为 className 的样式\r\n * ========================================================================\r\n * @method addClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst addClass = (el, className) => {\r\n let classList\r\n let allClass\r\n\r\n if (hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.add) {\r\n classList.add(className)\r\n } else {\r\n allClass = el.className\r\n allClass += allClass.length > 0 ? ' ' + className : className\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default addClass\r\n","import trim from '../lang/trim'\r\nimport hasClass from './hasClass'\r\n\r\n/**\r\n * 移除 DOM 节点的 className 样式\r\n * ========================================================================\r\n * @method removeClass\r\n * @param {HTMLElement} el - DOM 节点\r\n * @param {String} className - 样式名称\r\n * @returns {Boolean}\r\n */\r\nconst removeClass = (el, className) => {\r\n let allClass = el.className\r\n let classList\r\n\r\n if (!allClass || !hasClass(el, className)) {\r\n return false\r\n }\r\n\r\n classList = el.classList\r\n\r\n if (classList?.remove) {\r\n classList.remove(className)\r\n } else {\r\n allClass = trim(allClass.replace(className, ''))\r\n el.className = allClass\r\n }\r\n}\r\n\r\nexport default removeClass\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 清楚字符串起始位置所有的空格\r\n * ========================================================================\r\n * @method trim\r\n * @param {string} str\r\n * @returns {string|Boolean}\r\n */\r\nconst trim = (str) => {\r\n if (!isString(str)) {\r\n return false\r\n }\r\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\r\n}\r\n\r\nexport default trim\r\n","/**\r\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\r\n * ========================================================================\r\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\r\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\r\n * 标 DOM 元素是否为事件代理所期望触发的目标。\r\n * ========================================================================\r\n * @method matches\r\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\r\n * @returns {Boolean}\r\n */\r\nconst matches = (el, selector = '') => {\r\n const sel = selector.replace(/^>/i, '')\r\n\r\n if (!selector || !sel || !el) {\r\n return false\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el.matches) {\r\n return el.matches(sel)\r\n } else if (el.msMatchesSelector) {\r\n return el.msMatchesSelector(sel)\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nexport default matches\r\n","/**\r\n * 获取 DOM 元素的父节点\r\n * ========================================================================\r\n * @method getParentOrHost\r\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\r\n * @returns {*|HTMLElement}\r\n */\r\nconst getParentOrHost = (el) => {\r\n return el.host && el !== document && el.host.nodeType\r\n ? el.host\r\n : el.parentNode\r\n}\r\n\r\nexport default getParentOrHost\r\n","export const CAPTURE_EVENTS = [\r\n 'focusout',\r\n 'blur',\r\n 'focusin',\r\n 'focus',\r\n 'load',\r\n 'unload',\r\n 'mouseenter',\r\n 'mouseleave'\r\n]\r\n","import { CAPTURE_EVENTS } from './enum'\r\nimport _delete from './_delete'\r\n\r\n/**\r\n * (私有方法)取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method _off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} fn - (必须)事件处理器回调函数\r\n * @private\r\n */\r\nconst _off = (el, type, fn) => {\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n /* istanbul ignore else */\r\n if (fn._delegateListener) {\r\n fn = fn._delegateListener\r\n delete fn._delegateListener\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n _delete(el, type, fn)\r\n\r\n el.removeEventListener(type, fn, capture)\r\n}\r\n\r\nexport default _off\r\n","/**\r\n * 删除 DOM 元素缓存的 _listeners 数据\r\n * ========================================================================\r\n * @method _delete\r\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\r\n * @param {String} type - 事件类型(名称)\r\n * @param {Function} [fn] - 事件处理器回调函数\r\n */\r\nconst _delete = function (el, type, fn) {\r\n const listeners = el._listeners\r\n let index = -1\r\n\r\n if (listeners.length < 1) {\r\n return false\r\n }\r\n\r\n // 移除缓存的 _listeners 数据\r\n listeners.forEach((listener, i) => {\r\n const handler = listener.fn\r\n\r\n if (type === listener.type) {\r\n index = i\r\n\r\n if (handler === fn) {\r\n index = i\r\n }\r\n }\r\n })\r\n\r\n /* istanbul ignore else */\r\n if (index > -1) {\r\n listeners.splice(index, 1)\r\n }\r\n}\r\n\r\nexport default _delete\r\n","import isString from '../types/isString'\r\nimport isElement from '../types/isElement'\r\nimport getListeners from './getListeners'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 销毁(type 类型的)代理事件绑定\r\n * ========================================================================\r\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\r\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\r\n * ========================================================================\r\n * @method purgeElement\r\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\r\n * @param {String|Boolean} type - (必须)事件类型\r\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\r\n */\r\nconst purgeElement = function (el, type, recurse = false) {\r\n const $element = isString(el) ? document.querySelector(el) : el\r\n const $children = $element.childNodes\r\n const listeners = getListeners($element, type)\r\n\r\n listeners.forEach((listener) => {\r\n _off($element, listener.type, listener.fn)\r\n })\r\n\r\n if (\r\n (recurse || type === true || arguments.length === 1) &&\r\n $element &&\r\n $children\r\n ) {\r\n $children.forEach(($child) => {\r\n if (isElement($child)) {\r\n purgeElement($child, type, recurse)\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport default purgeElement\r\n","import isString from '../types/isString'\r\n\r\n/**\r\n * 获取 DOM 元素(type 事件类型)事件绑定信息\r\n * ========================================================================\r\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\r\n * ========================================================================\r\n * @methods getListeners\r\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\r\n * @param {String} [type] - (可选)事件类型\r\n * @returns {Array} - 已绑定的事件信息\r\n */\r\nconst getListeners = (el, type) => {\r\n let listeners = el._listeners || []\r\n\r\n if (isString(type) && type) {\r\n listeners = listeners.filter((listener) => {\r\n return listener.type === type\r\n })\r\n }\r\n\r\n return listeners\r\n}\r\n\r\nexport default getListeners\r\n","import purgeElement from './purgeElement'\r\nimport isFunction from '../types/isFunction'\r\nimport _off from './_off'\r\n\r\n/**\r\n * 取消 type 类型的代理事件绑定\r\n * ========================================================================\r\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\r\n * ========================================================================\r\n * @method off\r\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\r\n * @param {String} type - (必须)事件类型\r\n * @param {Function} [fn] - (可选)事件处理器回调函数\r\n */\r\nconst off = (el, type, fn) => {\r\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\r\n if (!isFunction(fn)) {\r\n return purgeElement(el, type)\r\n }\r\n\r\n _off(el, type, fn)\r\n}\r\n\r\nexport default off\r\n","import closest from '../dom/closest'\r\nimport off from './off'\r\nimport getTarget from './getTarget'\r\n\r\nimport { CAPTURE_EVENTS } from './enum'\r\n\r\n/**\r\n * 绑定代理事件\r\n * ========================================================================\r\n * @method on\r\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\r\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\r\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\r\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\r\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\r\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\r\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\r\n * @param {Boolean} once - (可选)是否仅触发一次\r\n */\r\nconst on = (el, selector, type, fn, data, context, once = false) => {\r\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\r\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\r\n\r\n const listener = function (evt) {\r\n const target = getTarget(evt)\r\n // 通过 Element.matches 方法获得点击的目标元素\r\n const delegateTarget = closest(target, selector, el)\r\n let overrideContext = context || el\r\n\r\n evt.delegateTarget = delegateTarget\r\n\r\n // 当设置为 true 时,则事件处理器回调函数的\r\n // this 上下文指向为 data 对象\r\n if (context === true) {\r\n overrideContext = data\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (delegateTarget) {\r\n // 仅触发一次\r\n /* istanbul ignore else */\r\n if (once === true) {\r\n off(el, type, listener)\r\n }\r\n\r\n fn.call(overrideContext, evt, data)\r\n }\r\n }\r\n\r\n if (!el._listeners) {\r\n el._listeners = []\r\n }\r\n\r\n // 缓存 options 元素绑定的事件处理器\r\n el._listeners.push({\r\n el,\r\n selector,\r\n type,\r\n fn: listener,\r\n data,\r\n context,\r\n capture\r\n })\r\n\r\n // 缓存包装后的事件处理器\r\n fn._delegateListener = listener\r\n\r\n el.addEventListener(type, listener, capture)\r\n}\r\n\r\nexport default on\r\n","import resolveTextNode from '../dom/resolveTextNode'\r\n\r\n/**\r\n * 返回触发事件的 target DOM 元素\r\n * ========================================================================\r\n * @method getTarget\r\n * @param {Event} evt - Event 对象\r\n * @return {HTMLElement} - Event 对象的 target DOM 元素\r\n */\r\nconst getTarget = function (evt) {\r\n const target = evt.target\r\n\r\n return resolveTextNode(target)\r\n}\r\n\r\nexport default getTarget\r\n","/**\r\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\r\n * resolveTextNode() 方法则会返回实际的目标节点。\r\n * ========================================================================\r\n * @method resolveTextNode\r\n * @param {HTMLElement|Text} el - 要解析的节点\r\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\r\n */\r\nconst resolveTextNode = function (el) {\r\n if (el && el.nodeType === 3) {\r\n return el.parentNode\r\n }\r\n\r\n return el\r\n}\r\n\r\nexport default resolveTextNode\r\n","import matches from './matches'\r\nimport getParentOrHost from './getParentOrHost'\r\n\r\n/**\r\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\r\n * ========================================================================\r\n * @method closest\r\n * @param {HTMLElement} el - (必须)DOM 元素\r\n * @param {String} selector - (必须)DOM 元素的选择其\r\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\r\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\r\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\r\n */\r\nconst closest = (el, selector, ctx, includeCTX) => {\r\n const context = ctx || document\r\n\r\n if (!el) {\r\n return null\r\n }\r\n\r\n do {\r\n /* istanbul ignore else */\r\n if (\r\n (selector != null &&\r\n (selector.startsWith('>')\r\n ? el.parentNode === context && matches(el, selector)\r\n : matches(el, selector))) ||\r\n (includeCTX && el === context)\r\n ) {\r\n return el\r\n }\r\n\r\n /* istanbul ignore else */\r\n if (el === context) {\r\n break\r\n }\r\n\r\n /* jshint boss:true */\r\n } while ((el = getParentOrHost(el)))\r\n}\r\n\r\nexport default closest\r\n","/**\r\n * 存储订阅者(主题和处理器的)私有对象\r\n * ========================================================================\r\n * @type {{}}\r\n * @private\r\n */\r\nconst _subscribers = {}\r\n\r\nexport default _subscribers\r\n","import _subscribers from './_subscribers'\r\nimport hasOwn from '../lang/hasOwn'\r\n\r\n/**\r\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\r\n * ========================================================================\r\n * @method _hasDirectSubscribersFor\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasDirectSubscribersFor = (topic) => {\r\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\r\n}\r\n\r\nexport default _hasDirectSubscribersFor\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\nimport _hasSubscribers from './_hasSubscribers'\r\n\r\n/**\r\n * 判断是否存在包含 topic 指定的订阅者信息\r\n * ========================================================================\r\n * @method has\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\r\n * @returns {Boolean}\r\n */\r\nconst has = (topic, isDirect = true) => {\r\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\r\n}\r\n\r\nexport default has\r\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * 判断是否存在包含给定 topic 相关的订阅者信息\r\n * ========================================================================\r\n * @method _hasSubscribers\r\n * @param {String} topic - (必须)订阅主题字符串\r\n * @returns {Boolean}\r\n */\r\nconst _hasSubscribers = (topic) => {\r\n let found = _hasDirectSubscribersFor(topic)\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (!found && position !== -1) {\r\n topic = topic.substring(0, position)\r\n position = topic.lastIndexOf('.')\r\n found = _hasDirectSubscribersFor(topic)\r\n }\r\n\r\n return found\r\n}\r\n\r\nexport default _hasSubscribers\r\n","import isTypedArray from '../types/isTypedArray'\r\nimport _subscribers from './_subscribers'\r\nimport has from './has'\r\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\r\n\r\n/**\r\n * (异步)发布订阅主题信息\r\n * ========================================================================\r\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\r\n * ========================================================================\r\n * @method emit\r\n * @param {String} topic - (必须)主题名称\r\n * @param {Object} data - (必须)数据对象\r\n * @param {Boolean} async - (可选) 是否异步发布\r\n */\r\nconst emit = (topic, data, async = true) => {\r\n const execute = (topic) => {\r\n if (!_hasDirectSubscribersFor(topic)) {\r\n return false\r\n }\r\n\r\n _subscribers[topic].forEach((subscriber) => {\r\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\r\n // 采用 toString() 方法转化为普通(JSON)字符串\r\n const message = isTypedArray(data) ? data.toString() : data\r\n\r\n subscriber.callback.call(subscriber.context || subscriber, message)\r\n })\r\n }\r\n const deliver = () => {\r\n let subscriber = topic\r\n let position = topic.lastIndexOf('.')\r\n\r\n while (position !== -1) {\r\n subscriber = subscriber.substring(0, position)\r\n position = subscriber.lastIndexOf('.')\r\n\r\n execute(subscriber)\r\n }\r\n\r\n // 执行 topic 对应的处理器\r\n execute(topic)\r\n // 执行特殊 topic:'*'(监听全部消息的发布)\r\n execute('*')\r\n }\r\n\r\n if (!has(topic)) {\r\n return false\r\n }\r\n\r\n if (async) {\r\n setTimeout(deliver, 10)\r\n } else {\r\n deliver()\r\n }\r\n}\r\n\r\nexport default emit\r\n","import toString from '../lang/toString'\r\n/**\r\n * 判断检测数据是否为 Typed Arrays 类型的数据\r\n * ========================================================================\r\n * @param {*} val\r\n * @returns {boolean}\r\n */\r\nconst isTypedArray = (val) => {\r\n const TYPES = [\r\n '[object Int8Array]',\r\n '[object Uint8Array]',\r\n '[object Uint8ClampedArray]',\r\n '[object Int16Array]',\r\n '[object Uint16Array]',\r\n '[object Int32Array]',\r\n '[object Uint32Array]',\r\n '[object Float32Array]',\r\n '[object Float64Array]',\r\n '[object BigInt64Array]',\r\n '[object BigUint64Array]'\r\n ]\r\n\r\n return TYPES.indexOf(toString(val)) > -1\r\n}\r\n\r\nexport default isTypedArray\r\n","import DEFAULTS from './defaults'\r\n\r\nconst SYMBOLS = [...DEFAULTS]\r\n\r\nexport default SYMBOLS\r\n","const DEFAULTS = [\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n ''\r\n]\r\n\r\nexport default DEFAULTS\r\n","import isString from '../types/isString'\r\nimport getSymbol from './getSymbol'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n *\r\n * @method getSymbols\r\n * @param {String} [name]\r\n * @param {String} [iconSet]\r\n * @returns {string[]|*}\r\n */\r\nconst getSymbols = (name, iconSet = 'icon') => {\r\n if (isString(name)) {\r\n return getSymbol(name, iconSet)\r\n }\r\n\r\n return [...SYMBOLS]\r\n}\r\n\r\nexport default getSymbols\r\n","import SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method getSymbol\r\n * @param {String} name\r\n * @param {String} [iconSet]\r\n * @returns {String}\r\n */\r\nconst getSymbol = (name, iconSet = 'icon') => {\r\n const patternName = /id=\"(.*?)\"/\r\n const patternSet = /^(\\w+)-/\r\n const symbols = SYMBOLS\r\n\r\n return symbols.find((symbol) => {\r\n const names = patternName.exec(symbol)\r\n const fullName = names[1]\r\n const sets = patternSet.exec(fullName)\r\n const setName = sets[1]\r\n const iconName =\r\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\r\n\r\n return setName === iconSet && fullName === iconName\r\n })\r\n}\r\n\r\nexport default getSymbol\r\n","import add from './add'\r\nimport getSymbols from './getSymbols'\r\n\r\n/**\r\n * 绘制 SVG 图标集\r\n * ========================================================================\r\n * @method paint\r\n * @param {String|Array} symbol\r\n */\r\nconst paint = (symbol = '') => {\r\n const $body = document.body\r\n let $icons = document.querySelector('#outline-icons')\r\n let symbols = []\r\n\r\n add(symbol)\r\n symbols = getSymbols()\r\n\r\n if ($icons) {\r\n $icons.innerHTML = symbols.join('')\r\n } else {\r\n $icons = document.createElement('div')\r\n $icons.innerHTML =\r\n ``\r\n $body.insertBefore($icons.firstChild, $body.firstChild)\r\n }\r\n}\r\n\r\nexport default paint\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport SYMBOLS from './symbols'\r\n\r\n/**\r\n * @method add\r\n * @param {Array|String} symbols\r\n * @return {Boolean}\r\n */\r\nconst add = (symbols) => {\r\n if (!symbols) {\r\n return false\r\n }\r\n\r\n if (isArray(symbols) && symbols.length > 0) {\r\n symbols.forEach((symbol) => {\r\n /* istanbul ignore else */\r\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\r\n SYMBOLS.push(symbol)\r\n }\r\n })\r\n } else {\r\n /* istanbul ignore else */\r\n if (isString(symbols)) {\r\n SYMBOLS.push(symbols)\r\n }\r\n }\r\n}\r\n\r\nexport default add\r\n","import isString from './isString'\r\n\r\nconst isSVG = (str) => {\r\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\r\n const doctype =\r\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\r\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\r\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\r\n const pattern = new RegExp(svg, 'i')\r\n\r\n return isString(str) && pattern.test(str)\r\n}\r\n\r\nexport default isSVG\r\n","import createElement from './createElement'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method icon\r\n * @alias createElement\r\n * @see createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst icon = (name, options = {}) => {\r\n return createElement(name, options)\r\n}\r\n\r\nexport default icon\r\n","import isArray from '../types/isArray'\r\nimport isString from '../types/isString'\r\nimport isSVG from '../types/isSVG'\r\n\r\n/**\r\n * 创建 SVG 图标 DOM 元素\r\n * ========================================================================\r\n * @method createElement\r\n * @param {String} name\r\n * @param {Object} [options]\r\n * @param {Number|Array} [options.size]\r\n * @param {String} [options.color]\r\n * @param {String} [options.iconSet]\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (name, options = {}) => {\r\n const size = options.size || 0\r\n const color = options.color || ''\r\n const iconSet = options.iconSet || ''\r\n const width = isArray(size) ? size[0] : size\r\n const height = isArray(size) ? size[1] : size\r\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\r\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\r\n const $icon = document.createElement('i')\r\n let binds = ''\r\n let svg = ''\r\n let $svg\r\n\r\n if (!isString(name)) {\r\n return null\r\n }\r\n\r\n if (isSVG(name)) {\r\n svg = name\r\n } else {\r\n binds =\r\n iconSet && iconSet !== 'icon'\r\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\r\n : `xlink:href=\"#icon-${name}\"`\r\n svg =\r\n `` +\r\n `` +\r\n ``\r\n }\r\n\r\n $icon.className = 'outline-icon'\r\n $icon.innerHTML = svg\r\n\r\n if (isSVG(name)) {\r\n $svg = $icon.querySelector('svg')\r\n $svg.setAttribute('aria-hidden', 'true')\r\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\r\n $svg.setAttribute('class', 'outline-icon__svg')\r\n $svg.setAttribute('width', '200')\r\n $svg.setAttribute('height', '200')\r\n $svg.style = cssRules\r\n }\r\n\r\n return $icon\r\n}\r\n\r\nexport default createElement\r\n","import icon from './utils/icons/icon'\r\nimport createElement from './utils/dom/createElement'\r\nimport addClass from './utils/dom/addClass'\r\n\r\nconst _createButton = (button, rounded = true) => {\r\n const $icon = icon(button.icon, {\r\n iconSet: button.iconSet || 'outline',\r\n color: button.color || '',\r\n size: button.size\r\n })\r\n const $anchor = createElement(\r\n 'a',\r\n {\r\n className: `outline-toolbar__anchor`,\r\n href: button.link\r\n },\r\n [$icon]\r\n )\r\n const $button = createElement(\r\n 'div',\r\n {\r\n className: `outline-toolbar__button ${button.name}`\r\n },\r\n [button.link ? $anchor : $icon]\r\n )\r\n\r\n addClass($icon, 'outline-toolbar__icon')\r\n\r\n if (rounded) {\r\n addClass($button, 'outline-toolbar_rounded')\r\n }\r\n\r\n if (button.disabled) {\r\n addClass($button, 'outline-toolbar_disabled')\r\n }\r\n\r\n return $button\r\n}\r\n\r\nexport default _createButton\r\n","import Base from './base'\r\n\r\nimport isString from './utils/types/isString'\r\nimport isFunction from './utils/types/isFunction'\r\nimport isObject from './utils/types/isObject'\r\nimport isArray from './utils/types/isArray'\r\nimport later from './utils/lang/later'\r\nimport createElement from './utils/dom/createElement'\r\nimport addClass from './utils/dom/addClass'\r\nimport hasClass from './utils/dom/hasClass'\r\nimport removeClass from './utils/dom/removeClass'\r\nimport on from './utils/event/on'\r\nimport off from './utils/event/off'\r\nimport publish from './utils/observer/emit'\r\nimport paint from './utils/icons/paint'\r\n\r\nimport _createButton from './_createButton'\r\n\r\nconst DISABLED = 'outline-toolbar_disabled'\r\nconst HIDDEN = 'outline-toolbar_hidden'\r\n\r\nclass Toolbar extends Base {\r\n constructor(options) {\r\n super()\r\n\r\n this.attrs = Toolbar.DEFAULTS\r\n this.$el = null\r\n this.disabled = false\r\n this.closed = false\r\n this.buttons = []\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n let created\r\n\r\n this.attr(options)\r\n created = this.attr('created')\r\n this.disabled = this.attr('disabled')\r\n this.closed = this.attr('closed')\r\n\r\n if (isFunction(created)) {\r\n created.call(this)\r\n }\r\n\r\n this.render().addListeners()\r\n\r\n return this\r\n }\r\n\r\n isDisabled(name) {\r\n const buttons = this.attr('buttons')\r\n let button\r\n\r\n if (name) {\r\n button = buttons.find((option) => option.name === name)\r\n\r\n return button?.disabled\r\n }\r\n\r\n return this.disabled\r\n }\r\n\r\n isClosed() {\r\n return this.closed\r\n }\r\n\r\n highlight(name) {\r\n const button = this.buttons.find((item) => item.name === name)\r\n const ACTIVE = 'outline-toolbar_active'\r\n let $button\r\n\r\n if ($button) {\r\n return this\r\n }\r\n\r\n $button = button.$el\r\n\r\n if (hasClass($button, ACTIVE)) {\r\n removeClass($button, ACTIVE)\r\n } else {\r\n addClass($button, ACTIVE)\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n const mounted = this.attr('mounted')\r\n const buttons = this.attr('buttons') || []\r\n const rounded = this.attr('rounded')\r\n const placement = this.attr('placement')\r\n const $buttons = document.createDocumentFragment()\r\n const $fragment = document.createDocumentFragment()\r\n\r\n paint()\r\n\r\n buttons.forEach((button) => {\r\n const $button = _createButton(button, rounded)\r\n\r\n $buttons.appendChild($button)\r\n this.buttons.push({\r\n name: button.name,\r\n $el: $button\r\n })\r\n })\r\n\r\n this.$el = createElement(\r\n 'div',\r\n {\r\n id: 'outline-toolbar',\r\n className: `outline-toolbar outline-toolbar_${placement}`\r\n },\r\n [$buttons]\r\n )\r\n $fragment.appendChild(this.$el)\r\n document.body.appendChild($fragment)\r\n\r\n if (this.closed) {\r\n this.hide()\r\n }\r\n\r\n if (this.disabled) {\r\n this.disable()\r\n }\r\n\r\n if (isFunction(mounted)) {\r\n mounted.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n add(button) {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons')\r\n const action = button.action\r\n const $fragment = document.createDocumentFragment()\r\n let type\r\n\r\n if (isObject(button)) {\r\n buttons.push(button)\r\n $fragment.appendChild(_createButton(button))\r\n } else if (isArray(button)) {\r\n button.forEach((item) => {\r\n $fragment.appendChild(_createButton(item))\r\n })\r\n }\r\n $el.appendChild($fragment)\r\n\r\n if (action && isFunction(action.handler)) {\r\n type = action.type || 'click'\r\n on($el, `.${button.name}`, type, action.handler)\r\n }\r\n\r\n return this\r\n }\r\n\r\n remove(name) {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons')\r\n const button = buttons.find((option) => option.name === name)\r\n let index = -1\r\n let $button\r\n\r\n if (!button) {\r\n return this\r\n }\r\n\r\n buttons.forEach((button, i) => {\r\n if (button.name === name) {\r\n index = i\r\n }\r\n })\r\n\r\n if (index > -1) {\r\n this.attr().buttons.splice(index, 1)\r\n }\r\n\r\n $button = $el.querySelector(`.${name}`)\r\n this.switch(name, false)\r\n $el.removeChild($button)\r\n\r\n return this\r\n }\r\n\r\n switch(name, enabled) {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons')\r\n const button = buttons.find((option) => option.name === name)\r\n let action\r\n let type\r\n let listener\r\n let $button\r\n\r\n if (!button) {\r\n return this\r\n }\r\n\r\n buttons.forEach((option) => {\r\n if (option.name === name) {\r\n button.disabled = !enabled\r\n }\r\n })\r\n\r\n action = button.action\r\n $button = $el.querySelector(`.${name}`)\r\n\r\n if (action) {\r\n type = action.type || 'click'\r\n listener = action.handler\r\n }\r\n\r\n if (enabled) {\r\n removeClass($button, DISABLED)\r\n\r\n if (type && listener) {\r\n on($el, `.${name}`, type, listener)\r\n }\r\n } else {\r\n addClass($button, DISABLED)\r\n\r\n if (type && listener) {\r\n off($el, type, listener)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n disable(name) {\r\n const disabled = this.attr('afterDisabled')\r\n\r\n if (name) {\r\n this.switch(name, false)\r\n } else {\r\n addClass(this.$el, DISABLED)\r\n this.removeListeners()\r\n this.disabled = true\r\n\r\n if (isFunction(disabled)) {\r\n disabled.call(this)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n enable(name) {\r\n const enabled = this.attr('afterEnabled')\r\n\r\n if (name) {\r\n this.switch(name, true)\r\n } else {\r\n this.disabled = false\r\n removeClass(this.$el, DISABLED)\r\n this.addListeners()\r\n\r\n if (isFunction(enabled)) {\r\n enabled.call(this)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n show(name) {\r\n const opened = this.attr('afterOpened')\r\n const button = this.attr('buttons').find((option) => option.name === name)\r\n const $el = this.$el\r\n let $button\r\n\r\n if (name) {\r\n if (!button) {\r\n return this\r\n }\r\n\r\n $button = $el.querySelector(`.${name}`)\r\n removeClass($button, HIDDEN)\r\n } else {\r\n removeClass($el, HIDDEN)\r\n this.closed = false\r\n\r\n if (isFunction(opened)) {\r\n later(() => {\r\n opened.call(this)\r\n }, 310)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n hide(name) {\r\n const closed = this.attr('afterClosed')\r\n const button = this.attr('buttons').find((option) => option.name === name)\r\n const $el = this.$el\r\n let $button\r\n\r\n if (name) {\r\n if (!button) {\r\n return this\r\n }\r\n $button = $el.querySelector(`.${name}`)\r\n addClass($button, HIDDEN)\r\n } else {\r\n addClass($el, HIDDEN)\r\n this.closed = true\r\n\r\n if (isFunction(closed)) {\r\n later(() => {\r\n closed.call(this)\r\n }, 310)\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n toggle() {\r\n if (this.isClosed()) {\r\n this.show()\r\n } else {\r\n this.hide()\r\n }\r\n\r\n return this\r\n }\r\n\r\n destroy() {\r\n const beforeDestroy = this.attr('beforeDestroy')\r\n const afterDestroy = this.attr('afterDestroy')\r\n let $el = this.$el\r\n\r\n if (isFunction(beforeDestroy)) {\r\n beforeDestroy.call(this)\r\n }\r\n\r\n this.removeListeners()\r\n document.body.removeChild($el)\r\n $el = null\r\n\r\n this.attr(Toolbar.DEFAULTS)\r\n this.disabled = false\r\n this.closed = false\r\n this.buttons = []\r\n\r\n if (isFunction(afterDestroy)) {\r\n afterDestroy.call(this)\r\n }\r\n\r\n return this\r\n }\r\n\r\n refresh() {\r\n const $el = this.$el\r\n const buttons = this.attr('buttons') || []\r\n\r\n this.removeListeners()\r\n $el.innerHTML = ''\r\n\r\n buttons.forEach((button) => {\r\n this.$el.appendChild(_createButton(button))\r\n })\r\n\r\n this.addListeners()\r\n\r\n return this\r\n }\r\n\r\n addListeners() {\r\n const buttons = this.attr('buttons')\r\n const $el = this.$el\r\n\r\n if (!buttons || buttons.length < 1) {\r\n return this\r\n }\r\n\r\n buttons.forEach((button) => {\r\n const action = button.action\r\n const disabled = this.disabled\r\n let type\r\n let listener\r\n let context\r\n let command\r\n\r\n if (disabled) {\r\n return false\r\n }\r\n\r\n if (action) {\r\n listener = action.handler\r\n if (isString(listener)) {\r\n command = listener\r\n action.handler = function () {\r\n publish(command, button.name)\r\n }\r\n listener = action.handler\r\n }\r\n\r\n type = action.type || 'click'\r\n context = action.context\r\n }\r\n\r\n if (isFunction(listener)) {\r\n on($el, `.${button.name}`, type, listener, context || this, true)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n const buttons = this.attr('buttons')\r\n const $el = this.$el\r\n\r\n if (!buttons || buttons.length < 1) {\r\n return this\r\n }\r\n\r\n buttons.forEach((button) => {\r\n const action = button.action\r\n const disabled = this.disabled\r\n let type\r\n let listener\r\n\r\n if (disabled) {\r\n return false\r\n }\r\n\r\n if (action) {\r\n listener = action.handler\r\n type = action.type || 'click'\r\n }\r\n\r\n if (isFunction(listener)) {\r\n off($el, type, listener)\r\n }\r\n })\r\n\r\n return this\r\n }\r\n}\r\n\r\nToolbar.DEFAULTS = {\r\n placement: 'ltr',\r\n closed: false,\r\n disabled: false,\r\n rounded: true,\r\n buttons: [],\r\n created: null,\r\n mounted: null,\r\n afterClosed: null,\r\n afterOpened: null,\r\n afterDisabled: null,\r\n afterEnabled: null,\r\n beforeDestroy: null,\r\n afterDestroy: null\r\n}\r\n\r\nexport default Toolbar\r\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isArray","Array","later","fn","delay","setTimeout","isElement","nodeName","tagName","nodeType","isDOM","el","isHTMLCollection","fragment","isTextNode","createElement","children","$fragment","document","createDocumentFragment","$el","isValidChild","child","append","$child","createTextNode","appendChild","toLowerCase","style","cssText","setAttribute","className","every","hasClass","pattern","RegExp","allClass","classList","contains","exec","addClass","add","removeClass","remove","replace","matches","selector","sel","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","querySelector","$children","childNodes","filter","getListeners","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","iconName","getSymbol","paint","$body","body","$icons","symbols","innerHTML","join","insertBefore","firstChild","isSVG","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","_createButton","button","rounded","$anchor","href","link","$button","disabled","DISABLED","HIDDEN","Toolbar","super","DEFAULTS","closed","buttons","created","isDisabled","option","isClosed","highlight","item","ACTIVE","mounted","placement","$buttons","id","hide","disable","action","switch","removeChild","enabled","enable","show","opened","toggle","beforeDestroy","afterDestroy","refresh","command","publish","afterClosed","afterOpened","afterDisabled","afterEnabled"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"toolbar.min.js","sources":["src/utils/types/isString.js","src/utils/lang/hasOwn.js","src/utils/lang/toString.js","src/utils/types/isFunction.js","src/utils/types/isObject.js","src/base.js","src/utils/lang/extend.js","src/utils/types/isArray.js","src/utils/lang/later.js","src/utils/types/isElement.js","src/utils/types/isDOM.js","src/utils/types/isHTMLCollection.js","src/utils/types/isFragment.js","src/utils/types/isTextNode.js","src/utils/dom/createElement.js","src/utils/dom/setAttribute.js","src/utils/dom/hasClass.js","src/utils/dom/addClass.js","src/utils/dom/removeClass.js","src/utils/lang/trim.js","src/utils/dom/matches.js","src/utils/dom/getParentOrHost.js","src/utils/event/enum.js","src/utils/event/_off.js","src/utils/event/_delete.js","src/utils/event/purgeElement.js","src/utils/event/getListeners.js","src/utils/event/off.js","src/utils/event/on.js","src/utils/event/getTarget.js","src/utils/dom/resolveTextNode.js","src/utils/dom/closest.js","src/utils/observer/_subscribers.js","src/utils/observer/_hasDirectSubscribersFor.js","src/utils/observer/has.js","src/utils/observer/_hasSubscribers.js","src/utils/observer/emit.js","src/utils/types/isTypedArray.js","src/utils/icons/symbols.js","src/utils/icons/defaults.js","src/utils/icons/getSymbols.js","src/utils/icons/getSymbol.js","src/utils/icons/paint.js","src/utils/icons/add.js","src/utils/types/isSVG.js","src/utils/icons/icon.js","src/utils/icons/createElement.js","src/_createButton.js","src/toolbar.js"],"sourcesContent":["/**\n * 检测数据是否为 String 类型\n * ========================================================================\n * @method isArray\n * @param {*} str\n * @returns {boolean}\n */\nconst isString = (str) => {\n return typeof str === 'string'\n}\n\nexport default isString\n","/**\n * 检测对象自身属性中是否具有指定的属性。\n * ========================================================================\n * @method hasOwn\n * @param {Object} obj - (必须)检测的目标对象\n * @param {String} prop - (必须)属性名\n * @returns {Boolean}\n */\nconst hasOwn = (obj, prop) => {\n const hasOwnProperty = Object.prototype.hasOwnProperty\n return obj && hasOwnProperty.call(obj, prop)\n}\n\nexport default hasOwn\n","/**\n * Object 对象原型上的 toString 方法\n * ========================================================================\n * @method toString\n * @param {*} val\n * @returns {string}\n */\nconst toString = (val) => {\n return Object.prototype.toString.apply(val)\n}\n\nexport default toString\n","import toString from '../lang/toString'\n\n/**\n * 检测测试数据是否为 Function 类型\n * ========================================================================\n * @method isFunction\n * @param {*} val - (必须)待检测的数据\n * @returns {boolean} 'val' 是 Function 类型返回 true,否则返回 false\n */\nconst isFunction = (val) => {\n return typeof val === 'function' || toString(val) === '[object Function]'\n}\n\nexport default isFunction\n","import toString from '../lang/toString'\nimport isFunction from '../types/isFunction'\n\n/**\n * 检测数据是否为 Object 类型\n * ========================================================================\n * @method isObject\n * @param {*} o\n * @returns {boolean}\n */\nconst isObject = (o) => {\n return (\n (toString(o) === '[object Object]' ||\n typeof o === 'object' ||\n isFunction(o)) &&\n o !== null\n )\n}\n\nexport default isObject\n","import isString from './utils/types/isString'\r\nimport hasOwn from './utils/lang/hasOwn'\r\nimport isObject from './utils/types/isObject'\r\nimport extend from './utils/lang/extend'\r\n\r\nclass Base {\r\n constructor(options) {\r\n this.attrs = {}\r\n\r\n if (options) {\r\n this.initialize(options)\r\n }\r\n }\r\n\r\n initialize(options) {\r\n this.attr(options).render().addListeners()\r\n return this\r\n }\r\n\r\n attr(prop, value) {\r\n const attrs = this.attrs\r\n\r\n if (isString(prop)) {\r\n // 只能扩展 attrs 中已有的属性\r\n if (value && hasOwn(attrs, prop)) {\r\n // 更新单个配置信息\r\n attrs[prop] = value\r\n return this\r\n }\r\n\r\n // 只传递 prop 参数,则返回对应的属性值\r\n return attrs[prop]\r\n } else if (isObject(prop)) {\r\n // 批量更新配置信息\r\n extend(attrs, prop)\r\n\r\n return this\r\n } else if (arguments.length === 0) {\r\n // 不传递参数,直接返回整个\r\n return attrs\r\n }\r\n\r\n return this\r\n }\r\n\r\n render() {\r\n return this\r\n }\r\n\r\n destroy() {\r\n this.removeListeners()\r\n return this\r\n }\r\n\r\n reload(options) {\r\n this.destroy().initialize(this.attr(options))\r\n return this\r\n }\r\n\r\n addListeners() {\r\n return this\r\n }\r\n\r\n removeListeners() {\r\n return this\r\n }\r\n}\r\n\r\nexport default Base\r\n","import hasOwn from './hasOwn'\n\n/**\n * 扩展对象\n * ========================================================================\n * @method extend\n * @param {Object} origin\n * @param {Object} source\n */\nconst extend = (origin, source) => {\n const keys = Object.keys(source)\n\n keys.forEach((prop) => {\n if (hasOwn(source, prop)) {\n origin[prop] = source[prop]\n }\n })\n}\n\nexport default extend\n","import toString from '../lang/toString'\n\n/**\n * 检测数据是否为 Array 类型\n * ========================================================================\n * @method isArray\n * @param {*} o\n * @returns {boolean}\n */\nconst isArray = (o) => {\n if (Array.isArray) {\n return Array.isArray(o)\n } else {\n return toString(o) === '[object Array]'\n }\n}\n\nexport default isArray\n","import isFunction from '../types/isFunction'\n\n/**\n * later - 延迟执行方法\n * ========================================================================\n * @method later\n * @param {Function} fn\n * @param {Number} [delay]\n * @returns {number|boolean}\n */\nconst later = (fn, delay = 300) => {\n if (!isFunction(fn)) {\n return false\n }\n\n return setTimeout(() => {\n fn()\n }, delay)\n}\n\nexport default later\n","import isObject from './isObject'\n\n/**\n * 检测数据是否为 HTMLElement DOM 节点\n * ========================================================================\n * @method isElement\n * @param {*} o\n * @returns {boolean}\n */\nconst isElement = (o) => {\n return !!(isObject(o) && o.nodeName && o.tagName && o.nodeType === 1)\n}\n\nexport default isElement\n","import isObject from './isObject'\r\nimport isElement from './isElement'\r\nimport isHTMLCollection from './isHTMLCollection'\r\nimport isFragment from './isFragment'\r\nimport isTextNode from './isTextNode'\r\n\r\nconst isDOM = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (isElement(el) || isHTMLCollection(el) || isFragment(el) || isTextNode(el))\r\n )\r\n}\r\n\r\nexport default isDOM\r\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isHTMLCollection = (el) => {\r\n return !!(isObject(el) && toString(el) === '[object NodeList]')\r\n}\r\n\r\nexport default isHTMLCollection\r\n","import toString from '../lang/toString'\nimport isObject from './isObject'\n\nconst isFragment = (fragment) => {\n return !!(\n isObject(fragment) && toString(fragment) === '[object DocumentFragment]'\n )\n}\n\nexport default isFragment\n","import toString from '../lang/toString'\r\nimport isObject from './isObject'\r\n\r\nconst isTextNode = (el) => {\r\n return !!(\r\n isObject(el) &&\r\n (toString(el) === '[object Text]' || (el.tagName && el.nodeType === 3))\r\n )\r\n}\r\n\r\nexport default isTextNode\r\n","import hasOwn from '../lang/hasOwn'\nimport isObject from '../types/isObject'\nimport isString from '../types/isString'\nimport isArray from '../types/isArray'\nimport isDOM from '../types/isDOM'\nimport setAttribute from './setAttribute'\n\n/**\n * 创建 DOM 节点,并添加属性和子节点\n * ========================================================================\n * @method createElement\n * @param {String} tagName - 标签名称\n * @param {Object|Array} attrs - 属性对象或者子节点\n * @param {Array} [children] - 子节点数组\n * @returns {HTMLElement}\n */\nconst createElement = (tagName, attrs, children) => {\n const $fragment = document.createDocumentFragment()\n const $el = document.createElement(tagName)\n const isValidChild = (child) => {\n return isDOM(child) || isString(child)\n }\n const append = (child) => {\n let $child\n\n if (!isValidChild(child)) {\n return false\n }\n\n if (isDOM(child)) {\n $child = child\n } else if (isString(child)) {\n $child = document.createTextNode(child)\n }\n\n $fragment.appendChild($child)\n }\n\n if (isObject(attrs)) {\n Object.keys(attrs).forEach((attr) => {\n if (hasOwn(attrs, attr)) {\n setAttribute($el, attr, attrs[attr])\n }\n })\n } else if (isArray(attrs) && attrs.every((attr) => isValidChild(attr))) {\n attrs.forEach((child) => {\n append(child)\n })\n }\n\n if (isArray(children)) {\n children.forEach((child) => {\n append(child)\n })\n } else {\n append(children)\n }\n\n $el.appendChild($fragment)\n\n return $el\n}\n\nexport default createElement\n","/**\n * 给 DOM 节点设置属性/值\n * ========================================================================\n * @method setAttribute\n * @param {HTMLElement} el - DOM 节点\n * @param {String} attr - 属性名称\n * @param {String|Number|Boolean} value - 属性值\n */\nconst setAttribute = (el, attr, value) => {\n let tagName = el.tagName.toLowerCase()\n\n switch (attr) {\n case 'style':\n el.style.cssText = value\n break\n case 'value':\n if (tagName === 'input' || tagName === 'textarea') {\n el.value = value\n } else {\n el.setAttribute(attr, value)\n }\n break\n case 'className':\n el.className = value\n break\n default:\n el.setAttribute(attr, value)\n break\n }\n}\n\nexport default setAttribute\n","import isElement from '../types/isElement'\n/**\n * 检测 DOM 节点是否包含名为 className 的样式\n * ========================================================================\n * @method hasClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst hasClass = (el, className) => {\n const pattern = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)')\n let allClass\n let classList\n\n if (!isElement(el)) {\n return false\n }\n\n allClass = el.className\n\n if (!allClass) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.contains) {\n return el.classList.contains(className)\n }\n\n return !!pattern.exec(allClass)\n}\n\nexport default hasClass\n","import hasClass from './hasClass'\n\n/**\n * 给 DOM 节点添加名为 className 的样式\n * ========================================================================\n * @method addClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst addClass = (el, className) => {\n let classList\n let allClass\n\n if (hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.add) {\n classList.add(className)\n } else {\n allClass = el.className\n allClass += allClass.length > 0 ? ' ' + className : className\n el.className = allClass\n }\n}\n\nexport default addClass\n","import trim from '../lang/trim'\nimport hasClass from './hasClass'\n\n/**\n * 移除 DOM 节点的 className 样式\n * ========================================================================\n * @method removeClass\n * @param {HTMLElement} el - DOM 节点\n * @param {String} className - 样式名称\n * @returns {Boolean}\n */\nconst removeClass = (el, className) => {\n let allClass = el.className\n let classList\n\n if (!allClass || !hasClass(el, className)) {\n return false\n }\n\n classList = el.classList\n\n if (classList?.remove) {\n classList.remove(className)\n } else {\n allClass = trim(allClass.replace(className, ''))\n el.className = allClass\n }\n}\n\nexport default removeClass\n","import isString from '../types/isString'\n\n/**\n * 清楚字符串起始位置所有的空格\n * ========================================================================\n * @method trim\n * @param {string} str\n * @returns {string|Boolean}\n */\nconst trim = (str) => {\n if (!isString(str)) {\n return false\n }\n return str.replace(/(^\\s+)|(\\s+$)/g, '')\n}\n\nexport default trim\n","/**\n * 获取 options 节点下匹配 selector 选择器的 DOM 节点\n * ========================================================================\n * Element.matches() 方法可以用来判断 DOM 元素是否与给定的选择器匹配,事件代理判断是\n * 否触发绑定的代理事件回调函数,关键就是使用 Element.matches() 辨别当前事件触发的目\n * 标 DOM 元素是否为事件代理所期望触发的目标。\n * ========================================================================\n * @method matches\n * @see https://developer.mozilla.org/en-US/docs/web/api/element/matches\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)匹配 DOM 元素的选择器\n * @returns {Boolean}\n */\nconst matches = (el, selector = '') => {\n const sel = selector.replace(/^>/i, '')\n\n if (!selector || !sel || !el) {\n return false\n }\n\n /* istanbul ignore else */\n if (el.matches) {\n return el.matches(sel)\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(sel)\n } else {\n return false\n }\n}\n\nexport default matches\n","/**\n * 获取 DOM 元素的父节点\n * ========================================================================\n * @method getParentOrHost\n * @param {*|HTMLElement} el - (必须)要获取父节点的 DOM 元素\n * @returns {*|HTMLElement}\n */\nconst getParentOrHost = (el) => {\n return el.host && el !== document && el.host.nodeType\n ? el.host\n : el.parentNode\n}\n\nexport default getParentOrHost\n","export const CAPTURE_EVENTS = [\n 'focusout',\n 'blur',\n 'focusin',\n 'focus',\n 'load',\n 'unload',\n 'mouseenter',\n 'mouseleave'\n]\n","import { CAPTURE_EVENTS } from './enum'\nimport _delete from './_delete'\n\n/**\n * (私有方法)取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method _off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} fn - (必须)事件处理器回调函数\n * @private\n */\nconst _off = (el, type, fn) => {\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n /* istanbul ignore else */\n if (fn._delegateListener) {\n fn = fn._delegateListener\n delete fn._delegateListener\n }\n\n // 移除缓存的 _listeners 数据\n _delete(el, type, fn)\n\n el.removeEventListener(type, fn, capture)\n}\n\nexport default _off\n","/**\n * 删除 DOM 元素缓存的 _listeners 数据\n * ========================================================================\n * @method _delete\n * @param {HTMLElement} el - 要删除 listener 的 DOM 元素\n * @param {String} type - 事件类型(名称)\n * @param {Function} [fn] - 事件处理器回调函数\n */\nconst _delete = function (el, type, fn) {\n const listeners = el._listeners\n let index = -1\n\n if (listeners.length < 1) {\n return false\n }\n\n // 移除缓存的 _listeners 数据\n listeners.forEach((listener, i) => {\n const handler = listener.fn\n\n if (type === listener.type) {\n index = i\n\n if (handler === fn) {\n index = i\n }\n }\n })\n\n /* istanbul ignore else */\n if (index > -1) {\n listeners.splice(index, 1)\n }\n}\n\nexport default _delete\n","import isString from '../types/isString'\nimport isElement from '../types/isElement'\nimport getListeners from './getListeners'\nimport _off from './_off'\n\n/**\n * 销毁(type 类型的)代理事件绑定\n * ========================================================================\n * 1. 设置了事件类型 type,则销毁指定类型的事件绑定,否则清除所有代理事件绑定\n * 2. recurse 设置为 true,递归销毁子节点全部事件绑定\n * ========================================================================\n * @method purgeElement\n * @param {HTMLElement|String} el - (必须)DOM 元素或者其选择器\n * @param {String|Boolean} type - (必须)事件类型\n * @param {Boolean} [recurse] - (可选)是否递归销毁子节点所有事件绑定\n */\nconst purgeElement = function (el, type, recurse = false) {\n const $element = isString(el) ? document.querySelector(el) : el\n const $children = $element.childNodes\n const listeners = getListeners($element, type)\n\n listeners.forEach((listener) => {\n _off($element, listener.type, listener.fn)\n })\n\n if (\n (recurse || type === true || arguments.length === 1) &&\n $element &&\n $children\n ) {\n $children.forEach(($child) => {\n if (isElement($child)) {\n purgeElement($child, type, recurse)\n }\n })\n }\n}\n\nexport default purgeElement\n","import isString from '../types/isString'\n\n/**\n * 获取 DOM 元素(type 事件类型)事件绑定信息\n * ========================================================================\n * 如果设置了事件类型 type, 则返回指定类型的事件绑定信息,否则返回所有事件绑定信息\n * ========================================================================\n * @methods getListeners\n * @param {HTMLElement} el - (必须)要获取事件绑定信息的 DOM 元素\n * @param {String} [type] - (可选)事件类型\n * @returns {Array} - 已绑定的事件信息\n */\nconst getListeners = (el, type) => {\n let listeners = el._listeners || []\n\n if (isString(type) && type) {\n listeners = listeners.filter((listener) => {\n return listener.type === type\n })\n }\n\n return listeners\n}\n\nexport default getListeners\n","import purgeElement from './purgeElement'\nimport isFunction from '../types/isFunction'\nimport _off from './_off'\n\n/**\n * 取消 type 类型的代理事件绑定\n * ========================================================================\n * 如果没有设置 handler,则销毁 this.$options 绑定的所有符合 type 事件类型的事件绑定\n * ========================================================================\n * @method off\n * @param {HTMLElement} el - (必须)取消事件绑定的 DOM 元素\n * @param {String} type - (必须)事件类型\n * @param {Function} [fn] - (可选)事件处理器回调函数\n */\nconst off = (el, type, fn) => {\n // 如果不设置 fn 参数,默认清除 el 元素上绑定的所有事件处理器\n if (!isFunction(fn)) {\n return purgeElement(el, type)\n }\n\n _off(el, type, fn)\n}\n\nexport default off\n","import closest from '../dom/closest'\nimport off from './off'\nimport getTarget from './getTarget'\n\nimport { CAPTURE_EVENTS } from './enum'\n\n/**\n * 绑定代理事件\n * ========================================================================\n * @method on\n * @param {HTMLElement|String|Object} el - (必须)绑定代理事件的 DOM 节点\n * @param {String} selector - (必须)事件代理目标 DOM 元素的选择器\n * @param {String|Function} type - (必须)事件类型或者事件处理器回调函数\n * @param {Function|Object} fn - (可选) 事件处理器回调函数或者传递给事件处理器回调函数的数据对象\n * @param {Object|Boolean} [data] - (可选)传递给事件处理器回调函数的数据对象或者事件处理器回调函数的 this 上下文指向,\n * @param {Object|Boolean} [context] - (可选)事件处理器回调函数的 this 上下文指向,或者是否仅触发一次\n * 当设置为 true 时,则事件处理器回调函数的 this 上下文指向为 data 对象\n * @param {Boolean} once - (可选)是否仅触发一次\n */\nconst on = (el, selector, type, fn, data, context, once = false) => {\n // CAPTURE_EVENTS 中的特殊事件,采用事件捕获模型\n const capture = CAPTURE_EVENTS.indexOf(type) > -1\n\n const listener = function (evt) {\n const target = getTarget(evt)\n // 通过 Element.matches 方法获得点击的目标元素\n const delegateTarget = closest(target, selector, el)\n let overrideContext = context || el\n\n evt.delegateTarget = delegateTarget\n\n // 当设置为 true 时,则事件处理器回调函数的\n // this 上下文指向为 data 对象\n if (context === true) {\n overrideContext = data\n }\n\n /* istanbul ignore else */\n if (delegateTarget) {\n // 仅触发一次\n /* istanbul ignore else */\n if (once === true) {\n off(el, type, listener)\n }\n\n fn.call(overrideContext, evt, data)\n }\n }\n\n if (!el._listeners) {\n el._listeners = []\n }\n\n // 缓存 options 元素绑定的事件处理器\n el._listeners.push({\n el,\n selector,\n type,\n fn: listener,\n data,\n context,\n capture\n })\n\n // 缓存包装后的事件处理器\n fn._delegateListener = listener\n\n el.addEventListener(type, listener, capture)\n}\n\nexport default on\n","import resolveTextNode from '../dom/resolveTextNode'\n\n/**\n * 返回触发事件的 target DOM 元素\n * ========================================================================\n * @method getTarget\n * @param {Event} evt - Event 对象\n * @return {HTMLElement} - Event 对象的 target DOM 元素\n */\nconst getTarget = function (evt) {\n const target = evt.target\n\n return resolveTextNode(target)\n}\n\nexport default getTarget\n","/**\n * 在某些情况下,某些浏览器(例如:Safari 浏览器)会返回实际的目标元素内部的文本节点。\n * resolveTextNode() 方法则会返回实际的目标节点。\n * ========================================================================\n * @method resolveTextNode\n * @param {HTMLElement|Text} el - 要解析的节点\n * @return {*|HTMLElement} - 实际的目标 DOM 节点\n */\nconst resolveTextNode = function (el) {\n if (el && el.nodeType === 3) {\n return el.parentNode\n }\n\n return el\n}\n\nexport default resolveTextNode\n","import matches from './matches'\nimport getParentOrHost from './getParentOrHost'\n\n/**\n * 获取 options 元素父元素最近的包含 selector 选择器的元素\n * ========================================================================\n * @method closest\n * @param {HTMLElement} el - (必须)DOM 元素\n * @param {String} selector - (必须)DOM 元素的选择其\n * @param {HTMLElement} [ctx] - (必须)比对的 DOM 元素\n * @param {Boolean} [includeCTX] - (必须)是否包含 context DOM 元素\n * @returns {null|HTMLElement} - 返回最接近的 DOM 元素\n */\nconst closest = (el, selector, ctx, includeCTX) => {\n const context = ctx || document\n\n if (!el) {\n return null\n }\n\n do {\n /* istanbul ignore else */\n if (\n (selector != null &&\n (selector.startsWith('>')\n ? el.parentNode === context && matches(el, selector)\n : matches(el, selector))) ||\n (includeCTX && el === context)\n ) {\n return el\n }\n\n /* istanbul ignore else */\n if (el === context) {\n break\n }\n\n /* jshint boss:true */\n } while ((el = getParentOrHost(el)))\n}\n\nexport default closest\n","/**\n * 存储订阅者(主题和处理器的)私有对象\n * ========================================================================\n * @type {{}}\n * @private\n */\nconst _subscribers = {}\n\nexport default _subscribers\n","import _subscribers from './_subscribers'\nimport hasOwn from '../lang/hasOwn'\n\n/**\n * 判断是否存在与给定 topic 完全匹配的订阅者信息\n * ========================================================================\n * @method _hasDirectSubscribersFor\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasDirectSubscribersFor = (topic) => {\n return hasOwn(_subscribers, topic) && _subscribers[topic].length > 0\n}\n\nexport default _hasDirectSubscribersFor\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\nimport _hasSubscribers from './_hasSubscribers'\n\n/**\n * 判断是否存在包含 topic 指定的订阅者信息\n * ========================================================================\n * @method has\n * @param {String} topic - (必须)主题名称\n * @param {Boolean} [isDirect] - (可选)是否为直接的主题,默认值:true\n * @returns {Boolean}\n */\nconst has = (topic, isDirect = true) => {\n return isDirect ? _hasDirectSubscribersFor(topic) : _hasSubscribers(topic)\n}\n\nexport default has\n","import _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * 判断是否存在包含给定 topic 相关的订阅者信息\n * ========================================================================\n * @method _hasSubscribers\n * @param {String} topic - (必须)订阅主题字符串\n * @returns {Boolean}\n */\nconst _hasSubscribers = (topic) => {\n let found = _hasDirectSubscribersFor(topic)\n let position = topic.lastIndexOf('.')\n\n while (!found && position !== -1) {\n topic = topic.substring(0, position)\n position = topic.lastIndexOf('.')\n found = _hasDirectSubscribersFor(topic)\n }\n\n return found\n}\n\nexport default _hasSubscribers\n","import isTypedArray from '../types/isTypedArray'\nimport _subscribers from './_subscribers'\nimport has from './has'\nimport _hasDirectSubscribersFor from './_hasDirectSubscribersFor'\n\n/**\n * (异步)发布订阅主题信息\n * ========================================================================\n * 主题默认是异步发布的。确保在消费者处理主题时,主题的发起者不会被阻止。\n * ========================================================================\n * @method emit\n * @param {String} topic - (必须)主题名称\n * @param {Object} data - (必须)数据对象\n * @param {Boolean} async - (可选) 是否异步发布\n */\nconst emit = (topic, data, async = true) => {\n const execute = (topic) => {\n if (!_hasDirectSubscribersFor(topic)) {\n return false\n }\n\n _subscribers[topic].forEach((subscriber) => {\n // 针对 mqtt 消息服务返回的 Uint8Array 类似的 typed arrays 格式的数据\n // 采用 toString() 方法转化为普通(JSON)字符串\n const message = isTypedArray(data) ? data.toString() : data\n\n subscriber.callback.call(subscriber.context || subscriber, message)\n })\n }\n const deliver = () => {\n let subscriber = topic\n let position = topic.lastIndexOf('.')\n\n while (position !== -1) {\n subscriber = subscriber.substring(0, position)\n position = subscriber.lastIndexOf('.')\n\n execute(subscriber)\n }\n\n // 执行 topic 对应的处理器\n execute(topic)\n // 执行特殊 topic:'*'(监听全部消息的发布)\n execute('*')\n }\n\n if (!has(topic)) {\n return false\n }\n\n if (async) {\n setTimeout(deliver, 10)\n } else {\n deliver()\n }\n}\n\nexport default emit\n","import toString from '../lang/toString'\n/**\n * 判断检测数据是否为 Typed Arrays 类型的数据\n * ========================================================================\n * @param {*} val\n * @returns {boolean}\n */\nconst isTypedArray = (val) => {\n const TYPES = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n '[object BigInt64Array]',\n '[object BigUint64Array]'\n ]\n\n return TYPES.indexOf(toString(val)) > -1\n}\n\nexport default isTypedArray\n","import DEFAULTS from './defaults'\n\nconst SYMBOLS = [...DEFAULTS]\n\nexport default SYMBOLS\n","const DEFAULTS = [\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n '',\n ''\n]\n\nexport default DEFAULTS\n","import isString from '../types/isString'\nimport getSymbol from './getSymbol'\nimport SYMBOLS from './symbols'\n\n/**\n *\n * @method getSymbols\n * @param {String} [name]\n * @param {String} [iconSet]\n * @returns {string[]|*}\n */\nconst getSymbols = (name, iconSet = 'icon') => {\n if (isString(name)) {\n return getSymbol(name, iconSet)\n }\n\n return [...SYMBOLS]\n}\n\nexport default getSymbols\n","import SYMBOLS from './symbols'\n\n/**\n * @method getSymbol\n * @param {String} name\n * @param {String} [iconSet]\n * @returns {String}\n */\nconst getSymbol = (name, iconSet = 'icon') => {\n const patternName = /id=\"(.*?)\"/\n const patternSet = /^(\\w+)-/\n const symbols = SYMBOLS\n\n return symbols.find((symbol) => {\n const names = patternName.exec(symbol)\n const fullName = names[1]\n const sets = patternSet.exec(fullName)\n const setName = sets[1]\n const iconName =\n iconSet === 'icon' ? `${iconSet}-${name}` : `${iconSet}-icon-${name}`\n\n return setName === iconSet && fullName === iconName\n })\n}\n\nexport default getSymbol\n","import add from './add'\nimport getSymbols from './getSymbols'\n\n/**\n * 绘制 SVG 图标集\n * ========================================================================\n * @method paint\n * @param {String|Array} symbol\n */\nconst paint = (symbol = '') => {\n const $body = document.body\n let $icons = document.querySelector('#outline-icons')\n let symbols = []\n\n add(symbol)\n symbols = getSymbols()\n\n if ($icons) {\n $icons.innerHTML = symbols.join('')\n } else {\n $icons = document.createElement('div')\n $icons.innerHTML =\n ``\n $body.insertBefore($icons.firstChild, $body.firstChild)\n }\n}\n\nexport default paint\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport SYMBOLS from './symbols'\n\n/**\n * @method add\n * @param {Array|String} symbols\n * @return {Boolean}\n */\nconst add = (symbols) => {\n if (!symbols) {\n return false\n }\n\n if (isArray(symbols) && symbols.length > 0) {\n symbols.forEach((symbol) => {\n /* istanbul ignore else */\n if (SYMBOLS.indexOf(symbol) === -1 && isString(symbol)) {\n SYMBOLS.push(symbol)\n }\n })\n } else {\n /* istanbul ignore else */\n if (isString(symbols)) {\n SYMBOLS.push(symbols)\n }\n }\n}\n\nexport default add\n","import isString from './isString'\n\nconst isSVG = (str) => {\n const declaration = '(?:<\\\\?xml[^>]*>\\\\s*)?'\n const doctype =\n '(?:<\\\\!doctype svg[^>]*\\\\s*(?:\\\\[?(?:\\\\s*]*>\\\\s*)*\\\\]?)*[^>]*>\\\\s*)?'\n const content = ']*>[^]*<\\\\/svg>\\\\s*$'\n const svg = `^\\\\s*${declaration}${doctype}${content}\\\\s*$`\n const pattern = new RegExp(svg, 'i')\n\n return isString(str) && pattern.test(str)\n}\n\nexport default isSVG\n","import createElement from './createElement'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method icon\n * @alias createElement\n * @see createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst icon = (name, options = {}) => {\n return createElement(name, options)\n}\n\nexport default icon\n","import isArray from '../types/isArray'\nimport isString from '../types/isString'\nimport isSVG from '../types/isSVG'\n\n/**\n * 创建 SVG 图标 DOM 元素\n * ========================================================================\n * @method createElement\n * @param {String} name\n * @param {Object} [options]\n * @param {Number|Array} [options.size]\n * @param {String} [options.color]\n * @param {String} [options.iconSet]\n * @returns {HTMLElement}\n */\nconst createElement = (name, options = {}) => {\n const size = options.size || 0\n const color = options.color || ''\n const iconSet = options.iconSet || ''\n const width = isArray(size) ? size[0] : size\n const height = isArray(size) ? size[1] : size\n const defaultRules = size ? `width:${width}px;height:${height}px;` : ''\n const cssRules = color ? defaultRules + `color:${color}` : defaultRules\n const $icon = document.createElement('i')\n let binds = ''\n let svg = ''\n let $svg\n\n if (!isString(name)) {\n return null\n }\n\n if (isSVG(name)) {\n svg = name\n } else {\n binds =\n iconSet && iconSet !== 'icon'\n ? `xlink:href=\"#${iconSet}-icon-${name}\"`\n : `xlink:href=\"#icon-${name}\"`\n svg =\n `` +\n `` +\n ``\n }\n\n $icon.className = 'outline-icon'\n $icon.innerHTML = svg\n\n if (isSVG(name)) {\n $svg = $icon.querySelector('svg')\n $svg.setAttribute('aria-hidden', 'true')\n $svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg')\n $svg.setAttribute('class', 'outline-icon__svg')\n $svg.setAttribute('width', '200')\n $svg.setAttribute('height', '200')\n $svg.style = cssRules\n }\n\n return $icon\n}\n\nexport default createElement\n","import icon from './utils/icons/icon'\nimport createElement from './utils/dom/createElement'\nimport addClass from './utils/dom/addClass'\n\nconst _createButton = (button, rounded = true) => {\n const $icon = icon(button.icon, {\n iconSet: button.iconSet || 'outline',\n color: button.color || '',\n size: button.size\n })\n const $anchor = createElement(\n 'a',\n {\n className: `outline-toolbar__anchor`,\n href: button.link\n },\n [$icon]\n )\n const $button = createElement(\n 'div',\n {\n className: `outline-toolbar__button ${button.name}`\n },\n [button.link ? $anchor : $icon]\n )\n\n addClass($icon, 'outline-toolbar__icon')\n\n if (rounded) {\n addClass($button, 'outline-toolbar_rounded')\n }\n\n if (button.disabled) {\n addClass($button, 'outline-toolbar_disabled')\n }\n\n return $button\n}\n\nexport default _createButton\n","import Base from './base'\n\nimport isString from './utils/types/isString'\nimport isFunction from './utils/types/isFunction'\nimport isObject from './utils/types/isObject'\nimport isArray from './utils/types/isArray'\nimport later from './utils/lang/later'\nimport createElement from './utils/dom/createElement'\nimport addClass from './utils/dom/addClass'\nimport hasClass from './utils/dom/hasClass'\nimport removeClass from './utils/dom/removeClass'\nimport on from './utils/event/on'\nimport off from './utils/event/off'\nimport publish from './utils/observer/emit'\nimport paint from './utils/icons/paint'\n\nimport _createButton from './_createButton'\n\nconst DISABLED = 'outline-toolbar_disabled'\nconst HIDDEN = 'outline-toolbar_hidden'\n\nclass Toolbar extends Base {\n constructor(options) {\n super()\n\n this.attrs = Toolbar.DEFAULTS\n this.$el = null\n this.disabled = false\n this.closed = false\n this.buttons = []\n\n if (options) {\n this.initialize(options)\n }\n }\n\n initialize(options) {\n let created\n\n this.attr(options)\n created = this.attr('created')\n this.disabled = this.attr('disabled')\n this.closed = this.attr('closed')\n\n if (isFunction(created)) {\n created.call(this)\n }\n\n this.render().addListeners()\n\n return this\n }\n\n isDisabled(name) {\n const buttons = this.attr('buttons')\n let button\n\n if (name) {\n button = buttons.find((option) => option.name === name)\n\n return button?.disabled\n }\n\n return this.disabled\n }\n\n isClosed() {\n return this.closed\n }\n\n highlight(name) {\n const button = this.buttons.find((item) => item.name === name)\n const ACTIVE = 'outline-toolbar_active'\n let $button\n\n if ($button) {\n return this\n }\n\n $button = button.$el\n\n if (hasClass($button, ACTIVE)) {\n removeClass($button, ACTIVE)\n } else {\n addClass($button, ACTIVE)\n }\n\n return this\n }\n\n render() {\n const mounted = this.attr('mounted')\n const buttons = this.attr('buttons') || []\n const rounded = this.attr('rounded')\n const placement = this.attr('placement')\n const $buttons = document.createDocumentFragment()\n const $fragment = document.createDocumentFragment()\n\n paint()\n\n buttons.forEach((button) => {\n const $button = _createButton(button, rounded)\n\n $buttons.appendChild($button)\n this.buttons.push({\n name: button.name,\n $el: $button\n })\n })\n\n this.$el = createElement(\n 'div',\n {\n id: 'outline-toolbar',\n className: `outline-toolbar outline-toolbar_${placement}`\n },\n [$buttons]\n )\n $fragment.appendChild(this.$el)\n document.body.appendChild($fragment)\n\n if (this.closed) {\n this.hide()\n }\n\n if (this.disabled) {\n this.disable()\n }\n\n if (isFunction(mounted)) {\n mounted.call(this)\n }\n\n return this\n }\n\n add(button) {\n const $el = this.$el\n const buttons = this.attr('buttons')\n const action = button.action\n const $fragment = document.createDocumentFragment()\n let type\n\n if (isObject(button)) {\n buttons.push(button)\n $fragment.appendChild(_createButton(button))\n } else if (isArray(button)) {\n button.forEach((item) => {\n $fragment.appendChild(_createButton(item))\n })\n }\n $el.appendChild($fragment)\n\n if (action && isFunction(action.handler)) {\n type = action.type || 'click'\n on($el, `.${button.name}`, type, action.handler)\n }\n\n return this\n }\n\n remove(name) {\n const $el = this.$el\n const buttons = this.attr('buttons')\n const button = buttons.find((option) => option.name === name)\n let index = -1\n let $button\n\n if (!button) {\n return this\n }\n\n buttons.forEach((button, i) => {\n if (button.name === name) {\n index = i\n }\n })\n\n if (index > -1) {\n this.attr().buttons.splice(index, 1)\n }\n\n $button = $el.querySelector(`.${name}`)\n this.switch(name, false)\n $el.removeChild($button)\n\n return this\n }\n\n switch(name, enabled) {\n const $el = this.$el\n const buttons = this.attr('buttons')\n const button = buttons.find((option) => option.name === name)\n let action\n let type\n let listener\n let $button\n\n if (!button) {\n return this\n }\n\n buttons.forEach((option) => {\n if (option.name === name) {\n button.disabled = !enabled\n }\n })\n\n action = button.action\n $button = $el.querySelector(`.${name}`)\n\n if (action) {\n type = action.type || 'click'\n listener = action.handler\n }\n\n if (enabled) {\n removeClass($button, DISABLED)\n\n if (type && listener) {\n on($el, `.${name}`, type, listener)\n }\n } else {\n addClass($button, DISABLED)\n\n if (type && listener) {\n off($el, type, listener)\n }\n }\n\n return this\n }\n\n disable(name) {\n const disabled = this.attr('afterDisabled')\n\n if (name) {\n this.switch(name, false)\n } else {\n addClass(this.$el, DISABLED)\n this.removeListeners()\n this.disabled = true\n\n if (isFunction(disabled)) {\n disabled.call(this)\n }\n }\n\n return this\n }\n\n enable(name) {\n const enabled = this.attr('afterEnabled')\n\n if (name) {\n this.switch(name, true)\n } else {\n this.disabled = false\n removeClass(this.$el, DISABLED)\n this.addListeners()\n\n if (isFunction(enabled)) {\n enabled.call(this)\n }\n }\n\n return this\n }\n\n show(name) {\n const opened = this.attr('afterOpened')\n const button = this.attr('buttons').find((option) => option.name === name)\n const $el = this.$el\n let $button\n\n if (name) {\n if (!button) {\n return this\n }\n\n $button = $el.querySelector(`.${name}`)\n removeClass($button, HIDDEN)\n } else {\n removeClass($el, HIDDEN)\n this.closed = false\n\n if (isFunction(opened)) {\n later(() => {\n opened.call(this)\n }, 310)\n }\n }\n\n return this\n }\n\n hide(name) {\n const closed = this.attr('afterClosed')\n const button = this.attr('buttons').find((option) => option.name === name)\n const $el = this.$el\n let $button\n\n if (name) {\n if (!button) {\n return this\n }\n $button = $el.querySelector(`.${name}`)\n addClass($button, HIDDEN)\n } else {\n addClass($el, HIDDEN)\n this.closed = true\n\n if (isFunction(closed)) {\n later(() => {\n closed.call(this)\n }, 310)\n }\n }\n\n return this\n }\n\n toggle() {\n if (this.isClosed()) {\n this.show()\n } else {\n this.hide()\n }\n\n return this\n }\n\n destroy() {\n const beforeDestroy = this.attr('beforeDestroy')\n const afterDestroy = this.attr('afterDestroy')\n let $el = this.$el\n\n if (isFunction(beforeDestroy)) {\n beforeDestroy.call(this)\n }\n\n this.removeListeners()\n document.body.removeChild($el)\n $el = null\n\n this.attr(Toolbar.DEFAULTS)\n this.disabled = false\n this.closed = false\n this.buttons = []\n\n if (isFunction(afterDestroy)) {\n afterDestroy.call(this)\n }\n\n return this\n }\n\n refresh() {\n const $el = this.$el\n const buttons = this.attr('buttons') || []\n\n this.removeListeners()\n $el.innerHTML = ''\n\n buttons.forEach((button) => {\n this.$el.appendChild(_createButton(button))\n })\n\n this.addListeners()\n\n return this\n }\n\n addListeners() {\n const buttons = this.attr('buttons')\n const $el = this.$el\n\n if (!buttons || buttons.length < 1) {\n return this\n }\n\n buttons.forEach((button) => {\n const action = button.action\n const disabled = this.disabled\n let type\n let listener\n let context\n let command\n\n if (disabled) {\n return false\n }\n\n if (action) {\n listener = action.handler\n if (isString(listener)) {\n command = listener\n action.handler = function () {\n publish(command, button.name)\n }\n listener = action.handler\n }\n\n type = action.type || 'click'\n context = action.context\n }\n\n if (isFunction(listener)) {\n on($el, `.${button.name}`, type, listener, context || this, true)\n }\n })\n\n return this\n }\n\n removeListeners() {\n const buttons = this.attr('buttons')\n const $el = this.$el\n\n if (!buttons || buttons.length < 1) {\n return this\n }\n\n buttons.forEach((button) => {\n const action = button.action\n const disabled = this.disabled\n let type\n let listener\n\n if (disabled) {\n return false\n }\n\n if (action) {\n listener = action.handler\n type = action.type || 'click'\n }\n\n if (isFunction(listener)) {\n off($el, type, listener)\n }\n })\n\n return this\n }\n}\n\nToolbar.DEFAULTS = {\n placement: 'ltr',\n closed: false,\n disabled: false,\n rounded: true,\n buttons: [],\n created: null,\n mounted: null,\n afterClosed: null,\n afterOpened: null,\n afterDisabled: null,\n afterEnabled: null,\n beforeDestroy: null,\n afterDestroy: null\n}\n\nexport default Toolbar\n"],"names":["isString","str","hasOwn","obj","prop","hasOwnProperty","Object","prototype","call","toString","val","apply","isFunction","isObject","o","Base","constructor","options","this","attrs","initialize","attr","render","addListeners","value","origin","source","keys","forEach","arguments","length","destroy","removeListeners","reload","isArray","Array","later","fn","delay","setTimeout","isElement","nodeName","tagName","nodeType","isDOM","el","isHTMLCollection","fragment","isTextNode","createElement","children","$fragment","document","createDocumentFragment","$el","isValidChild","child","append","$child","createTextNode","appendChild","toLowerCase","style","cssText","setAttribute","className","every","hasClass","pattern","RegExp","allClass","classList","contains","exec","addClass","add","removeClass","remove","replace","matches","selector","sel","msMatchesSelector","getParentOrHost","host","parentNode","CAPTURE_EVENTS","_off","type","capture","indexOf","_delegateListener","listeners","_listeners","index","listener","i","handler","splice","_delete","removeEventListener","purgeElement","recurse","$element","querySelector","$children","childNodes","filter","getListeners","off","on","data","context","once","evt","target","getTarget","delegateTarget","ctx","includeCTX","startsWith","closest","overrideContext","push","addEventListener","_subscribers","_hasDirectSubscribersFor","topic","has","isDirect","found","position","lastIndexOf","substring","_hasSubscribers","emit","async","execute","subscriber","message","callback","deliver","SYMBOLS","getSymbols","name","iconSet","patternName","patternSet","find","symbol","fullName","iconName","getSymbol","paint","$body","body","$icons","symbols","innerHTML","join","insertBefore","firstChild","isSVG","test","icon","size","color","width","height","defaultRules","cssRules","$icon","$svg","binds","svg","_createButton","button","rounded","$anchor","href","link","$button","disabled","DISABLED","HIDDEN","Toolbar","super","DEFAULTS","closed","buttons","created","isDisabled","option","isClosed","highlight","item","ACTIVE","mounted","placement","$buttons","id","hide","disable","action","switch","removeChild","enabled","enable","show","opened","toggle","beforeDestroy","afterDestroy","refresh","command","publish","afterClosed","afterOpened","afterDisabled","afterEnabled"],"mappings":"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"} \ No newline at end of file