asap-feed-beta 12.2.1-dev.2 → 12.2.1-dev.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -528,7 +528,7 @@ var FeedCommentsComponent = /** @class */ (function () {
528
528
  FeedCommentsComponent.decorators = [
529
529
  { type: Component, args: [{
530
530
  selector: 'feed-comments',
531
- template: "<form *ngIf=\"global.loggedUser()\" class=\"form-comment\">\r\n <img *ngIf=\"global.loggedUser().picture\" [src]=\"global.loggedUser().picture\" class=\"avatar-45\" alt=\"\">\r\n <div *ngIf=\"!global.loggedUser().picture\" class=\"avatar-45-null\">\r\n <i class=\"fa fa-user\"></i>\r\n </div>\r\n <ng-container>\r\n <input type=\"text\" name=\"comment\" [(ngModel)]=\"comment\" (keyup.enter)=\"sendComment(comment)\" [disabled]=\"onLoadingComment\" placeholder=\"{{ 'SendCommentFeed' | translate }}\">\r\n <div class=\"clearfix\"></div>\r\n </ng-container>\r\n</form>\r\n\r\n<div *ngFor=\"let comment of comments | slice:0:limitCommentsTo; let i=index\">\r\n <popover-content #myPopover \r\n placement=\"auto right\"\r\n [closeOnClickOutside]=\"true\" [closeOnMouseOutside]=\"false\" [animation]=\"true\">\r\n <div class='minibio'>\r\n <img *ngIf=\"comment?.user_info?.picture\" [src]=\"comment?.user_info?.picture\" alt=\"\">\r\n <div class=\"info\"><b>{{ comment?.user_info?.name }}</b><br/>\r\n <!-- <span class=\"location\"><i class=\"icon fa fa-globe\" aria-hidden=\"true\"></i>&nbsp;Fortaleza/CE</span> <br/> -->\r\n </div>\r\n </div>\r\n </popover-content>\r\n <a *ngIf=\"comment\" [routerLink]=\"['/profile',comment?.user_info?.id]\">\r\n <img *ngIf=\"comment?.user_info?.picture\" [src]=\"comment?.user_info?.picture\" class=\"avatar-45\" alt=\"\" [popover]=\"myPopover\" [popoverOnHover]=\"true\">\r\n <div *ngIf=\"!comment?.user_info?.picture\" class=\"avatar-45-null\" [popover]=\"myPopover\" [popoverOnHover]=\"true\">\r\n <i class=\"fa fa-user\"></i>\r\n </div></a>\r\n <div class=\"comments\">\r\n\r\n <ng-container *ngIf=\"global?.loggedUser() && !comment.onEdit\">\r\n <div class=\"feed-comment-option\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"appMenu\"\r\n *ngIf=\"comment?.user_info?.id == global?.loggedUser().id\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #appMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"onEditComment(comment)\">\r\n <mat-icon>create</mat-icon>\r\n {{ 'Edit' | translate }}\r\n </button>\r\n <button mat-menu-item (click)=\"deleteComment(comment.id)\">\r\n <mat-icon>delete</mat-icon>\r\n {{ 'Remove' | translate }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </ng-container>\r\n <p *ngIf=\"!comment.onEdit\"><b>{{ comment?.user_info?.name || 'N\u00E3o Informado' }}</b>&nbsp;<span [innerHTML]=\"linkify(comment.comment)\"></span></p>\r\n <form class=\"form-comment-reply\"*ngIf=\"comment.onEdit\">\r\n <input class=\"editing-comment-input\" type=\"text\" [(ngModel)]=\"editedComment\" name=\"editedComment\" [disabled]=\"onLoadingReply\" (keyup.enter)=\"updateComment(comment.id, editedComment)\" (keyup.esc)=\"onEditComment(comment)\" placeholder=\"{{ 'Comment' | translate }}\">\r\n <div class=\"clearfix\"></div>\r\n </form>\r\n \r\n\r\n <small class=\"text-primary\"> <b>{{ comment?.likes?.length ? comment?.likes?.length : '' }}</b> <a [ngClass]=\"{'disabled-action': onLoadingLike || !global?.loggedUser()}\" (click)=\"sendLikeComment(comment.id, comment?.likeForMeID, comment)\"> \r\n <ng-container *ngIf=\"comment.likeForMe\">\r\n Curtiu\r\n </ng-container>\r\n <ng-container *ngIf=\"!comment.likeForMe\">\r\n Curtir\r\n </ng-container>\r\n </a></small> - \r\n <small class=\"reply-comment text-primary m-0\"><b>{{ comment?.replys?.length ? comment?.replys?.length : '' }} </b> <a [ngClass]=\"{'disabled-action': !global?.loggedUser()}\" (click)=\"onReplyComment(i)\">Responder</a></small> - \r\n <small class=\"txt-gray m-0\" *ngIf=\"comment?.edited\">editado - </small>\r\n <!-- <small class=\"txt-gray m-0\">{{ comment.updated_at | amTimeAgo}} </small> -->\r\n <small class=\"txt-gray m-0\">{{ comment.updated_at | amCalendar | amDateFormat: 'DD/MM/YYYY' }} </small>\r\n <!-- Reply Section -->\r\n <form class=\"form-comment-reply\"*ngIf=\"replyingComment[i] == true\">\r\n <input type=\"text\" [disabled]=\"onLoadingReply\" [(ngModel)]=\"reply\" name=\"reply\" (keyup.enter)=\"replyComment(comment.id, reply, comment.user_info, i)\" placeholder=\"{{ 'ReplyThisComment' | translate }}\">\r\n <div class=\"clearfix\"></div>\r\n </form>\r\n <!-- <code>{{ limitReplysTo[i] | json }}</code> -->\r\n <ng-container *ngIf=\"comment.replys && comment.replys.length > 0\">\r\n <ng-container *ngFor=\"let subItem of comment.replys | slice:0:comment.limitReplysTo;\">\r\n <popover-content #myPopover \r\n placement=\"auto right\"\r\n [closeOnClickOutside]=\"true\" [closeOnMouseOutside]=\"false\" [animation]=\"true\">\r\n <div class='minibio'>\r\n <img *ngIf=\"subItem.user_info?.picture\" [src]=\"subItem?.user_info?.picture\" class=\"avatar-45\" alt=\"\">\r\n <div class=\"info\"><b>{{ comment?.user_info?.name }}</b><br/>\r\n <!-- <span class=\"location\"><i class=\"icon fa fa-globe\" aria-hidden=\"true\"></i>&nbsp;Fortaleza/CE</span> -->\r\n </div>\r\n </div>\r\n </popover-content>\r\n <div class=\"reply-avatar\">\r\n <img *ngIf=\"subItem.user_info?.picture\" [src]=\"subItem?.user_info?.picture\" alt=\"\" class=\"avatar-45-null\" [popover]=\"myPopover\" [popoverOnHover]=\"true\">\r\n <div *ngIf=\"!subItem.user_info.picture || subItem.user_info.picture == ''\" class=\"avatar-45-null\">\r\n <i class=\"fa fa-user\"></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"replys\">\r\n <ng-container *ngIf=\"global.loggedUser()\">\r\n <ng-container *ngIf=\"global?.loggedUser()?.id === subItem.user_info.id && !subItem.onEdit\">\r\n <div class=\"feed-comment-option\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"appSubMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #appSubMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"onEditReply(subItem)\">\r\n <mat-icon>create</mat-icon>\r\n {{ 'Edit' | translate }}\r\n </button>\r\n <button mat-menu-item (click)=\"deleteReply(comment.id, subItem.id)\">\r\n <mat-icon>delete</mat-icon>\r\n {{ 'Remove' | translate }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"!subItem.onEdit\">\r\n <p> <b>{{ subItem.user_info.name || 'N\u00E3o Informado' }}</b> {{ subItem.comment }}</p>\r\n <!-- <small class=\"txt-gray\">{{ subItem.updated_at | amTimeAgo}} </small> -->\r\n <small class=\"txt-gray\">{{ subItem.updated_at | amCalendar | amDateFormat: 'DD/MM/YYYY' }} </small>\r\n </ng-container>\r\n <ng-container *ngIf=\"subItem.onEdit\">\r\n <form class=\"form-comment-reply form-reply-edited\">\r\n <input type=\"text\" [disabled]=\"onLoadingReply\" [(ngModel)]=\"editedReply\" name=\"editedReply\" (keyup.enter)=\"updateReply(comment.id, subItem, editedReply)\" placeholder=\"{{ 'ReplyThisComment' | translate }}\">\r\n <div class=\"clearfix\"></div>\r\n </form>\r\n </ng-container>\r\n\r\n </div>\r\n \r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"comment?.replys.length > 1 && (comment.replys.length - comment.limitReplysTo > 0)\">\r\n <div class=\"SeeMore on-reply\">\r\n <i class=\"fa fa-reply\"></i>\r\n <span (click)=\"loadMoreReplys(comment)\" *ngIf=\"(comments?.length > limitCommentsTo)\"> {{ comment.replys.length - comment.limitReplysTo}} {{ 'Replys' | translate }}</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <!-- End Reply Section -->\r\n\r\n\r\n </div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"(comments?.length > 2)\">\r\n <div class=\"SeeMore\">\r\n <span (click)=\"loadMoreComments()\" *ngIf=\"(comments?.length > limitCommentsTo)\">{{ 'SeeMore' | translate }} {{ comments?.length - limitCommentsTo}} {{ 'Comments' | translate }}</span>\r\n </div>\r\n</ng-container>",
531
+ template: "<form *ngIf=\"global.loggedUser()\" class=\"form-comment\">\r\n <img *ngIf=\"global.loggedUser().picture\" [src]=\"global.loggedUser().picture\" class=\"avatar-45\" alt=\"\">\r\n <div *ngIf=\"!global.loggedUser().picture\" class=\"avatar-45-null\">\r\n <i class=\"fa fa-user\"></i>\r\n </div>\r\n <ng-container>\r\n <input type=\"text\" name=\"comment\" [(ngModel)]=\"comment\" (keyup.enter)=\"sendComment(comment)\" [disabled]=\"onLoadingComment\" placeholder=\"{{ 'SendCommentFeed' | translate }}\">\r\n <div class=\"clearfix\"></div>\r\n </ng-container>\r\n</form>\r\n\r\n<div *ngFor=\"let comment of comments | slice:0:limitCommentsTo; let i=index\">\r\n <popover-content #myPopover \r\n placement=\"auto right\"\r\n [closeOnClickOutside]=\"true\" [closeOnMouseOutside]=\"false\" [animation]=\"true\">\r\n <div class='minibio'>\r\n <img *ngIf=\"comment?.user_info?.picture\" [src]=\"comment?.user_info?.picture\" alt=\"\">\r\n <div class=\"info\"><b>{{ comment?.user_info?.name }}</b><br/>\r\n <!-- <span class=\"location\"><i class=\"icon fa fa-globe\" aria-hidden=\"true\"></i>&nbsp;Fortaleza/CE</span> <br/> -->\r\n </div>\r\n </div>\r\n </popover-content>\r\n <a *ngIf=\"comment\" [routerLink]=\"['/profile',comment?.user_info?.id]\">\r\n <img *ngIf=\"comment?.user_info?.picture\" [src]=\"comment?.user_info?.picture\" class=\"avatar-45\" alt=\"\" [popover]=\"myPopover\" [popoverOnHover]=\"true\">\r\n <div *ngIf=\"!comment?.user_info?.picture\" class=\"avatar-45-null\" [popover]=\"myPopover\" [popoverOnHover]=\"true\">\r\n <i class=\"fa fa-user\"></i>\r\n </div></a>\r\n <div class=\"comments\">\r\n\r\n <ng-container *ngIf=\"global?.loggedUser() && !comment.onEdit\">\r\n <div class=\"feed-comment-option\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"appMenu\"\r\n *ngIf=\"comment?.user_info?.id == global?.loggedUser().id\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #appMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"onEditComment(comment)\">\r\n <mat-icon>create</mat-icon>\r\n {{ 'Edit' | translate }}\r\n </button>\r\n <button mat-menu-item (click)=\"deleteComment(comment.id)\">\r\n <mat-icon>delete</mat-icon>\r\n {{ 'Remove' | translate }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </ng-container>\r\n <p *ngIf=\"!comment.onEdit\"><b>{{ comment?.user_info?.name || 'N\u00E3o Informado' }}</b>&nbsp;<span [innerHTML]=\"linkify(comment.comment)\"></span></p>\r\n <form class=\"form-comment-reply\"*ngIf=\"comment.onEdit\">\r\n <input class=\"editing-comment-input\" type=\"text\" [(ngModel)]=\"editedComment\" name=\"editedComment\" [disabled]=\"onLoadingReply\" (keyup.enter)=\"updateComment(comment.id, editedComment)\" (keyup.esc)=\"onEditComment(comment)\" placeholder=\"{{ 'Comment' | translate }}\">\r\n <div class=\"clearfix\"></div>\r\n </form>\r\n \r\n\r\n <small class=\"text-primary\"> <b>{{ comment?.likes?.length ? comment?.likes?.length : '' }}</b> <a [ngClass]=\"{'disabled-action': onLoadingLike || !global?.loggedUser()}\" (click)=\"sendLikeComment(comment.id, comment?.likeForMeID, comment)\"> \r\n <ng-container *ngIf=\"comment.likeForMe\">\r\n Curtiu\r\n </ng-container>\r\n <ng-container *ngIf=\"!comment.likeForMe\">\r\n Curtir\r\n </ng-container>\r\n </a></small> - \r\n <small class=\"reply-comment text-primary m-0\"><b>{{ comment?.replys?.length ? comment?.replys?.length : '' }} </b> <a [ngClass]=\"{'disabled-action': !global?.loggedUser()}\" (click)=\"onReplyComment(i)\">Responder</a></small> - \r\n <small class=\"txt-gray m-0\" *ngIf=\"comment?.edited\">editado - </small>\r\n <small class=\"txt-gray m-0\">{{ comment.updated_at | amTimeAgo}} </small>\r\n <!-- Reply Section -->\r\n <form class=\"form-comment-reply\"*ngIf=\"replyingComment[i] == true\">\r\n <input type=\"text\" [disabled]=\"onLoadingReply\" [(ngModel)]=\"reply\" name=\"reply\" (keyup.enter)=\"replyComment(comment.id, reply, comment.user_info, i)\" placeholder=\"{{ 'ReplyThisComment' | translate }}\">\r\n <div class=\"clearfix\"></div>\r\n </form>\r\n <!-- <code>{{ limitReplysTo[i] | json }}</code> -->\r\n <ng-container *ngIf=\"comment.replys && comment.replys.length > 0\">\r\n <ng-container *ngFor=\"let subItem of comment.replys | slice:0:comment.limitReplysTo;\">\r\n <popover-content #myPopover \r\n placement=\"auto right\"\r\n [closeOnClickOutside]=\"true\" [closeOnMouseOutside]=\"false\" [animation]=\"true\">\r\n <div class='minibio'>\r\n <img *ngIf=\"subItem.user_info?.picture\" [src]=\"subItem?.user_info?.picture\" class=\"avatar-45\" alt=\"\">\r\n <div class=\"info\"><b>{{ comment?.user_info?.name }}</b><br/>\r\n <!-- <span class=\"location\"><i class=\"icon fa fa-globe\" aria-hidden=\"true\"></i>&nbsp;Fortaleza/CE</span> -->\r\n </div>\r\n </div>\r\n </popover-content>\r\n <div class=\"reply-avatar\">\r\n <img *ngIf=\"subItem.user_info?.picture\" [src]=\"subItem?.user_info?.picture\" alt=\"\" class=\"avatar-45-null\" [popover]=\"myPopover\" [popoverOnHover]=\"true\">\r\n <div *ngIf=\"!subItem.user_info.picture || subItem.user_info.picture == ''\" class=\"avatar-45-null\">\r\n <i class=\"fa fa-user\"></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"replys\">\r\n <ng-container *ngIf=\"global.loggedUser()\">\r\n <ng-container *ngIf=\"global?.loggedUser()?.id === subItem.user_info.id && !subItem.onEdit\">\r\n <div class=\"feed-comment-option\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"appSubMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #appSubMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"onEditReply(subItem)\">\r\n <mat-icon>create</mat-icon>\r\n {{ 'Edit' | translate }}\r\n </button>\r\n <button mat-menu-item (click)=\"deleteReply(comment.id, subItem.id)\">\r\n <mat-icon>delete</mat-icon>\r\n {{ 'Remove' | translate }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"!subItem.onEdit\">\r\n <p> <b>{{ subItem.user_info.name || 'N\u00E3o Informado' }}</b> {{ subItem.comment }}</p>\r\n <small class=\"txt-gray\">{{ subItem.updated_at | amTimeAgo}} </small> \r\n </ng-container>\r\n <ng-container *ngIf=\"subItem.onEdit\">\r\n <form class=\"form-comment-reply form-reply-edited\">\r\n <input type=\"text\" [disabled]=\"onLoadingReply\" [(ngModel)]=\"editedReply\" name=\"editedReply\" (keyup.enter)=\"updateReply(comment.id, subItem, editedReply)\" placeholder=\"{{ 'ReplyThisComment' | translate }}\">\r\n <div class=\"clearfix\"></div>\r\n </form>\r\n </ng-container>\r\n\r\n </div>\r\n \r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"comment?.replys.length > 1 && (comment.replys.length - comment.limitReplysTo > 0)\">\r\n <div class=\"SeeMore on-reply\">\r\n <i class=\"fa fa-reply\"></i>\r\n <span (click)=\"loadMoreReplys(comment)\" *ngIf=\"(comments?.length > limitCommentsTo)\"> {{ comment.replys.length - comment.limitReplysTo}} {{ 'Replys' | translate }}</span>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <!-- End Reply Section -->\r\n\r\n\r\n </div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"(comments?.length > 2)\">\r\n <div class=\"SeeMore\">\r\n <span (click)=\"loadMoreComments()\" *ngIf=\"(comments?.length > limitCommentsTo)\">{{ 'SeeMore' | translate }} {{ comments?.length - limitCommentsTo}} {{ 'Comments' | translate }}</span>\r\n </div>\r\n</ng-container>",
532
532
  styles: [".SeeMore{margin-bottom:10px;font-size:14px}.on-reply{font-size:13px;margin-top:-9px;margin-bottom:0;text-align:left!important;margin-left:65px}.on-reply span{margin-left:25px}.comments{margin:10px -15px!important}.comments .feed-comment-option{margin-top:0;margin-right:10px}.comments p{margin:11px 7px 10px 60px;font-size:14px;word-break:break-all;white-space:normal;word-break:break-word;word-wrap:break-word;background-color:#e6e6e6;padding:10px;border-radius:18px}.comments small{margin:5px 3px 5px 65px}.disabled-action{pointer-events:none;opacity:.6}.like-comment{margin:5px 3px 5px 65px}.reply-comment{margin-left:15px}.feed-comment-box{background-color:#f2f3f5;border-radius:18px;box-sizing:border-box;color:#1c1e21;padding:10px;line-height:16px;margin:0;max-width:100%;word-wrap:break-word;position:relative;white-space:normal;word-break:break-word}.reply-avatar{margin-left:56px;margin-top:5px}.replys{margin:5px 3px 5px 70px}.replys p{margin:0 8px 3px 31px!important;white-space:normal;word-break:break-word!important;word-wrap:break-word!important;background-color:#f5f3f3;padding:10px;border-radius:18px;width:calc(100% - 39px)!important}.replys .feed-comment-option{margin-top:0;margin-right:5px}.replys small{margin-left:35px}.form-comment-reply{width:100%;margin:0!important;padding:7px 0 10px 78px!important}.form-comment-reply input[type=text]{float:left;width:calc(100% - 15px);border:1px solid #eee;box-shadow:none;border-radius:30px;padding:8px 13px;outline:0}.form-comment-reply .editing-comment-input{padding-top:8px;margin-top:-11px;margin-left:-8px}.form-reply-edited{padding:0 0 9px 32px!important}", "li,ul{list-style:none!important}a,a:hover{text-decoration:none}.text-primary{color:var(--main-color)}.card{border-radius:6px;box-shadow:1px 1px 10px rgba(201,191,187,.7);-moz-box-shadow:1px 1px 10px rgba(201,191,187,.7);-webkit-box-shadow:1px 1px 10px rgba(201,191,187,.7);border:none;margin-bottom:30px;margin-top:0}.card .card-content{flex:1 1 auto;padding:1.25rem}.comments{margin:30px -15px}.comments h4{font-size:16px;color:#414141;margin-bottom:0;font-weight:600}.comments p{margin:5px 15px 5px 65px;font-size:14px;word-break:break-all}.post-text{white-space:pre-wrap!important;font-size:14px}.form-feed{width:100%;margin:0 0 25px!important;padding:10px 15px!important;border-radius:8px;box-shadow:1px 1px 15px rgba(201,191,187,.7);-moz-box-shadow:1px 1px 15px rgba(201,191,187,.7);-webkit-box-shadow:1px 1px 15px rgba(201,191,187,.7);background-color:var(--bg-card)!important}.form-feed .title{font-size:16px;margin-bottom:10px;border-bottom:1px solid #eee;padding-bottom:10px}.form-feed textarea{float:left;width:calc(100% - 50px);border-bottom:1px solid #eee;border-top:transparent;border-left:transparent;border-right:transparent;box-shadow:none;padding:5px 10px;outline:0!important}.form-input-btn a{float:right;border:none!important;box-shadow:none!important;background:0 0;padding:0;margin-top:12px;position:relative;right:0;left:0;margin-bottom:0;color:#8e8994}.form-input-btn a .material-icons{font-size:18px}.mat-dialog-container{padding:0!important}.form-comment{width:100%;margin:0!important;padding:15px 0 0!important;border-top:1px solid #eee}.form-comment input[type=text]{float:left;width:calc(100% - 50px);border:1px solid #eee;box-shadow:none;border-radius:30px;padding:5px 10px;outline:0}input::-webkit-input-placeholder{color:#ccc}input::-moz-placeholder{color:#ccc}input:-ms-input-placeholder{color:#ccc}input::-ms-input-placeholder{color:#ccc}input::placeholder{color:#ccc}.avatar-30{float:left;width:30px;height:30px;margin-right:10px;border-radius:50%}.avatar-30-null{display:flex;align-items:center;justify-content:center;float:left;width:30px;height:30px;margin-right:10px;border-radius:50%;background:#fafafa;color:#bbb}.comment-time{position:absolute;right:15px}.avatar-45{float:left;width:40px;height:40px;margin-right:10px;border-radius:50%}.avatar-45-null{display:flex;align-items:center;justify-content:center;float:left;width:40px;height:40px;margin-right:10px;border-radius:50%;background:#fafafa;color:#bbb;border:1.3px solid var(--main-color)}.super-post{position:absolute;right:15px;top:10px;font-size:1.8em;color:#888}.icons-comments{margin:10px 0 0;padding:10px 20px;border-top:1px solid #eee;border-bottom:1px solid #eee}.icons-comments li{display:inline-block;margin-right:30px;font-size:14px}.icons-comments li:last-child{margin-right:0;position:absolute;right:20px}.icons-comments li a{color:#4a4a4a;cursor:pointer}.icons-comments li a.active,.icons-comments li a:hover{color:var(--main-color)}.icons-comments .fa{font-size:16px}.card-file{width:100%;margin:0 auto 30px;box-shadow:0 0 30px rgba(204,204,204,.4);border:none;border-radius:12px;transition:.5s}.card-file:hover{box-shadow:0 0 30px rgba(204,204,204,.8)}.card-file .card-cover{display:flex;align-items:center;justify-content:center;padding:15px;position:relative;width:100%;height:160px;border-top-left-radius:16px;border-top-right-radius:12px;-o-object-fit:cover;object-fit:cover;background-size:cover;background-position:center;z-index:1;background:var(--main-color);color:#fff!important}.card-file .card-content{height:auto;padding:0 15px}.card-file .card-content .description{color:#888}.card-file .title{color:#fff;margin-bottom:0;font-size:18px;text-shadow:2px 2px 2px #101010}.btn-feed{width:auto;font-size:12px;padding:2px 5px;border-radius:30px;font-weight:600;text-transform:capitalize}.btn-group-xs>.btn,.btn-xs{padding:2px 15px 3px;font-size:13px;line-height:1;border-radius:30px}.btn-primary,.btn-primary:hover{color:var(--text-btn)!important;background-color:var(--bg-btn);border-color:var(--bg-btn)}.btn-primary.focus,.btn-primary:focus{background-color:var(--bg-btn);border-color:var(--bg-btn);box-shadow:0 0 0 .2rem rgba(0,0,0,.5)}.btn-primary.disabled,.btn-primary:disabled,.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:var(--text-btn)!important;background-color:var(--bg-btn);border-color:var(--bg-btn)}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,0,0,.5)}.btn-secondary{color:#fff;background-color:#111;border-color:#111}.btn-secondary:hover{color:#fff;background-color:#333;border-color:#333}.btn-secondary.focus,.btn-secondary:focus{background-color:#333;border-color:#333;box-shadow:0 0 0 .2rem rgba(0,0,0,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#111;border-color:#111}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#333;border-color:#333}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,0,0,.5)}.ribbon{width:150px;height:150px;overflow:hidden;position:absolute;z-index:1}.ribbon::after,.ribbon::before{position:absolute;z-index:-1;content:\"\";display:block;border:5px solid var(--bg-btn)}.ribbon span{position:absolute;display:block;width:225px;padding:15px 0;background-color:var(--bg-btn);box-shadow:0 5px 10px rgba(0,0,0,.1);color:#fff;font:700 18px/1 Lato,sans-serif;text-shadow:0 1px 1px rgba(0,0,0,.2);text-transform:uppercase;text-align:center}.ribbon-top-left{top:-10px;left:-10px;background:0 0}.ribbon-top-left::after,.ribbon-top-left::before{border-top-color:transparent;border-left-color:transparent}.ribbon-top-left::before{top:0;right:0}.ribbon-top-left::after{bottom:0;left:0}.ribbon-top-left span{right:-25px;top:30px;transform:rotate(-45deg)}.ribbon-top-right{top:-10px;right:-10px;background:0 0!important}.ribbon-top-right::after,.ribbon-top-right::before{border-top-color:transparent;border-right-color:transparent}.ribbon-top-right::before{top:0;left:0}.ribbon-top-right::after{bottom:0;right:0}.ribbon-top-right span{left:-25px;top:30px;transform:rotate(45deg)}.ribbon-bottom-left{bottom:-10px;left:-10px}.ribbon-bottom-left::after,.ribbon-bottom-left::before{border-bottom-color:transparent;border-left-color:transparent}.ribbon-bottom-left::before{bottom:0;right:0}.ribbon-bottom-left::after{top:0;left:0}.ribbon-bottom-left span{right:-25px;bottom:30px;transform:rotate(225deg)}.ribbon-bottom-right{bottom:-10px;right:-10px}.ribbon-bottom-right::after,.ribbon-bottom-right::before{border-bottom-color:transparent;border-right-color:transparent}.ribbon-bottom-right::before{bottom:0;left:0}.ribbon-bottom-right::after{top:0;right:0}.ribbon-bottom-right span{left:-25px;bottom:30px;transform:rotate(-225deg)}.video-container{min-height:200px}.video-container img{width:100%;-o-object-fit:cover;object-fit:cover;-webkit-filter:blur(10px);filter:blur(10px)}.video-player{top:0;left:1px;width:calc(100% - 2px)}.tmp-file-buttons-overlay{opacity:1}.overlayed{opacity:1!important;visibility:visible}.tmp-file-status-overlay{position:absolute;background:rgba(0,0,0,.5);text-align:center;z-index:9999999999;color:#fff;width:156px;height:120px;padding:20px}.tmp-file-status-overlay p{color:#fff}.tmp-file-buttons-overlay{background:rgba(0,0,0,.5);width:156px;height:120px;position:absolute;z-index:99999;visibility:visible;opacity:1;transition:opacity .5s ease-out}.tmp-file-remove-button{position:absolute;right:5px;text-align:right;width:10px;color:#fff;padding:0 1px;border-radius:0}.tmp-file-content{width:156px;height:120px;overflow:hidden}.tmp-upload-video{-o-object-fit:contain;object-fit:contain}.tmp-file-wrapper{position:relative}.tmp-upload{-o-object-fit:cover;object-fit:cover;width:156px;height:120px}.tmp-file-wrapper-container{padding:20px 0 0;margin:20px -15px;border-width:1px 0;border-color:#ccc;border-style:solid}.hide{display:none}.masonry{display:flex;flex-flow:row wrap;margin:20px 0 -2px}.masonry-brick{flex:auto;height:250px;min-width:150px;margin:2px;position:relative;cursor:pointer}.masonry-img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.masonry-brick:nth-child(4n+1){width:50%}.masonry-brick:nth-child(4n+2){width:40%}.masonry-brick:nth-child(4n+3){width:20%}.masonry-brick:nth-child(4n+4){width:30%}.masonry-brick-full{width:100%!important;height:291px!important;overflow:hidden;outline:rgba(0,0,0,.2) solid 1px;outline-offset:-1px}.card-body{border-bottom-left-radius:16px;border-bottom-right-radius:16px}.card .circle{float:left;position:relative;display:flex;align-items:center;justify-content:center;width:60px;height:60px;border-radius:50%;margin:-30px 10px 15px 15px;background:#eee;z-index:1;font-size:1.5em;color:#414141!important}.card-team .card-content{width:100%;height:160px;margin-bottom:10px}.card-classroom{padding:15px;box-shadow:1px 1px 5px rgba(201,191,187,.7);-moz-box-shadow:1px 1px 5px rgba(201,191,187,.7);-webkit-box-shadow:1px 1px 5px rgba(201,191,187,.7);margin-bottom:20px}.play-overlay{position:absolute;top:0;left:0;width:100%;text-align:center;height:291px;line-height:291px;background:rgba(0,0,0,.05)}.play-overlay img{width:80px;height:80px}.preview-wrapper{position:relative;margin-top:30px}.preview-image img{outline:rgba(0,0,0,.2) solid 1px;outline-offset:-1px}.preview-button{position:absolute;top:0;right:0;color:#fff}.preview-text{position:relative;background:#f9f9f9;border:1px solid #ccc;padding:11px;margin-top:-7px}.img-with-outline{outline:rgba(0,0,0,.2) solid 1px;outline-offset:-1px}.mt-5{margin-top:2em}.feed-card{width:100%;margin-bottom:30px;box-shadow:1px 1px 15px rgba(201,191,187,.7);-moz-box-shadow:1px 1px 15px rgba(201,191,187,.7);-webkit-box-shadow:1px 1px 15px rgba(201,191,187,.7)}.feed-card .feed-header{margin-bottom:10px}.feed-card .feed-header .feed-avatar{float:left;width:40px;height:40px;margin-right:5px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:2px solid #e6e5e5}.feed-card .feed-header .feed-buttom-option{position:absolute;top:5px;right:0;z-index:21}.mat-card{padding:15px 0 10px!important}.mat-card .mat-card-header .mat-card-title h4{font-size:16px;margin-bottom:0}.mat-card .mat-card-header .mat-card-title p{font-size:13px;color:#aaa}.container-mat-card{display:flex;align-items:flex-end;justify-content:flex-end;position:relative;overflow:hidden;margin:0 0 10px}.bg-mat-card{display:block;position:absolute;z-index:15;width:100%;height:calc(100% - 30px);-webkit-filter:blur(40px) brightness(80%);filter:blur(40px) brightness(80%);background-size:cover;background-repeat:no-repeat;background-position:center}.mat-card-image{position:relative;z-index:20;margin:0!important;-o-object-fit:contain;object-fit:contain;height:auto;max-height:540px;display:block;width:100%}.feed-comment-option{float:right;margin-top:-10px;margin-left:0}.clickable{cursor:pointer;color:var(--main-color)}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:.2s ease-in-out}.show-scroll{opacity:1;transition:.2s ease-in-out}.feed-actions{color:#ccc;font-size:16px;margin-right:10px;margin-bottom:5px;margin-left:10px}.feed-actions span{margin-left:5px}.feed-actions .btn{background:0 0!important;border:none!important}.feed-likes{font-size:13px;margin-top:10px}a.is-liked{color:var(--main-color)!important}a.disabled-like{color:#ccc!important;cursor:not-allowed;text-decoration:none;pointer-events:none}.carousel{margin-bottom:10px;margin-left:0;margin-right:0}.carousel-item{-o-object-fit:cover!important;object-fit:cover!important;max-height:400px;-o-object-position:center;object-position:center}.video-player{position:initial!important}::ng-deep .ws-pre-wrap h4{font-size:18px!important}::ng-deep .ws-pre-wrap a{color:var(--main-color)}.SeeMore{display:block;color:var(--main-color)!important;text-align:center;cursor:pointer}.carousel-stage{position:relative;z-index:0;min-height:100px}.carousel-stage .progress{height:8px;border-radius:30px}.carousel-stage .progress .progress-bar{background:var(--main-color)}.carousel-stage .courses-image-item{border-radius:5%;-o-object-fit:cover;object-fit:cover}.carousel-stage .courses-item{padding:15px}.carousel-stage .courses-title{text-align:center}.carousel-stage .courses-title a{color:#000!important;font-weight:400!important}.customNavigation a{display:flex;justify-content:center;align-items:center;width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.8);color:var(--main-color)!important;text-align:center}.customNavigation a:hover{background:#fff;color:var(--main-color)}.prev{position:absolute;width:100%;top:50%;left:-15px;margin-top:-15px;z-index:10}.next{position:absolute;width:100%;top:50%;right:-15px;margin-top:-15px;z-index:10}.owl-dots{position:absolute;top:-40px;right:15px;outline:0!important}.owl-dots .owl-dot{background:#ccc!important;border-radius:50%;height:10px;width:10px;padding:0!important;border:none;margin:0 2px;outline:0!important}.owl-dots .owl-dot.active{background:var(--main-color)!important;outline:0!important}::ng-deep .owl-carousel-o-stories .owl-next,::ng-deep .owl-carousel-o-stories .owl-prev{position:absolute!important;top:50%!important;transform:translateY(-50%)!important;display:block!important;border-radius:50%!important;margin-top:-5px!important}::ng-deep .owl-carousel-o-stories .owl-prev{left:5px!important}::ng-deep .owl-carousel-o-stories .owl-next{right:5px!important}::ng-deep .swiper-stage .swiper-container{padding:0}::ng-deep .swiper-stage .swiper-button-next,::ng-deep .swiper-stage .swiper-button-prev{display:flex;align-items:center;justify-content:center;margin-top:0!important;width:25px;height:25px;border-radius:50%;background-color:var(--main-color)!important;opacity:.7!important}::ng-deep .swiper-stage .swiper-button-prev{left:10px;right:auto!important}::ng-deep .swiper-stage .swiper-button-next{right:10px;left:auto!important}::ng-deep .swiper-stage .swiper-button-next:after,::ng-deep .swiper-stage .swiper-button-prev:after{font-size:13px!important;color:#fff}::ng-deep .swiper-stage .swiper-button-disabled{opacity:0!important}.carousel-stories{display:inline-block;width:100%;height:145px;margin:0;border-radius:6px;text-transform:uppercase;font-size:1em;font-weight:500;background-repeat:no-repeat;background-size:cover;cursor:pointer;background-position:center!important}.carousel-stories .item:focus{outline:0}.carousel-stories .stories-body{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;text-align:center;height:100%;padding:0}.carousel-stories .stories-body a{font-size:12px;color:#fff;margin-bottom:10px;text-shadow:0 1px 1px rgba(0,0,0,.6)}.carousel-stories .stories-body a:hover{color:#ccc}.mat-button,.mat-flat-button,.mat-icon-button,.mat-stroked-button{outline:0!important}::ng-deep .mat-menu-panel{border-radius:6px!important;outline:0!important}::ng-deep .mat-menu-panel .mat-menu-content:not(:empty){padding-top:0!important;padding-bottom:0!important}::ng-deep .mat-menu-panel .mat-menu-item{color:#414141;font-size:15px;font-style:normal;font-weight:400;letter-spacing:1px;outline:0!important}.progress-bar-custom span{display:inline-block;height:100%;border-radius:3px;box-shadow:0 1px 0 rgba(37,21,21,.5) inset;transition:width .4s ease-in-out}.green-progress span{background-image:linear-gradient(to bottom,#fff,var(--main-color))}.stripes span{background-size:30px 30px;background-image:linear-gradient(135deg,#ff4e4ef3 25%,transparent 25%,transparent 50%,rgba(236,47,47,.972) 50%,rgba(240,0,0,.15) 75%,transparent 75%,transparent);-webkit-animation:3s linear infinite animate-stripes;animation:3s linear infinite animate-stripes}.container-stipes{width:100%;padding:0 10px;font-weight:700}.keep-logged{position:relative;height:150px;background:var(--main-color);top:0;color:#fff!important;z-index:99;opacity:.9;width:100%;border:0;left:0;right:0}.keep-logged button{background:#fff!important;color:var(--main-color)!important}.scrollable{overflow-y:scroll;height:100vh}.alert-primary{color:#fff;background-color:var(--main-color)!important;background:var(--main-color)!important}.mat-progress-bar{height:17px;border-radius:5px}@-webkit-keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}.p-channel{color:#3c4858;font-weight:500;margin-bottom:0!important}@media (max-width:767px){.form-feed textarea{font-size:12px}.btn-feed{width:auto;font-size:11px;padding:2px 5px;border-radius:30px;font-weight:600;text-transform:capitalize}.carousel-stories{width:120px;height:120px}.keep-logged{height:175px}.keep-logged h3{font-size:1.1rem}.keep-logged button{font-size:1rem}.btn-group-xs>.btn,.btn-xs{padding:2px 5px;font-size:11px;line-height:1;border-radius:30px}}::ng-deep .mat-card-header-text{width:100%!important;margin:0}::ng-deep .popover{background:#fff!important;border:0!important;box-shadow:1px 1px 15px rgba(201,191,187,.7)!important;-moz-box-shadow:1px 1px 15px rgba(201,191,187,.7)!important;-webkit-box-shadow:1px 1px 15px rgba(201,191,187,.7)!important}.minibio{padding:10px;border-radius:10px}.minibio img{width:30%;max-width:100px;display:inline-block;padding-right:10px}.minibio .info{display:inline-block;vertical-align:top}.minibio .info .icon{color:#d4d4d4}.minibio .info ul{list-style:none}.minibio .info li{display:inline-block}"]
533
533
  }] }
534
534
  ];
@@ -589,4 +589,4 @@ if (false) {
589
589
  /** @type {?} */
590
590
  FeedCommentsComponent.prototype.asapService;
591
591
  }
592
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1jb21tZW50cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hc2FwLWZlZWQtYmV0YS8iLCJzb3VyY2VzIjpbImxpYi9mZWVkLWNvbW1lbnRzL2ZlZWQtY29tbWVudHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFaEQ7SUFzQkUsK0JBQ1MsTUFBYyxFQUNkLEVBQW9CLEVBQ3BCLFdBQTRCLEVBQzVCLE9BQXFCLEVBQ3JCLFdBQXdCO1FBSnhCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxPQUFFLEdBQUYsRUFBRSxDQUFrQjtRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWxCMUIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXJCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBS2xCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQVE1QixDQUFDOzs7O0lBRUwsd0NBQVE7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJ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Ozs7O0lBQXhCLFVBQXlCLEtBQUs7SUFFOUIsQ0FBQzs7OztJQUVNLHlDQUFTOzs7SUFBaEI7UUFBQSxpQkFRQztRQVBDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFDLFFBQWE7WUFDdEQsS0FBSSxDQUFDLFlBQVksR0FBRztnQkFDbEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRzs7OztnQkFBQyxVQUFDLElBQVMsSUFBSyxPQUFBLElBQUksQ0FBQyxJQUFJLEVBQVQsQ0FBUyxFQUFDO2dCQUNsRCxXQUFXLEVBQUUsR0FBRzthQUNqQixDQUFDO1FBQ0osQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOztnQkExV0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6Qiw4MVNBQTZDOztpQkFFOUM7Ozs7Z0JBTlEsTUFBTTtnQkFKTixnQkFBZ0I7Z0JBQ2hCLGVBQWU7Z0JBQ2YsWUFBWTtnQkFFSixXQUFXOzs7MEJBU3pCLEtBQUs7dUJBQ0wsS0FBSzs7SUFtV1IsNEJBQUM7Q0FBQSxBQTNXRCxJQTJXQztTQXRXWSxxQkFBcUI7OztJQUVoQyx3Q0FBaUI7O0lBQ2pCLHFDQUFjOztJQUNkLHlDQUFxQjs7SUFDckIsZ0RBQTRCOztJQUM1Qiw2Q0FBb0I7O0lBQ3BCLGdEQUEyQjs7SUFDM0IsOENBQXlCOztJQUN6Qix3Q0FBZTs7SUFBQSxtQ0FBRTs7SUFDakIsc0NBQWE7O0lBQ2IsOENBQXFCOztJQUNyQiw0Q0FBbUI7O0lBQ25CLDhDQUE2Qjs7SUFDN0IsK0NBQThCOztJQUM5QixpREFBZ0M7O0lBRzlCLHVDQUFxQjs7SUFDckIsbUNBQTJCOztJQUMzQiw0Q0FBbUM7O0lBQ25DLHdDQUE0Qjs7SUFDNUIsNENBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFuZ3VsYXJGaXJlc3RvcmUgfSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XHJcbmltcG9ydCB7IEFzYXBGZWVkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FzYXAtZmVlZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7IHBhdGggfSBmcm9tICcuLi9jb25zdGFudHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgR2xvYmFsLCBBc2FwU2VydmljZSB9IGZyb20gJ2FzYXAtY3J1ZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ZlZWQtY29tbWVudHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWVkLWNvbW1lbnRzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mZWVkLWNvbW1lbnRzLmNvbXBvbmVudC5zY3NzJywgJy4uL2FzYXAtZmVlZC5iZXRhLmNvbXBvbmVudGUuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWVkQ29tbWVudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBmZWVkX2lkO1xyXG4gIEBJbnB1dCgpIHVzZXI7XHJcbiAgcHVibGljIGNvbW1lbnRzID0gW107XHJcbiAgcHVibGljIHJlcGx5aW5nQ29tbWVudCA9IFtdO1xyXG4gIHB1YmxpYyBtZW50aW9uc0xpc3Q7XHJcbiAgcHVibGljIGxpbWl0Q29tbWVudHNUbyA9IDM7XHJcbiAgcHVibGljIGxpbWl0UmVwbHlzVG8gPSAxO1xyXG4gIHB1YmxpYyBjb21tZW50O25nIFxyXG4gIHB1YmxpYyByZXBseTtcclxuICBwdWJsaWMgZWRpdGVkQ29tbWVudDtcclxuICBwdWJsaWMgZWRpdGVkUmVwbHk7XHJcbiAgcHVibGljIG9uTG9hZGluZ0xpa2UgPSBmYWxzZTtcclxuICBwdWJsaWMgb25Mb2FkaW5nUmVwbHkgPSBmYWxzZTtcclxuICBwdWJsaWMgb25Mb2FkaW5nQ29tbWVudCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBnbG9iYWw6IEdsb2JhbCxcclxuICAgIHB1YmxpYyBkYjogQW5ndWxhckZpcmVzdG9yZSxcclxuICAgIHB1YmxpYyBmZWVkU2VydmljZTogQXNhcEZlZWRTZXJ2aWNlLFxyXG4gICAgcHVibGljIHNlcnZpY2U6IFV0aWxzU2VydmljZSxcclxuICAgIHB1YmxpYyBhc2FwU2VydmljZTogQXNhcFNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZ2V0Q29tbWVudHModGhpcy5mZWVkX2lkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb21tZW50cyhmZWVkX2lkKSB7XHJcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5kYi5jb2xsZWN0aW9uKHBhdGgoKS5mZWVkKVxyXG4gICAgICAuZG9jKGZlZWRfaWQpXHJcbiAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycsIChyZWY6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBxdWVyeSA9IHJlZi5vcmRlckJ5KFwidXBkYXRlZF9hdFwiLCBcImRlc2NcIik7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgY29sbGVjdGlvbi5zbmFwc2hvdENoYW5nZXMoKS5zdWJzY3JpYmUoKGNvbW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNvbW1lbnRzID0gW107XHJcbiAgICAgIGNvbW1lbnQubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGxldCBkYXRhID0gaXRlbS5wYXlsb2FkLmRvYy5kYXRhKCk7XHJcbiAgICAgICAgZGF0YS5pZCA9IGl0ZW0ucGF5bG9hZC5kb2MuaWQ7XHJcbiAgICAgICAgZGF0YS5saWtlRm9yTWUgPSBmYWxzZTtcclxuICAgICAgICBkYXRhLmxpbWl0UmVwbHlzVG8gPSAxO1xyXG5cclxuICAgICAgICBjb25zdCBsaWtlc0NvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgICAgICAuZG9jKGZlZWRfaWQpXHJcbiAgICAgICAgICAuY29sbGVjdGlvbignY29tbWVudHMnKVxyXG4gICAgICAgICAgLmRvYyhkYXRhLmlkKVxyXG4gICAgICAgICAgLmNvbGxlY3Rpb24oJ2xpa2UnKTtcclxuXHJcblxyXG4gICAgICAgIGxpa2VzQ29sbGVjdGlvbi5zbmFwc2hvdENoYW5nZXMoKS5zdWJzY3JpYmUobGlrZSA9PiB7XHJcbiAgICAgICAgICBkYXRhLmxpa2VzID0gW107XHJcbiAgICAgICAgICBsaWtlLm1hcChzdWJJdGVtTGlrZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsaWtlRGF0YSA9IHN1Ykl0ZW1MaWtlLnBheWxvYWQuZG9jLmRhdGEoKTtcclxuICAgICAgICAgICAgbGlrZURhdGEuaWQgPSBzdWJJdGVtTGlrZS5wYXlsb2FkLmRvY1snaWQnXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkpIHtcclxuICAgICAgICAgICAgICBpZiAobGlrZURhdGEudXNlcl9pbmZvICYmIGxpa2VEYXRhLnVzZXJfaW5mby5pZCA9PT0gdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmxpa2VGb3JNZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmxpa2VGb3JNZUlEID0gbGlrZURhdGEuaWQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkYXRhLmxpa2VzLnB1c2gobGlrZURhdGEpO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCByZXBseUNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgICAgICAuZG9jKGZlZWRfaWQpXHJcbiAgICAgICAgICAuY29sbGVjdGlvbignY29tbWVudHMnKVxyXG4gICAgICAgICAgLmRvYyhkYXRhLmlkKVxyXG4gICAgICAgICAgLmNvbGxlY3Rpb24oJ3JlcGx5JywgcmVmID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZi5vcmRlckJ5KCd1cGRhdGVkX2F0JywgJ2Rlc2MnKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXBseUNvbGxlY3Rpb24uc25hcHNob3RDaGFuZ2VzKCkuc3Vic2NyaWJlKHJlcGx5ID0+IHtcclxuICAgICAgICAgIGRhdGEucmVwbHlzID0gW107XHJcbiAgICAgICAgICByZXBseS5tYXAoc3ViSXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXBseURhdGEgPSBzdWJJdGVtLnBheWxvYWQuZG9jLmRhdGEoKTtcclxuICAgICAgICAgICAgcmVwbHlEYXRhLmlkID0gc3ViSXRlbS5wYXlsb2FkLmRvY1snaWQnXTtcclxuXHJcbiAgICAgICAgICAgIGRhdGEucmVwbHlzLnB1c2gocmVwbHlEYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21tZW50cy5wdXNoKGRhdGEpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVwbHlDb21tZW50KGkpIHtcclxuICAgIGlmICghdGhpcy5yZXBseWluZ0NvbW1lbnRbaV0pIHtcclxuICAgICAgdGhpcy5yZXBseWluZ0NvbW1lbnRbaV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucmVwbHlpbmdDb21tZW50W2ldID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VuZENvbW1lbnQoY29tbWVudCkge1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNvbW1lbnQ6IGNvbW1lbnQsXHJcbiAgICAgIHVwZGF0ZWRfYXQ6IERhdGUubm93KCksXHJcbiAgICAgIGNyZWF0ZWRfYXQ6IERhdGUubm93KCksXHJcbiAgICAgIHVzZXJfaW5mbzoge1xyXG4gICAgICAgIGlkOiB0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkuaWQsXHJcbiAgICAgICAgbmFtZTogdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLm5hbWUsXHJcbiAgICAgICAgcGljdHVyZTogdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLnBpY3R1cmVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgIC5kb2ModGhpcy5mZWVkX2lkKVxyXG4gICAgICAuY29sbGVjdGlvbignY29tbWVudHMnKTtcclxuXHJcbiAgICBpZiAoY29tbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nQ29tbWVudCA9IHRydWU7XHJcbiAgICAgIGNvbGxlY3Rpb24uYWRkKGRhdGEpO1xyXG5cclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0ge1xyXG4gICAgICAgIHNvdXJjZTond2ViJyxcclxuICAgICAgICB0aXRsZTogYE5vdm8gY29tZW50w6FyaW9gLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkubmFtZX06ICR7Y29tbWVudH1gLFxyXG4gICAgICAgIHVzZXI6IHRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKSxcclxuICAgICAgICBjbGllbnRfaWQ6dGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLmNsaWVudF9pZCxcclxuICAgICAgICByZWRpcmVjdDogYC9wb3J0YWwvJHt0aGlzLmZlZWRfaWR9YFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlcnZpY2Uuc2VuZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHRoaXMudXNlciwgJ2ZlZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuY29tbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlcGx5Q29tbWVudChjb21tZW50X2lkLCBjb21tZW50LCB1c2VyX2luZm8sIGkpIHtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBjb21tZW50OiBjb21tZW50LFxyXG4gICAgICBjcmVhdGVkX2F0OiBEYXRlLm5vdygpLFxyXG4gICAgICB1cGRhdGVkX2F0OiBEYXRlLm5vdygpLFxyXG4gICAgICB1c2VyX2luZm86IHtcclxuICAgICAgICBpZDogdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLmlkLFxyXG4gICAgICAgIG5hbWU6IHRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKS5uYW1lLFxyXG4gICAgICAgIHBpY3R1cmU6IHRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKS5waWN0dXJlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29tbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nUmVwbHkgPSB0cnVlO1xyXG4gICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5kYi5jb2xsZWN0aW9uKHBhdGgoKS5mZWVkKVxyXG4gICAgICAgIC5kb2ModGhpcy5mZWVkX2lkKVxyXG4gICAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycpXHJcbiAgICAgICAgLmRvYyhjb21tZW50X2lkKVxyXG4gICAgICAgIC5jb2xsZWN0aW9uKCdyZXBseScpO1xyXG5cclxuICAgICAgY29sbGVjdGlvbi5hZGQoZGF0YSk7XHJcblxyXG5cclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0ge1xyXG4gICAgICAgIHNvdXJjZTond2ViJyxcclxuICAgICAgICB0aXRsZTogYE5vdmEgUmVzcG9zdGFgLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkubmFtZX0gcmVzcG9uZGV1OiAke2NvbW1lbnR9YCxcclxuICAgICAgICBjbGllbnRfaWQ6dGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLmNsaWVudF9pZCxcclxuICAgICAgICB1c2VyOiB0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCksXHJcbiAgICAgICAgcmVkaXJlY3Q6IGAvcG9ydGFsLyR7dGhpcy5mZWVkX2lkfWBcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXJ2aWNlLnNlbmROb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCB1c2VyX2luZm8sICdmZWVkJyk7XHJcblxyXG4gICAgICB0aGlzLnJlcGx5ID0gXCJcIjtcclxuICAgICAgdGhpcy5vbkxvYWRpbmdSZXBseSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlcGx5aW5nQ29tbWVudFtpXSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZVJlcGx5KGNvbW1lbnRfaWQsIHJlcGx5X2lkKSB7XHJcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5kYi5jb2xsZWN0aW9uKHBhdGgoKS5mZWVkKVxyXG4gICAgICAuZG9jKHRoaXMuZmVlZF9pZClcclxuICAgICAgLmNvbGxlY3Rpb24oJ2NvbW1lbnRzJylcclxuICAgICAgLmRvYyhjb21tZW50X2lkKVxyXG4gICAgICAuY29sbGVjdGlvbigncmVwbHknKVxyXG4gICAgICAuZG9jKHJlcGx5X2lkKTtcclxuXHJcbiAgICBjb2xsZWN0aW9uLmRlbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUNvbW1lbnQoY29tbWVudF9pZCkge1xyXG4gICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuZGIuY29sbGVjdGlvbihwYXRoKCkuZmVlZClcclxuICAgICAgLmRvYyh0aGlzLmZlZWRfaWQpXHJcbiAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycpXHJcbiAgICAgIC5kb2MoY29tbWVudF9pZCk7XHJcblxyXG4gICAgY29sbGVjdGlvbi5kZWxldGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kTGlrZUNvbW1lbnQoY29tbWVudF9pZCwgbGlrZV9pZCA9IG51bGwsIGl0ZW0pIHtcclxuICAgIHRoaXMub25Mb2FkaW5nTGlrZSA9IHRydWU7XHJcbiAgICBpZiAoIWl0ZW0ubGlrZUZvck1lKSB7XHJcbiAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgdXBkYXRlZF9hdDogRGF0ZS5ub3coKSxcclxuICAgICAgICB1c2VyX2luZm86IHtcclxuICAgICAgICAgIGlkOiB0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkuaWQsXHJcbiAgICAgICAgICBuYW1lOiB0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkubmFtZSxcclxuICAgICAgICAgIHBpY3R1cmU6IHRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKS5waWN0dXJlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5kYi5jb2xsZWN0aW9uKHBhdGgoKS5mZWVkKVxyXG4gICAgICAgIC5kb2ModGhpcy5mZWVkX2lkKVxyXG4gICAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycpXHJcbiAgICAgICAgLmRvYyhjb21tZW50X2lkKVxyXG4gICAgICAgIC5jb2xsZWN0aW9uKCdsaWtlJyk7XHJcblxyXG4gICAgICBjb2xsZWN0aW9uLmFkZChkYXRhKTtcclxuXHJcblxyXG4gICAgICBjb25zdCBub3RpZmljYXRpb24gPSB7XHJcbiAgICAgICAgc291cmNlOid3ZWInLFxyXG4gICAgICAgIHRpdGxlOiBgTm92YSBDdXJ0aWRhYCxcclxuICAgICAgICBkZXNjcmlwdGlvbjogYCR7dGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLm5hbWV9IGN1cnRpdSBzZXUgY29tZW50w6FyaW86ICR7aXRlbS5jb21tZW50fWAsXHJcbiAgICAgICAgY2xpZW50X2lkOnRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKS5jbGllbnRfaWQsXHJcbiAgICAgICAgdXNlcjogdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLFxyXG4gICAgICAgIHJlZGlyZWN0OiBgL3BvcnRhbC8ke3RoaXMuZmVlZF9pZH1gXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2VydmljZS5zZW5kTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgaXRlbS51c2VyX2luZm8sICdmZWVkJyk7XHJcblxyXG4gICAgICBpdGVtLmxpa2VGb3JNZSA9IHRydWU7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nTGlrZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgICAgLmRvYyh0aGlzLmZlZWRfaWQpXHJcbiAgICAgICAgLmNvbGxlY3Rpb24oJ2NvbW1lbnRzJylcclxuICAgICAgICAuZG9jKGNvbW1lbnRfaWQpXHJcbiAgICAgICAgLmNvbGxlY3Rpb24oJ2xpa2UnKVxyXG4gICAgICAgIC5kb2MobGlrZV9pZCk7XHJcblxyXG4gICAgICBjb2xsZWN0aW9uLmRlbGV0ZSgpO1xyXG4gICAgICBpdGVtLmxpa2VGb3JNZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm9uTG9hZGluZ0xpa2UgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkTW9yZUNvbW1lbnRzKCkge1xyXG4gICAgdGhpcy5saW1pdENvbW1lbnRzVG8gPSB0aGlzLmxpbWl0Q29tbWVudHNUbyArIDM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZE1vcmVSZXBseXMoaXRlbSkge1xyXG4gICAgaXRlbS5saW1pdFJlcGx5c1RvID0gaXRlbS5saW1pdFJlcGx5c1RvICsgMztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsaW5raWZ5KHN0cikge1xyXG4gICAgdmFyIHJlOiBhbnk7XHJcbiAgICByZSA9IFtcclxuICAgICAgXCJcXFxcYigoPzpodHRwcz98ZnRwKTovL1teXFxcXHNcXFwiJzw+XSspXFxcXGJcIixcclxuICAgICAgXCJcXFxcYih3d3dcXFxcLlteXFxcXHNcXFwiJzw+XSspXFxcXGJcIixcclxuICAgICAgXCJcXFxcYihcXFxcd1tcXFxcdy4rLV0qQFtcXFxcdy4tXStcXFxcLlthLXpdezIsNn0pXFxcXGJcIixcclxuICAgICAgXCIjKFthLXowLTldKylcIl07XHJcbiAgICByZSA9IG5ldyBSZWdFeHAocmUuam9pbignfCcpLCBcImdpXCIpO1xyXG5cclxuICAgIGlmIChzdHIpIHtcclxuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlLCBmdW5jdGlvbiAobWF0Y2gsIHVybCwgd3d3LCBtYWlsLCB0d2l0bGVyKSB7XHJcbiAgICAgICAgaWYgKHVybClcclxuICAgICAgICAgIHJldHVybiBcIjxhIGNsYXNzPSd0ZXh0LXByaW1hcnknIHRhcmdldD0nX2JsYW5rJyAoY2xpY2spPSdyZWRpcmVjdE5ld0xpbmsodXJsKScgaHJlZj1cXFwiXCIgKyB1cmwgKyBcIlxcXCI+XCIgKyB1cmwgKyBcIjwvYT5cIjtcclxuICAgICAgICBpZiAod3d3KVxyXG4gICAgICAgICAgcmV0dXJuIFwiPGEgY2xhc3M9J3RleHQtcHJpbWFyeScgaHJlZj1cXFwiaHR0cDovL1wiICsgd3d3ICsgXCJcXFwiPlwiICsgd3d3ICsgXCI8L2E+XCI7XHJcbiAgICAgICAgaWYgKG1haWwpXHJcbiAgICAgICAgICByZXR1cm4gXCI8YSBjbGFzcz0ndGV4dC1wcmltYXJ5JyBocmVmPVxcXCIjPC9hPlwiO1xyXG4gICAgICAgIGlmICh0d2l0bGVyKVxyXG4gICAgICAgICAgcmV0dXJuIFwiPGEgY2xhc3M9J3RleHQtcHJpbWFyeScgaHJlZj1cXFwicG9ydGFsL3NlYXJjaC9cIiArIGVuY29kZVVSSUNvbXBvbmVudCgnIycgKyB0d2l0bGVyKSArIFwiXFxcIj4jXCIgKyB0d2l0bGVyICsgXCI8L2E+XCI7XHJcbiAgICAgICAgLy8gcmV0dXJuIFwiPGEgY2xhc3M9J3RleHQtcHJpbWFyeScgaHJlZj1cXFwiI1xcXCI+I1wiICsgdHdpdGxlciArIFwiPC9hPlwiO1xyXG5cclxuICAgICAgICAvLyBzaG91bGRudCBnZXQgaGVyZSwgYnV0IGp1c3QgaW4gY2FzZVxyXG4gICAgICAgIHJldHVybiBtYXRjaDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FZGl0UmVwbHkocmVwbHkpIHtcclxuICAgIHRoaXMuZWRpdGVkUmVwbHkgPSByZXBseS5jb21tZW50O1xyXG4gICAgaWYgKHJlcGx5Lm9uRWRpdCkge1xyXG4gICAgICByZXBseS5vbkVkaXQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXBseS5vbkVkaXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRWRpdENvbW1lbnQoY29tbWVudCkge1xyXG4gICAgdGhpcy5lZGl0ZWRDb21tZW50ID0gY29tbWVudC5jb21tZW50O1xyXG5cclxuICAgIGlmIChjb21tZW50Lm9uRWRpdCkge1xyXG4gICAgICBjb21tZW50Lm9uRWRpdCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbW1lbnQub25FZGl0ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDb21tZW50KGlkLCBjb21tZW50KSB7XHJcbiAgICB0aGlzLm9uTG9hZGluZ0NvbW1lbnQgPSB0cnVlO1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNvbW1lbnQ6IHRoaXMuZWRpdGVkQ29tbWVudCxcclxuICAgICAgZWRpdGVkOiB0cnVlLFxyXG4gICAgICB1cGRhdGVkX2F0OiBEYXRlLm5vdygpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuZGIuY29sbGVjdGlvbihwYXRoKCkuZmVlZClcclxuICAgICAgLmRvYyh0aGlzLmZlZWRfaWQpXHJcbiAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycpXHJcbiAgICAgIC5kb2MoaWQpO1xyXG5cclxuICAgIGlmIChjb21tZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sbGVjdGlvbi51cGRhdGUoZGF0YSk7XHJcbiAgICAgIHRoaXMuZWRpdGVkQ29tbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVJlcGx5KGNvbW1lbnRfaWQsIG9sZF9yZXBseSwgcmVwbHkpIHtcclxuICAgIHRoaXMub25Mb2FkaW5nUmVwbHkgPSB0cnVlO1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNvbW1lbnQ6IHJlcGx5LFxyXG4gICAgICB1cGRhdGVkX2F0OiBEYXRlLm5vdygpLFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgIC5kb2ModGhpcy5mZWVkX2lkKVxyXG4gICAgICAuY29sbGVjdGlvbignY29tbWVudHMnKVxyXG4gICAgICAuZG9jKGNvbW1lbnRfaWQpXHJcbiAgICAgIC5jb2xsZWN0aW9uKCdyZXBseScpXHJcbiAgICAgIC5kb2Mob2xkX3JlcGx5LmlkKTtcclxuICAgIGNvbGxlY3Rpb24udXBkYXRlKGRhdGEpO1xyXG4gICAgdGhpcy5lZGl0ZWRDb21tZW50ID0gXCJcIjtcclxuICAgIHRoaXMub25Mb2FkaW5nUmVwbHkgPSBmYWxzZTtcclxuICAgIG9sZF9yZXBseS5vbkVkaXQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hNZXRpb25Vc2VycyhldmVudCkge1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkVXNlcnMoKSB7XHJcbiAgICB0aGlzLmFzYXBTZXJ2aWNlLmVudGl0eU5hbWUgPSAnYXNhcC11c2VyJztcclxuICAgIHRoaXMuYXNhcFNlcnZpY2UuZ2V0UmVzb3VyY2VzKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubWVudGlvbnNMaXN0ID0ge1xyXG4gICAgICAgIGl0ZW1zOiByZXNwb25zZS5kYXRhLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLm5hbWUpLFxyXG4gICAgICAgIHRyaWdnZXJDaGFyOiAnQCdcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
592
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1jb21tZW50cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hc2FwLWZlZWQtYmV0YS8iLCJzb3VyY2VzIjpbImxpYi9mZWVkLWNvbW1lbnRzL2ZlZWQtY29tbWVudHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFaEQ7SUFzQkUsK0JBQ1MsTUFBYyxFQUNkLEVBQW9CLEVBQ3BCLFdBQTRCLEVBQzVCLE9BQXFCLEVBQ3JCLFdBQXdCO1FBSnhCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxPQUFFLEdBQUYsRUFBRSxDQUFrQjtRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWxCMUIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXJCLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBS2xCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQVE1QixDQUFDOzs7O0lBRUwsd0NBQVE7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJ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Ozs7O0lBQXhCLFVBQXlCLEtBQUs7SUFFOUIsQ0FBQzs7OztJQUVNLHlDQUFTOzs7SUFBaEI7UUFBQSxpQkFRQztRQVBDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVM7Ozs7UUFBQyxVQUFDLFFBQWE7WUFDdEQsS0FBSSxDQUFDLFlBQVksR0FBRztnQkFDbEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRzs7OztnQkFBQyxVQUFDLElBQVMsSUFBSyxPQUFBLElBQUksQ0FBQyxJQUFJLEVBQVQsQ0FBUyxFQUFDO2dCQUNsRCxXQUFXLEVBQUUsR0FBRzthQUNqQixDQUFDO1FBQ0osQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOztnQkExV0YsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6Qiw4bVNBQTZDOztpQkFFOUM7Ozs7Z0JBTlEsTUFBTTtnQkFKTixnQkFBZ0I7Z0JBQ2hCLGVBQWU7Z0JBQ2YsWUFBWTtnQkFFSixXQUFXOzs7MEJBU3pCLEtBQUs7dUJBQ0wsS0FBSzs7SUFtV1IsNEJBQUM7Q0FBQSxBQTNXRCxJQTJXQztTQXRXWSxxQkFBcUI7OztJQUVoQyx3Q0FBaUI7O0lBQ2pCLHFDQUFjOztJQUNkLHlDQUFxQjs7SUFDckIsZ0RBQTRCOztJQUM1Qiw2Q0FBb0I7O0lBQ3BCLGdEQUEyQjs7SUFDM0IsOENBQXlCOztJQUN6Qix3Q0FBZTs7SUFBQSxtQ0FBRTs7SUFDakIsc0NBQWE7O0lBQ2IsOENBQXFCOztJQUNyQiw0Q0FBbUI7O0lBQ25CLDhDQUE2Qjs7SUFDN0IsK0NBQThCOztJQUM5QixpREFBZ0M7O0lBRzlCLHVDQUFxQjs7SUFDckIsbUNBQTJCOztJQUMzQiw0Q0FBbUM7O0lBQ25DLHdDQUE0Qjs7SUFDNUIsNENBQStCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFuZ3VsYXJGaXJlc3RvcmUgfSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XHJcbmltcG9ydCB7IEFzYXBGZWVkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FzYXAtZmVlZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7IHBhdGggfSBmcm9tICcuLi9jb25zdGFudHMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgR2xvYmFsLCBBc2FwU2VydmljZSB9IGZyb20gJ2FzYXAtY3J1ZCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ZlZWQtY29tbWVudHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWVkLWNvbW1lbnRzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mZWVkLWNvbW1lbnRzLmNvbXBvbmVudC5zY3NzJywgJy4uL2FzYXAtZmVlZC5iZXRhLmNvbXBvbmVudGUuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWVkQ29tbWVudHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBmZWVkX2lkO1xyXG4gIEBJbnB1dCgpIHVzZXI7XHJcbiAgcHVibGljIGNvbW1lbnRzID0gW107XHJcbiAgcHVibGljIHJlcGx5aW5nQ29tbWVudCA9IFtdO1xyXG4gIHB1YmxpYyBtZW50aW9uc0xpc3Q7XHJcbiAgcHVibGljIGxpbWl0Q29tbWVudHNUbyA9IDM7XHJcbiAgcHVibGljIGxpbWl0UmVwbHlzVG8gPSAxO1xyXG4gIHB1YmxpYyBjb21tZW50O25nIFxyXG4gIHB1YmxpYyByZXBseTtcclxuICBwdWJsaWMgZWRpdGVkQ29tbWVudDtcclxuICBwdWJsaWMgZWRpdGVkUmVwbHk7XHJcbiAgcHVibGljIG9uTG9hZGluZ0xpa2UgPSBmYWxzZTtcclxuICBwdWJsaWMgb25Mb2FkaW5nUmVwbHkgPSBmYWxzZTtcclxuICBwdWJsaWMgb25Mb2FkaW5nQ29tbWVudCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBnbG9iYWw6IEdsb2JhbCxcclxuICAgIHB1YmxpYyBkYjogQW5ndWxhckZpcmVzdG9yZSxcclxuICAgIHB1YmxpYyBmZWVkU2VydmljZTogQXNhcEZlZWRTZXJ2aWNlLFxyXG4gICAgcHVibGljIHNlcnZpY2U6IFV0aWxzU2VydmljZSxcclxuICAgIHB1YmxpYyBhc2FwU2VydmljZTogQXNhcFNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuZ2V0Q29tbWVudHModGhpcy5mZWVkX2lkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb21tZW50cyhmZWVkX2lkKSB7XHJcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5kYi5jb2xsZWN0aW9uKHBhdGgoKS5mZWVkKVxyXG4gICAgICAuZG9jKGZlZWRfaWQpXHJcbiAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycsIChyZWY6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBxdWVyeSA9IHJlZi5vcmRlckJ5KFwidXBkYXRlZF9hdFwiLCBcImRlc2NcIik7XHJcbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xyXG4gICAgICB9KTtcclxuXHJcblxyXG4gICAgY29sbGVjdGlvbi5zbmFwc2hvdENoYW5nZXMoKS5zdWJzY3JpYmUoKGNvbW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmNvbW1lbnRzID0gW107XHJcbiAgICAgIGNvbW1lbnQubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGxldCBkYXRhID0gaXRlbS5wYXlsb2FkLmRvYy5kYXRhKCk7XHJcbiAgICAgICAgZGF0YS5pZCA9IGl0ZW0ucGF5bG9hZC5kb2MuaWQ7XHJcbiAgICAgICAgZGF0YS5saWtlRm9yTWUgPSBmYWxzZTtcclxuICAgICAgICBkYXRhLmxpbWl0UmVwbHlzVG8gPSAxO1xyXG5cclxuICAgICAgICBjb25zdCBsaWtlc0NvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgICAgICAuZG9jKGZlZWRfaWQpXHJcbiAgICAgICAgICAuY29sbGVjdGlvbignY29tbWVudHMnKVxyXG4gICAgICAgICAgLmRvYyhkYXRhLmlkKVxyXG4gICAgICAgICAgLmNvbGxlY3Rpb24oJ2xpa2UnKTtcclxuXHJcblxyXG4gICAgICAgIGxpa2VzQ29sbGVjdGlvbi5zbmFwc2hvdENoYW5nZXMoKS5zdWJzY3JpYmUobGlrZSA9PiB7XHJcbiAgICAgICAgICBkYXRhLmxpa2VzID0gW107XHJcbiAgICAgICAgICBsaWtlLm1hcChzdWJJdGVtTGlrZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsaWtlRGF0YSA9IHN1Ykl0ZW1MaWtlLnBheWxvYWQuZG9jLmRhdGEoKTtcclxuICAgICAgICAgICAgbGlrZURhdGEuaWQgPSBzdWJJdGVtTGlrZS5wYXlsb2FkLmRvY1snaWQnXTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkpIHtcclxuICAgICAgICAgICAgICBpZiAobGlrZURhdGEudXNlcl9pbmZvICYmIGxpa2VEYXRhLnVzZXJfaW5mby5pZCA9PT0gdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmxpa2VGb3JNZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmxpa2VGb3JNZUlEID0gbGlrZURhdGEuaWQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkYXRhLmxpa2VzLnB1c2gobGlrZURhdGEpO1xyXG5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCByZXBseUNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgICAgICAuZG9jKGZlZWRfaWQpXHJcbiAgICAgICAgICAuY29sbGVjdGlvbignY29tbWVudHMnKVxyXG4gICAgICAgICAgLmRvYyhkYXRhLmlkKVxyXG4gICAgICAgICAgLmNvbGxlY3Rpb24oJ3JlcGx5JywgcmVmID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZi5vcmRlckJ5KCd1cGRhdGVkX2F0JywgJ2Rlc2MnKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXBseUNvbGxlY3Rpb24uc25hcHNob3RDaGFuZ2VzKCkuc3Vic2NyaWJlKHJlcGx5ID0+IHtcclxuICAgICAgICAgIGRhdGEucmVwbHlzID0gW107XHJcbiAgICAgICAgICByZXBseS5tYXAoc3ViSXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGxldCByZXBseURhdGEgPSBzdWJJdGVtLnBheWxvYWQuZG9jLmRhdGEoKTtcclxuICAgICAgICAgICAgcmVwbHlEYXRhLmlkID0gc3ViSXRlbS5wYXlsb2FkLmRvY1snaWQnXTtcclxuXHJcbiAgICAgICAgICAgIGRhdGEucmVwbHlzLnB1c2gocmVwbHlEYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21tZW50cy5wdXNoKGRhdGEpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVwbHlDb21tZW50KGkpIHtcclxuICAgIGlmICghdGhpcy5yZXBseWluZ0NvbW1lbnRbaV0pIHtcclxuICAgICAgdGhpcy5yZXBseWluZ0NvbW1lbnRbaV0gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucmVwbHlpbmdDb21tZW50W2ldID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VuZENvbW1lbnQoY29tbWVudCkge1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNvbW1lbnQ6IGNvbW1lbnQsXHJcbiAgICAgIHVwZGF0ZWRfYXQ6IERhdGUubm93KCksXHJcbiAgICAgIGNyZWF0ZWRfYXQ6IERhdGUubm93KCksXHJcbiAgICAgIHVzZXJfaW5mbzoge1xyXG4gICAgICAgIGlkOiB0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkuaWQsXHJcbiAgICAgICAgbmFtZTogdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLm5hbWUsXHJcbiAgICAgICAgcGljdHVyZTogdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLnBpY3R1cmVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgIC5kb2ModGhpcy5mZWVkX2lkKVxyXG4gICAgICAuY29sbGVjdGlvbignY29tbWVudHMnKTtcclxuXHJcbiAgICBpZiAoY29tbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nQ29tbWVudCA9IHRydWU7XHJcbiAgICAgIGNvbGxlY3Rpb24uYWRkKGRhdGEpO1xyXG5cclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0ge1xyXG4gICAgICAgIHNvdXJjZTond2ViJyxcclxuICAgICAgICB0aXRsZTogYE5vdm8gY29tZW50w6FyaW9gLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkubmFtZX06ICR7Y29tbWVudH1gLFxyXG4gICAgICAgIHVzZXI6IHRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKSxcclxuICAgICAgICBjbGllbnRfaWQ6dGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLmNsaWVudF9pZCxcclxuICAgICAgICByZWRpcmVjdDogYC9wb3J0YWwvJHt0aGlzLmZlZWRfaWR9YFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlcnZpY2Uuc2VuZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHRoaXMudXNlciwgJ2ZlZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuY29tbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlcGx5Q29tbWVudChjb21tZW50X2lkLCBjb21tZW50LCB1c2VyX2luZm8sIGkpIHtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBjb21tZW50OiBjb21tZW50LFxyXG4gICAgICBjcmVhdGVkX2F0OiBEYXRlLm5vdygpLFxyXG4gICAgICB1cGRhdGVkX2F0OiBEYXRlLm5vdygpLFxyXG4gICAgICB1c2VyX2luZm86IHtcclxuICAgICAgICBpZDogdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLmlkLFxyXG4gICAgICAgIG5hbWU6IHRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKS5uYW1lLFxyXG4gICAgICAgIHBpY3R1cmU6IHRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKS5waWN0dXJlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29tbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nUmVwbHkgPSB0cnVlO1xyXG4gICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5kYi5jb2xsZWN0aW9uKHBhdGgoKS5mZWVkKVxyXG4gICAgICAgIC5kb2ModGhpcy5mZWVkX2lkKVxyXG4gICAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycpXHJcbiAgICAgICAgLmRvYyhjb21tZW50X2lkKVxyXG4gICAgICAgIC5jb2xsZWN0aW9uKCdyZXBseScpO1xyXG5cclxuICAgICAgY29sbGVjdGlvbi5hZGQoZGF0YSk7XHJcblxyXG5cclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0ge1xyXG4gICAgICAgIHNvdXJjZTond2ViJyxcclxuICAgICAgICB0aXRsZTogYE5vdmEgUmVzcG9zdGFgLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHt0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkubmFtZX0gcmVzcG9uZGV1OiAke2NvbW1lbnR9YCxcclxuICAgICAgICBjbGllbnRfaWQ6dGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLmNsaWVudF9pZCxcclxuICAgICAgICB1c2VyOiB0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCksXHJcbiAgICAgICAgcmVkaXJlY3Q6IGAvcG9ydGFsLyR7dGhpcy5mZWVkX2lkfWBcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXJ2aWNlLnNlbmROb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCB1c2VyX2luZm8sICdmZWVkJyk7XHJcblxyXG4gICAgICB0aGlzLnJlcGx5ID0gXCJcIjtcclxuICAgICAgdGhpcy5vbkxvYWRpbmdSZXBseSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlcGx5aW5nQ29tbWVudFtpXSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZVJlcGx5KGNvbW1lbnRfaWQsIHJlcGx5X2lkKSB7XHJcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5kYi5jb2xsZWN0aW9uKHBhdGgoKS5mZWVkKVxyXG4gICAgICAuZG9jKHRoaXMuZmVlZF9pZClcclxuICAgICAgLmNvbGxlY3Rpb24oJ2NvbW1lbnRzJylcclxuICAgICAgLmRvYyhjb21tZW50X2lkKVxyXG4gICAgICAuY29sbGVjdGlvbigncmVwbHknKVxyXG4gICAgICAuZG9jKHJlcGx5X2lkKTtcclxuXHJcbiAgICBjb2xsZWN0aW9uLmRlbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUNvbW1lbnQoY29tbWVudF9pZCkge1xyXG4gICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuZGIuY29sbGVjdGlvbihwYXRoKCkuZmVlZClcclxuICAgICAgLmRvYyh0aGlzLmZlZWRfaWQpXHJcbiAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycpXHJcbiAgICAgIC5kb2MoY29tbWVudF9pZCk7XHJcblxyXG4gICAgY29sbGVjdGlvbi5kZWxldGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kTGlrZUNvbW1lbnQoY29tbWVudF9pZCwgbGlrZV9pZCA9IG51bGwsIGl0ZW0pIHtcclxuICAgIHRoaXMub25Mb2FkaW5nTGlrZSA9IHRydWU7XHJcbiAgICBpZiAoIWl0ZW0ubGlrZUZvck1lKSB7XHJcbiAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgdXBkYXRlZF9hdDogRGF0ZS5ub3coKSxcclxuICAgICAgICB1c2VyX2luZm86IHtcclxuICAgICAgICAgIGlkOiB0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkuaWQsXHJcbiAgICAgICAgICBuYW1lOiB0aGlzLmdsb2JhbC5sb2dnZWRVc2VyKCkubmFtZSxcclxuICAgICAgICAgIHBpY3R1cmU6IHRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKS5waWN0dXJlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5kYi5jb2xsZWN0aW9uKHBhdGgoKS5mZWVkKVxyXG4gICAgICAgIC5kb2ModGhpcy5mZWVkX2lkKVxyXG4gICAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycpXHJcbiAgICAgICAgLmRvYyhjb21tZW50X2lkKVxyXG4gICAgICAgIC5jb2xsZWN0aW9uKCdsaWtlJyk7XHJcblxyXG4gICAgICBjb2xsZWN0aW9uLmFkZChkYXRhKTtcclxuXHJcblxyXG4gICAgICBjb25zdCBub3RpZmljYXRpb24gPSB7XHJcbiAgICAgICAgc291cmNlOid3ZWInLFxyXG4gICAgICAgIHRpdGxlOiBgTm92YSBDdXJ0aWRhYCxcclxuICAgICAgICBkZXNjcmlwdGlvbjogYCR7dGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLm5hbWV9IGN1cnRpdSBzZXUgY29tZW50w6FyaW86ICR7aXRlbS5jb21tZW50fWAsXHJcbiAgICAgICAgY2xpZW50X2lkOnRoaXMuZ2xvYmFsLmxvZ2dlZFVzZXIoKS5jbGllbnRfaWQsXHJcbiAgICAgICAgdXNlcjogdGhpcy5nbG9iYWwubG9nZ2VkVXNlcigpLFxyXG4gICAgICAgIHJlZGlyZWN0OiBgL3BvcnRhbC8ke3RoaXMuZmVlZF9pZH1gXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2VydmljZS5zZW5kTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgaXRlbS51c2VyX2luZm8sICdmZWVkJyk7XHJcblxyXG4gICAgICBpdGVtLmxpa2VGb3JNZSA9IHRydWU7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nTGlrZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgICAgLmRvYyh0aGlzLmZlZWRfaWQpXHJcbiAgICAgICAgLmNvbGxlY3Rpb24oJ2NvbW1lbnRzJylcclxuICAgICAgICAuZG9jKGNvbW1lbnRfaWQpXHJcbiAgICAgICAgLmNvbGxlY3Rpb24oJ2xpa2UnKVxyXG4gICAgICAgIC5kb2MobGlrZV9pZCk7XHJcblxyXG4gICAgICBjb2xsZWN0aW9uLmRlbGV0ZSgpO1xyXG4gICAgICBpdGVtLmxpa2VGb3JNZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm9uTG9hZGluZ0xpa2UgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkTW9yZUNvbW1lbnRzKCkge1xyXG4gICAgdGhpcy5saW1pdENvbW1lbnRzVG8gPSB0aGlzLmxpbWl0Q29tbWVudHNUbyArIDM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZE1vcmVSZXBseXMoaXRlbSkge1xyXG4gICAgaXRlbS5saW1pdFJlcGx5c1RvID0gaXRlbS5saW1pdFJlcGx5c1RvICsgMztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsaW5raWZ5KHN0cikge1xyXG4gICAgdmFyIHJlOiBhbnk7XHJcbiAgICByZSA9IFtcclxuICAgICAgXCJcXFxcYigoPzpodHRwcz98ZnRwKTovL1teXFxcXHNcXFwiJzw+XSspXFxcXGJcIixcclxuICAgICAgXCJcXFxcYih3d3dcXFxcLlteXFxcXHNcXFwiJzw+XSspXFxcXGJcIixcclxuICAgICAgXCJcXFxcYihcXFxcd1tcXFxcdy4rLV0qQFtcXFxcdy4tXStcXFxcLlthLXpdezIsNn0pXFxcXGJcIixcclxuICAgICAgXCIjKFthLXowLTldKylcIl07XHJcbiAgICByZSA9IG5ldyBSZWdFeHAocmUuam9pbignfCcpLCBcImdpXCIpO1xyXG5cclxuICAgIGlmIChzdHIpIHtcclxuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlLCBmdW5jdGlvbiAobWF0Y2gsIHVybCwgd3d3LCBtYWlsLCB0d2l0bGVyKSB7XHJcbiAgICAgICAgaWYgKHVybClcclxuICAgICAgICAgIHJldHVybiBcIjxhIGNsYXNzPSd0ZXh0LXByaW1hcnknIHRhcmdldD0nX2JsYW5rJyAoY2xpY2spPSdyZWRpcmVjdE5ld0xpbmsodXJsKScgaHJlZj1cXFwiXCIgKyB1cmwgKyBcIlxcXCI+XCIgKyB1cmwgKyBcIjwvYT5cIjtcclxuICAgICAgICBpZiAod3d3KVxyXG4gICAgICAgICAgcmV0dXJuIFwiPGEgY2xhc3M9J3RleHQtcHJpbWFyeScgaHJlZj1cXFwiaHR0cDovL1wiICsgd3d3ICsgXCJcXFwiPlwiICsgd3d3ICsgXCI8L2E+XCI7XHJcbiAgICAgICAgaWYgKG1haWwpXHJcbiAgICAgICAgICByZXR1cm4gXCI8YSBjbGFzcz0ndGV4dC1wcmltYXJ5JyBocmVmPVxcXCIjPC9hPlwiO1xyXG4gICAgICAgIGlmICh0d2l0bGVyKVxyXG4gICAgICAgICAgcmV0dXJuIFwiPGEgY2xhc3M9J3RleHQtcHJpbWFyeScgaHJlZj1cXFwicG9ydGFsL3NlYXJjaC9cIiArIGVuY29kZVVSSUNvbXBvbmVudCgnIycgKyB0d2l0bGVyKSArIFwiXFxcIj4jXCIgKyB0d2l0bGVyICsgXCI8L2E+XCI7XHJcbiAgICAgICAgLy8gcmV0dXJuIFwiPGEgY2xhc3M9J3RleHQtcHJpbWFyeScgaHJlZj1cXFwiI1xcXCI+I1wiICsgdHdpdGxlciArIFwiPC9hPlwiO1xyXG5cclxuICAgICAgICAvLyBzaG91bGRudCBnZXQgaGVyZSwgYnV0IGp1c3QgaW4gY2FzZVxyXG4gICAgICAgIHJldHVybiBtYXRjaDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FZGl0UmVwbHkocmVwbHkpIHtcclxuICAgIHRoaXMuZWRpdGVkUmVwbHkgPSByZXBseS5jb21tZW50O1xyXG4gICAgaWYgKHJlcGx5Lm9uRWRpdCkge1xyXG4gICAgICByZXBseS5vbkVkaXQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXBseS5vbkVkaXQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRWRpdENvbW1lbnQoY29tbWVudCkge1xyXG4gICAgdGhpcy5lZGl0ZWRDb21tZW50ID0gY29tbWVudC5jb21tZW50O1xyXG5cclxuICAgIGlmIChjb21tZW50Lm9uRWRpdCkge1xyXG4gICAgICBjb21tZW50Lm9uRWRpdCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbW1lbnQub25FZGl0ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDb21tZW50KGlkLCBjb21tZW50KSB7XHJcbiAgICB0aGlzLm9uTG9hZGluZ0NvbW1lbnQgPSB0cnVlO1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNvbW1lbnQ6IHRoaXMuZWRpdGVkQ29tbWVudCxcclxuICAgICAgZWRpdGVkOiB0cnVlLFxyXG4gICAgICB1cGRhdGVkX2F0OiBEYXRlLm5vdygpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuZGIuY29sbGVjdGlvbihwYXRoKCkuZmVlZClcclxuICAgICAgLmRvYyh0aGlzLmZlZWRfaWQpXHJcbiAgICAgIC5jb2xsZWN0aW9uKCdjb21tZW50cycpXHJcbiAgICAgIC5kb2MoaWQpO1xyXG5cclxuICAgIGlmIChjb21tZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgY29sbGVjdGlvbi51cGRhdGUoZGF0YSk7XHJcbiAgICAgIHRoaXMuZWRpdGVkQ29tbWVudCA9IFwiXCI7XHJcbiAgICAgIHRoaXMub25Mb2FkaW5nQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVJlcGx5KGNvbW1lbnRfaWQsIG9sZF9yZXBseSwgcmVwbHkpIHtcclxuICAgIHRoaXMub25Mb2FkaW5nUmVwbHkgPSB0cnVlO1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNvbW1lbnQ6IHJlcGx5LFxyXG4gICAgICB1cGRhdGVkX2F0OiBEYXRlLm5vdygpLFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpXHJcbiAgICAgIC5kb2ModGhpcy5mZWVkX2lkKVxyXG4gICAgICAuY29sbGVjdGlvbignY29tbWVudHMnKVxyXG4gICAgICAuZG9jKGNvbW1lbnRfaWQpXHJcbiAgICAgIC5jb2xsZWN0aW9uKCdyZXBseScpXHJcbiAgICAgIC5kb2Mob2xkX3JlcGx5LmlkKTtcclxuICAgIGNvbGxlY3Rpb24udXBkYXRlKGRhdGEpO1xyXG4gICAgdGhpcy5lZGl0ZWRDb21tZW50ID0gXCJcIjtcclxuICAgIHRoaXMub25Mb2FkaW5nUmVwbHkgPSBmYWxzZTtcclxuICAgIG9sZF9yZXBseS5vbkVkaXQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hNZXRpb25Vc2VycyhldmVudCkge1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkVXNlcnMoKSB7XHJcbiAgICB0aGlzLmFzYXBTZXJ2aWNlLmVudGl0eU5hbWUgPSAnYXNhcC11c2VyJztcclxuICAgIHRoaXMuYXNhcFNlcnZpY2UuZ2V0UmVzb3VyY2VzKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubWVudGlvbnNMaXN0ID0ge1xyXG4gICAgICAgIGl0ZW1zOiByZXNwb25zZS5kYXRhLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLm5hbWUpLFxyXG4gICAgICAgIHRyaWdnZXJDaGFyOiAnQCdcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -366,7 +366,7 @@ var FeedItemComponent = /** @class */ (function () {
366
366
  FeedItemComponent.decorators = [
367
367
  { type: Component, args: [{
368
368
  selector: 'app-feed-item',
369
- template: "<ng-container *ngIf=\"item && item.status && !item.deleted\">\r\n <mat-card #visibleControl class=\"feed-card\" id=\"{{ item.id +'#'+ item.type}}\">\r\n <mat-card-header class=\"feed-header ml-2\">\r\n <popover-content #myPopover placement=\"auto right\" [closeOnClickOutside]=\"false\" [closeOnMouseOutside]=\"false\"\r\n [animation]=\"true\">\r\n <div class='minibio'>\r\n <img\r\n [src]=\"(item.user_info?.picture)? item.user_info.picture : 'assets/img/default-avatar.png' || 'assets/img/default-avatar.png'\"\r\n (error)=\"item.user_info.picture = 'assets/img/default-avatar.png'\" alt=\"{{ item?.user_info?.name }}\">\r\n <div class=\"info\"><b>{{ item?.user_info?.name }}</b><br />\r\n <!-- <span class=\"location\"><i class=\"icon fa fa-globe\" aria-hidden=\"true\"></i>&nbsp;Fortaleza/CE</span> -->\r\n </div>\r\n </div>\r\n </popover-content>\r\n <div mat-card-avatar>\r\n <a [routerLink]=\"['/profile',item.user_info?.id]\"><img\r\n [src]=\"(item.user_info?.picture)? item.user_info.picture : 'assets/img/default-avatar.png' || 'assets/img/default-avatar.png'\"\r\n class=\"feed-avatar mr-1\" (error)=\"item.user_info.picture = 'assets/img/default-avatar.png'\"\r\n alt=\"{{ item?.user_info?.name }}\" [popover]=\"myPopover\" [popoverOnHover]=\"true\"></a>\r\n </div>\r\n\r\n <mat-card-title>\r\n <h4 class=\"ml-2\"><b><a [routerLink]=\"['/profile',item.user_info?.id]\">{{ item?.user_info?.name }}</a> <i\r\n *ngIf=\"item?.channel_id\" class=\"material-icons text-primary\" matTooltip=\"Este \u00E9 um post Institucional\"\r\n matTooltipClass=\"tooltip-primary\">done_all</i></b>\r\n </h4>\r\n <p class=\"ml-2\"> {{ 'SharedAPostOn' | translate }}\r\n <!-- <a [routerLink]=\"['/portal',item.id]\">{{ item?.updated_at | amTimeAgo }}</a></p> -->\r\n <a [routerLink]=\"['/portal',item.id]\">{{ item?.updated_at | amCalendar | amDateFormat: 'DD/MM/YYYY' }}</a>\r\n </mat-card-title>\r\n\r\n <ng-container *ngIf=\"global.loggedUser()\">\r\n <div class=\"feed-buttom-option\" *ngIf=\"item.user_info.id === global.loggedUser().id\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" [disabled]=\"!item.status\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"onEditItem()\" [disabled]=\"!item.status\">\r\n <mat-icon>create</mat-icon>\r\n <span>{{ 'Edit' | translate }}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"onRemoveItem(item)\" [disabled]=\"!item.status\">\r\n <mat-icon>delete</mat-icon>\r\n <span>{{ 'Remove' | translate }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <div *ngIf=\"item.isHighlighted\" matTooltip=\"Post destacado\" class=\"feed-buttom-option pinned-feed\">\r\n <i class=\"fa fa-thumb-tack fa-lg\"></i>\r\n </div>\r\n </ng-container>\r\n\r\n </mat-card-header>\r\n\r\n <ng-container *ngIf=\"item.type != 'announce'\">\r\n <!-- <code>{{item.additional_data | json}}</code> -->\r\n <ng-container *ngIf=\"!(item.files && item.files.length > 0)\">\r\n <div class=\"card card-file mt-0 pointer\">\r\n <!-- <div class=\"card-cover\"> -->\r\n <ng-container *ngIf=\"item.additional_data && item.additional_data.image\">\r\n <img style=\"display: none;\" [src]=\"item.additional_data.image\" (load)=\"onloadImage($event)\"\r\n (error)=\"onErrorImage($event)\">\r\n\r\n <div class=\"container-mat-card\" *ngIf=\"imageLoaded\">\r\n <img class=\"bg-mat-card\" [src]=\"item.additional_data.image\">\r\n <img mat-card-image [src]=\"item.additional_data.image\">\r\n </div>\r\n\r\n <div class=\"container-mat-card\" *ngIf=\"!imageLoaded\">\r\n <img mat-card-image [src]=\"'assets/img/background-blur-' + blurBackgroundIndex + '.png'\">\r\n </div>\r\n </ng-container>\r\n <!-- </div> -->\r\n <a *ngIf=\"item.additional_data && item.additional_data.file_id\"\r\n [routerLink]=\"['/channel/files/' + item.channel_id +'/'+ item.additional_data.file_id]\" class=\"circle\">\r\n <i class=\"fa fa-file-text-o\"></i>\r\n </a>\r\n <div *ngIf=\"item.additional_data && item.additional_data.description\" class=\"card-content\">\r\n <div class=\"clearfix\"></div>\r\n <p class=\"description m-3\" [innerHTML]=\"linkify(item.additional_data.description)\"></p>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"item.files && item.files.length > 0\">\r\n\r\n <ng-container *ngIf=\"item.files.length === 1\">\r\n <ng-container *ngFor=\"let file of item.files\">\r\n <ng-container *ngIf=\"file.type == 'image'\">\r\n\r\n <img style=\"display: none;\" [src]=\"file.name || file.url\" (load)=\"onloadImage($event)\"\r\n (error)=\"onErrorImage($event)\">\r\n\r\n <div class=\"container-mat-card\" *ngIf=\"imageLoaded\">\r\n <img class=\"bg-mat-card\" [src]=\"file.name || file.url\">\r\n <img mat-card-image [src]=\"file.name || file.url\">\r\n </div>\r\n\r\n <div class=\"container-mat-card\" *ngIf=\"!imageLoaded\">\r\n <img mat-card-image [src]=\"'assets/img/background-blur-' + blurBackgroundIndex + '.png'\">\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.type == 'video'\">\r\n <div class=\"carousel custom-carrousel\">\r\n <div class=\"content\">\r\n <div class=\"item\">\r\n <div class=\"video-overlay cloudinary-true\" *ngIf=\"file.isCloudinary == true\"\r\n [style.background-image]=\"file.thumb | stream: 'backgroundImage'\"></div>\r\n\r\n <div class=\"video-overlay youtube-true\" *ngIf=\"!file.isYoutube == true\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\"></div>\r\n\r\n <div class=\"video-overlay not-cloudinary-youtube\" *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\"></div>\r\n\r\n <video attr.type='stream' #videoPlayer *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n (click)=\"playVideo($event)\" (onloadeddata)=\"checkVideoRender(file.url)\"\r\n class=\"video not-cloudinary-youtube\" width=\"100%\" controls=\"false\" preload=\"metadata\"\r\n poster=\"{{file.url | stream:'thumb'}}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n <video attr.type='cloudinary' #videoPlayer *ngIf=\"file.isCloudinary == true\"\r\n (click)=\"playVideo($event)\" (onloadeddata)=\"checkVideoRender(file.url)\"\r\n class=\"video cloudinary-true\" width=\"100%\" controls=\"false\" preload=\"metadata\"\r\n poster=\"{{file.thumb}}\">\r\n <source [src]=\"file.url\" />\r\n </video>\r\n\r\n <ng-container *ngIf=\"file.isYoutube == true\">\r\n <iframe attr.type='youtube' #videoPlayer [src]=\"file.url | safe:'resourceUrl'\" frameborder=\"0\"\r\n frameborder=\"0\" width=\"100%\" class=\"video\"></iframe>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.type == 'pdf' || file.type == 'txt'\">\r\n <div class=\"container-mat-card px-3\">\r\n <a [routerLink]=\"['/channel/files/' + file.channel_id + '/' + file.file_id]\" class=\"w-100\">\r\n\r\n <div class=\"card card-file mt-0 pointer\">\r\n <div class=\"card-cover\">\r\n <a [routerLink]=\"['/channel/files/' + file.channel_id +'/'+ file.file_id]\">\r\n <ng-container *ngIf=\"file.image\">\r\n <img [src]=\"file.image\" alt=\"\">\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!file.image || file.image == null\">\r\n <h4 class=\"title\" [innerHTML]=\"linkify(file.title)\"></h4>\r\n </ng-container>\r\n </a>\r\n </div>\r\n <a [routerLink]=\"['/channel/files/' + file.channel_id +'/'+ file.file_id]\" class=\"circle\">\r\n <i *ngIf=\"file.type == 'pdf'\" class=\"fa fa-file-pdf-o\"></i>\r\n <i *ngIf=\"file.type == 'txt'\" class=\"fa fa-file-text-o\"></i>\r\n </a>\r\n <div class=\"card-content\">\r\n <div class=\"clearfix\"></div>\r\n <p class=\"description mb-3\" [innerHTML]=\"linkify(file.description)\"></p>\r\n </div>\r\n </div>\r\n\r\n </a>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.type == 'embed'\">\r\n <iframe class=\"video\" style=\"height: 280px; width: 100%;margin-top: 15px;\"\r\n [src]=\"file.url | safe:'resourceUrl'\" frameborder=\"0\" allowfullscreen></iframe>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngIf=\"item.files.length > 1\">\r\n\r\n <!-- Carrosel de Imavens e v\u00EDdeos -->\r\n\r\n <div class=\"swiper-stage\">\r\n <swiper [config]=\"global.swiperConfig(false)\">\r\n <div swiperSlide *ngFor=\"let file of item.files; let i = index\">\r\n <div class=\"swiper-carousel-custom\">\r\n\r\n <!-- Imagem -->\r\n\r\n <ng-container *ngIf=\"file.type === 'image'\">\r\n <ng-container *ngIf=\"file.url\">\r\n <div class=\"swiper-container-img\">\r\n <div class=\"swiper-bg-blur\" [style.backgroundImage]=\"'url('+file.url+')'\">\r\n </div>\r\n <img class=\"img\" [src]=\"file.url\" alt=\"\" (load)=\"onloadImage($event)\"\r\n (error)=\"onErrorImage($event)\">\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.name\">\r\n <div class=\"swiper-container-img\" [style.backgroundImage]=\"'url('+file.name+')'\">\r\n <div class=\"swiper-bg-blur\" [style.backgroundImage]=\"'url('+file.name+')'\">\r\n </div>\r\n <img class=\"img\" [src]=\"file.name\" alt=\"\" (load)=\"onloadImage($event)\"\r\n (error)=\"onErrorImage($event)\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Video -->\r\n\r\n <ng-container *ngIf=\"file.type === 'video'\">\r\n\r\n <ng-container>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"file.isCloudinary == true\"\r\n [style.background-image]=\"file.thumb | stream: 'backgroundImage'\">\r\n </div>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"!file.isYoutube == true\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\">\r\n </div>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\">\r\n </div>\r\n\r\n <video attr.type='stream' #videoPlayer *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n (click)=\"playVideo($event)\" (onloadeddata)=\"checkVideoRender(file.url)\" class=\"video\"\r\n width=\"100%\" controls=\"false\" preload=\"metadata\" poster=\"{{file.url | stream:'thumb'}}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n <video attr.type='cloudinary' #videoPlayer *ngIf=\"file.isCloudinary == true\"\r\n (click)=\"playVideo($event)\" (onloadeddata)=\"checkVideoRender(file.url)\" class=\"video\"\r\n width=\"100%\" controls=\"false\" preload=\"metadata\" poster=\"{{file.thumb}}\">\r\n <source [src]=\"file.url\" />\r\n </video>\r\n\r\n <ng-container *ngIf=\"file.isYoutube == true\">\r\n <iframe attr.type='youtube' #videoPlayer [src]=\"file.url | safe:'resourceUrl'\" frameborder=\"0\"\r\n frameborder=\"0\" width=\"100%\" class=\"video\"></iframe>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- Verifica se o V\u00EDdeo \u00E9 a primeira posi\u00E7\u00E3o do Slide -->\r\n <!-- <ng-container *ngIf=\" i === 0\">\r\n\r\n <div class=\"video-overlay\" *ngIf=\"file.isCloudinary == true\"\r\n [style.background-image]=\"file.thumb | stream: 'backgroundImage'\">\r\n </div>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"!file.isYoutube == true\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\">\r\n </div>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\">\r\n </div>\r\n\r\n <video attr.type='stream' #videoPlayer\r\n *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n (click)=\"playVideo($event)\" (onloadeddata)=\"checkVideoRender(file.url)\"\r\n class=\"video\" width=\"100%\" controls=\"false\" preload=\"metadata\"\r\n poster=\"{{file.url | stream:'thumb'}}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n <video attr.type='cloudinary' #videoPlayer\r\n *ngIf=\"file.isCloudinary === true\" (click)=\"playVideo($event)\"\r\n (onloadeddata)=\"checkVideoRender(file.url)\" class=\"video\" width=\"100%\"\r\n controls=\"false\" preload=\"metadata\" poster=\"{{file.thumb}}\">\r\n <source [src]=\"file.url\" />\r\n </video>\r\n\r\n <ng-container *ngIf=\"file.isYoutube === true\">\r\n <iframe attr.type='youtube' #videoPlayer\r\n [src]=\"file.url | safe:'resourceUrl'\" frameborder=\"0\"\r\n frameborder=\"0\" width=\"100%\" class=\"video\"></iframe>\r\n </ng-container>\r\n\r\n </ng-container> -->\r\n\r\n </ng-container>\r\n\r\n <ng-template #infiniteContainer></ng-template>\r\n </div>\r\n </div>\r\n </swiper>\r\n </div>\r\n\r\n <!-- Fim Carrosel de Imagens e V\u00EDdeos -->\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type == 'announce'\">\r\n <div class=\"ribbon ribbon-top-right\"><span>An\u00FAncio</span></div>\r\n\r\n <div class=\"swiper-stage\">\r\n <swiper [config]=\"global.swiperConfig(false)\">\r\n <div swiperSlide *ngFor=\"let file of item.files; let i = index\">\r\n <div class=\"swiper-carousel-custom\">\r\n <ng-container *ngIf=\"file.type === 'image'\">\r\n <div class=\"img\" [style.backgroundImage]=\"'url('+file.name+')'\" *ngIf=\"file.name\">\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.type === 'video'\">\r\n\r\n <ng-container>\r\n\r\n <div class=\"video-overlay\" [style.background-image]=\"file.url | stream:'styleThumbUrl'\">\r\n </div>\r\n\r\n <video class=\"video\" width=\"100%\" preload=\"metadata\" poster=\"{{ file.url | stream:'thumb' }}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n </ng-container>\r\n\r\n <!-- Verifica se o V\u00EDdeo \u00E9 a primeira posi\u00E7\u00E3o do Slide -->\r\n <!-- <ng-container *ngIf=\" i === 0\">\r\n\r\n <div class=\"video-overlay\"\r\n [style.background-image]=\"file.url | stream:'styleThumbUrl'\">\r\n </div>\r\n\r\n <video class=\"video\" width=\"100%\" preload=\"metadata\"\r\n poster=\"{{ file.url | stream:'thumb' }}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n </ng-container> -->\r\n\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ng-template #infiniteContainer></ng-template>\r\n </swiper>\r\n </div>\r\n\r\n <div class=\"pull-right mt-3\" [routerLink]=\"['/market/product/', item.product.id]\">\r\n <button class=\"btn btn-primary\">\r\n <i class=\"fa fa-shopping-cart\"></i>\r\n {{ preConvertNumber(item.product.valorDe) | currency:'BRL':true}} -\r\n {{ preConvertNumber(item.product.valorAte) | currency:'BRL':true}}\r\n </button>\r\n </div>\r\n <p *ngIf=\"item?.product?.data?.descr\" [innerHTML]=\"item.product.descr\"></p>\r\n </ng-container>\r\n\r\n <div class=\"mat-card-content\">\r\n <span class=\"ws-pre-wrap post-text mt-1 mb-4\" [innerHTML]=\"linkify(item.title)\"></span>\r\n <feed-actions [item]=\"item\"></feed-actions>\r\n <feed-comments [feed_id]=\"item.id\" [user]=\"item.user_info\"></feed-comments>\r\n </div>\r\n\r\n </mat-card>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"item && !item.status\">\r\n <ng-container *ngIf=\"global.loggedUser()\">\r\n <ng-container *ngIf=\"item.user_info.id === global.loggedUser().id\">\r\n <ng-container *ngIf=\"item\">\r\n <mat-card #visibleControl class=\"feed-card\" id=\"{{ item.id +'#'+ item.type}}\">\r\n <mat-card-header class=\"feed-header ml-2\">\r\n <div mat-card-avatar>\r\n <img\r\n [src]=\"(item.user_info?.picture)? item.user_info.picture : 'assets/img/default-avatar.png' || 'assets/img/default-avatar.png'\"\r\n class=\"feed-avatar\" (error)=\"item.user_info.picture = 'assets/img/default-avatar.png'\"\r\n alt=\"{{ item?.user_info?.name }}\">\r\n </div>\r\n <mat-card-title>\r\n <h4><b>{{ item?.user_info?.name }}</b></h4>\r\n <!-- <p> {{ 'SharedPublication' | translate }} <a>{{ item?.updated_at | amTimeAgo }}</a></p> -->\r\n <p> {{ 'SharedAPostOn' | translate }}\r\n <a>{{ item?.updated_at | amCalendar | amDateFormat: 'DD/MM/YYYY' }}</a>\r\n </p>\r\n </mat-card-title>\r\n\r\n <div class=\"feed-buttom-option\" *ngIf=\"false\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"false\">\r\n <mat-icon>create</mat-icon>\r\n <span>{{ 'Edit' | translate }}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"false\">\r\n <mat-icon>delete</mat-icon>\r\n <span>{{ 'Remove' | translate }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n\r\n </mat-card-header>\r\n\r\n <ng-container>\r\n <div class=\"col-sm-12 mx-auto text-center post-processing-section\">\r\n <img src=\"https://image.flaticon.com/icons/svg/2654/2654464.svg\" width=\"30%\">\r\n <h4>Estamos processando os dados do seu Post!</h4>\r\n <p>No momento ele est\u00E1 vis\u00EDvel apenas para voc\u00EA, mas logo estar\u00E1 dispon\u00EDvel para todos!</p>\r\n </div>\r\n </ng-container>\r\n\r\n <span class=\"ws-pre-wrap post-text mt-1 mb-4\" [innerHTML]=\"linkify(item.title)\"></span>\r\n <feed-actions prefix=\"prefix\" [item]=\"item\"></feed-actions>\r\n <feed-comments prefix=\"prefix\" [feed_id]=\"item.id\" [user]=\"item.user_info\"></feed-comments>\r\n </mat-card>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n",
369
+ template: "<ng-container *ngIf=\"item && item.status && !item.deleted\">\r\n <mat-card #visibleControl class=\"feed-card\" id=\"{{ item.id +'#'+ item.type}}\">\r\n <mat-card-header class=\"feed-header ml-2\">\r\n <popover-content #myPopover placement=\"auto right\" [closeOnClickOutside]=\"false\"\r\n [closeOnMouseOutside]=\"false\" [animation]=\"true\">\r\n <div class='minibio'>\r\n <img [src]=\"(item.user_info?.picture)? item.user_info.picture : 'assets/img/default-avatar.png' || 'assets/img/default-avatar.png'\"\r\n (error)=\"item.user_info.picture = 'assets/img/default-avatar.png'\"\r\n alt=\"{{ item?.user_info?.name }}\">\r\n <div class=\"info\"><b>{{ item?.user_info?.name }}</b><br />\r\n <!-- <span class=\"location\"><i class=\"icon fa fa-globe\" aria-hidden=\"true\"></i>&nbsp;Fortaleza/CE</span> -->\r\n </div>\r\n </div>\r\n </popover-content>\r\n <div mat-card-avatar>\r\n <a [routerLink]=\"['/profile',item.user_info?.id]\"><img\r\n [src]=\"(item.user_info?.picture)? item.user_info.picture : 'assets/img/default-avatar.png' || 'assets/img/default-avatar.png'\"\r\n class=\"feed-avatar mr-1\" (error)=\"item.user_info.picture = 'assets/img/default-avatar.png'\"\r\n alt=\"{{ item?.user_info?.name }}\" [popover]=\"myPopover\" [popoverOnHover]=\"true\"></a>\r\n </div>\r\n\r\n <mat-card-title>\r\n <h4 class=\"ml-2\"><b><a [routerLink]=\"['/profile',item.user_info?.id]\">{{ item?.user_info?.name }}</a> <i\r\n *ngIf=\"item?.channel_id\" class=\"material-icons text-primary\"\r\n matTooltip=\"Este \u00E9 um post Institucional\" matTooltipClass=\"tooltip-primary\">done_all</i></b>\r\n </h4>\r\n <p class=\"ml-2\"> {{ 'SharedPublication' | translate }} <a [routerLink]=\"['/portal',item.id]\">{{\r\n item?.updated_at | amTimeAgo }}</a></p>\r\n </mat-card-title>\r\n\r\n <ng-container *ngIf=\"global.loggedUser()\">\r\n <div class=\"feed-buttom-option\" *ngIf=\"item.user_info.id === global.loggedUser().id\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" [disabled]=\"!item.status\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"onEditItem()\" [disabled]=\"!item.status\">\r\n <mat-icon>create</mat-icon>\r\n <span>{{ 'Edit' | translate }}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"onRemoveItem(item)\" [disabled]=\"!item.status\">\r\n <mat-icon>delete</mat-icon>\r\n <span>{{ 'Remove' | translate }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <div *ngIf=\"item.isHighlighted\" matTooltip=\"Post destacado\" class=\"feed-buttom-option pinned-feed\">\r\n <i class=\"fa fa-thumb-tack fa-lg\"></i>\r\n </div>\r\n </ng-container>\r\n\r\n </mat-card-header>\r\n\r\n <ng-container *ngIf=\"item.type != 'announce'\">\r\n <!-- <code>{{item.additional_data | json}}</code> -->\r\n <ng-container *ngIf=\"!(item.files && item.files.length > 0)\">\r\n <div class=\"card card-file mt-0 pointer\">\r\n <!-- <div class=\"card-cover\"> -->\r\n <ng-container *ngIf=\"item.additional_data && item.additional_data.image\">\r\n <img style=\"display: none;\" [src]=\"item.additional_data.image\" (load)=\"onloadImage($event)\"\r\n (error)=\"onErrorImage($event)\">\r\n\r\n <div class=\"container-mat-card\" *ngIf=\"imageLoaded\">\r\n <img class=\"bg-mat-card\" [src]=\"item.additional_data.image\">\r\n <img mat-card-image [src]=\"item.additional_data.image\">\r\n </div>\r\n\r\n <div class=\"container-mat-card\" *ngIf=\"!imageLoaded\">\r\n <img mat-card-image [src]=\"'assets/img/background-blur-' + blurBackgroundIndex + '.png'\">\r\n </div>\r\n </ng-container>\r\n <!-- </div> -->\r\n <a *ngIf=\"item.additional_data && item.additional_data.file_id\"\r\n [routerLink]=\"['/channel/files/' + item.channel_id +'/'+ item.additional_data.file_id]\"\r\n class=\"circle\">\r\n <i class=\"fa fa-file-text-o\"></i>\r\n </a>\r\n <div *ngIf=\"item.additional_data && item.additional_data.description\" class=\"card-content\">\r\n <div class=\"clearfix\"></div>\r\n <p class=\"description m-3\" [innerHTML]=\"linkify(item.additional_data.description)\"></p>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"item.files && item.files.length > 0\">\r\n\r\n <ng-container *ngIf=\"item.files.length === 1\">\r\n <ng-container *ngFor=\"let file of item.files\">\r\n <ng-container *ngIf=\"file.type == 'image'\">\r\n\r\n <img style=\"display: none;\" [src]=\"file.name || file.url\" (load)=\"onloadImage($event)\"\r\n (error)=\"onErrorImage($event)\">\r\n\r\n <div class=\"container-mat-card\" *ngIf=\"imageLoaded\">\r\n <img class=\"bg-mat-card\" [src]=\"file.name || file.url\">\r\n <img mat-card-image [src]=\"file.name || file.url\">\r\n </div>\r\n\r\n <div class=\"container-mat-card\" *ngIf=\"!imageLoaded\">\r\n <img mat-card-image\r\n [src]=\"'assets/img/background-blur-' + blurBackgroundIndex + '.png'\">\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.type == 'video'\">\r\n <div class=\"carousel custom-carrousel\">\r\n <div class=\"content\">\r\n <div class=\"item\">\r\n <div class=\"video-overlay cloudinary-true\" *ngIf=\"file.isCloudinary == true\"\r\n [style.background-image]=\"file.thumb | stream: 'backgroundImage'\"></div>\r\n\r\n <div class=\"video-overlay youtube-true\" *ngIf=\"!file.isYoutube == true\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\"></div>\r\n\r\n <div class=\"video-overlay not-cloudinary-youtube\" *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\"></div>\r\n\r\n <video attr.type='stream' #videoPlayer\r\n *ngIf=\"!file.isCloudinary && !file.isYoutube\" (click)=\"playVideo($event)\"\r\n (onloadeddata)=\"checkVideoRender(file.url)\" class=\"video not-cloudinary-youtube\" width=\"100%\"\r\n controls=\"false\" preload=\"metadata\" poster=\"{{file.url | stream:'thumb'}}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n <video attr.type='cloudinary' #videoPlayer *ngIf=\"file.isCloudinary == true\"\r\n (click)=\"playVideo($event)\" (onloadeddata)=\"checkVideoRender(file.url)\"\r\n class=\"video cloudinary-true\" width=\"100%\" controls=\"false\" preload=\"metadata\"\r\n poster=\"{{file.thumb}}\">\r\n <source [src]=\"file.url\" />\r\n </video>\r\n\r\n <ng-container *ngIf=\"file.isYoutube == true\">\r\n <iframe attr.type='youtube' #videoPlayer\r\n [src]=\"file.url | safe:'resourceUrl'\" frameborder=\"0\" frameborder=\"0\"\r\n width=\"100%\" class=\"video\"></iframe>\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.type == 'pdf' || file.type == 'txt'\">\r\n <div class=\"container-mat-card px-3\">\r\n <a [routerLink]=\"['/channel/files/' + file.channel_id + '/' + file.file_id]\"\r\n class=\"w-100\">\r\n\r\n <div class=\"card card-file mt-0 pointer\">\r\n <div class=\"card-cover\">\r\n <a [routerLink]=\"['/channel/files/' + file.channel_id +'/'+ file.file_id]\">\r\n <ng-container *ngIf=\"file.image\">\r\n <img [src]=\"file.image\" alt=\"\">\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!file.image || file.image == null\">\r\n <h4 class=\"title\" [innerHTML]=\"linkify(file.title)\"></h4>\r\n </ng-container>\r\n </a>\r\n </div>\r\n <a [routerLink]=\"['/channel/files/' + file.channel_id +'/'+ file.file_id]\"\r\n class=\"circle\">\r\n <i *ngIf=\"file.type == 'pdf'\" class=\"fa fa-file-pdf-o\"></i>\r\n <i *ngIf=\"file.type == 'txt'\" class=\"fa fa-file-text-o\"></i>\r\n </a>\r\n <div class=\"card-content\">\r\n <div class=\"clearfix\"></div>\r\n <p class=\"description mb-3\" [innerHTML]=\"linkify(file.description)\"></p>\r\n </div>\r\n </div>\r\n\r\n </a>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.type == 'embed'\">\r\n <iframe class=\"video\" style=\"height: 280px; width: 100%;margin-top: 15px;\"\r\n [src]=\"file.url | safe:'resourceUrl'\" frameborder=\"0\" allowfullscreen></iframe>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngIf=\"item.files.length > 1\">\r\n\r\n <!-- Carrosel de Imavens e v\u00EDdeos -->\r\n\r\n <div class=\"swiper-stage\">\r\n <swiper [config]=\"global.swiperConfig(false)\">\r\n <div swiperSlide *ngFor=\"let file of item.files; let i = index\">\r\n <div class=\"swiper-carousel-custom\">\r\n\r\n <!-- Imagem -->\r\n\r\n <ng-container *ngIf=\"file.type === 'image'\">\r\n <ng-container *ngIf=\"file.url\">\r\n <div class=\"swiper-container-img\">\r\n <div class=\"swiper-bg-blur\"\r\n [style.backgroundImage]=\"'url('+file.url+')'\">\r\n </div>\r\n <img class=\"img\" [src]=\"file.url\" alt=\"\" (load)=\"onloadImage($event)\"\r\n (error)=\"onErrorImage($event)\">\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.name\">\r\n <div class=\"swiper-container-img\"\r\n [style.backgroundImage]=\"'url('+file.name+')'\">\r\n <div class=\"swiper-bg-blur\"\r\n [style.backgroundImage]=\"'url('+file.name+')'\">\r\n </div>\r\n <img class=\"img\" [src]=\"file.name\" alt=\"\" (load)=\"onloadImage($event)\"\r\n (error)=\"onErrorImage($event)\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Video -->\r\n\r\n <ng-container *ngIf=\"file.type === 'video'\">\r\n\r\n <ng-container>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"file.isCloudinary == true\"\r\n [style.background-image]=\"file.thumb | stream: 'backgroundImage'\">\r\n </div>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"!file.isYoutube == true\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\">\r\n </div>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\">\r\n </div>\r\n\r\n <video attr.type='stream' #videoPlayer\r\n *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n (click)=\"playVideo($event)\" (onloadeddata)=\"checkVideoRender(file.url)\"\r\n class=\"video\" width=\"100%\" controls=\"false\" preload=\"metadata\"\r\n poster=\"{{file.url | stream:'thumb'}}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n <video attr.type='cloudinary' #videoPlayer *ngIf=\"file.isCloudinary == true\"\r\n (click)=\"playVideo($event)\" (onloadeddata)=\"checkVideoRender(file.url)\"\r\n class=\"video\" width=\"100%\" controls=\"false\" preload=\"metadata\"\r\n poster=\"{{file.thumb}}\">\r\n <source [src]=\"file.url\" />\r\n </video>\r\n\r\n <ng-container *ngIf=\"file.isYoutube == true\">\r\n <iframe attr.type='youtube' #videoPlayer\r\n [src]=\"file.url | safe:'resourceUrl'\" frameborder=\"0\"\r\n frameborder=\"0\" width=\"100%\" class=\"video\"></iframe>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- Verifica se o V\u00EDdeo \u00E9 a primeira posi\u00E7\u00E3o do Slide -->\r\n <!-- <ng-container *ngIf=\" i === 0\">\r\n\r\n <div class=\"video-overlay\" *ngIf=\"file.isCloudinary == true\"\r\n [style.background-image]=\"file.thumb | stream: 'backgroundImage'\">\r\n </div>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"!file.isYoutube == true\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\">\r\n </div>\r\n\r\n <div class=\"video-overlay\" *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n [style.background-image]=\"file.url | stream: 'styleThumbUrl'\">\r\n </div>\r\n\r\n <video attr.type='stream' #videoPlayer\r\n *ngIf=\"!file.isCloudinary && !file.isYoutube\"\r\n (click)=\"playVideo($event)\" (onloadeddata)=\"checkVideoRender(file.url)\"\r\n class=\"video\" width=\"100%\" controls=\"false\" preload=\"metadata\"\r\n poster=\"{{file.url | stream:'thumb'}}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n <video attr.type='cloudinary' #videoPlayer\r\n *ngIf=\"file.isCloudinary === true\" (click)=\"playVideo($event)\"\r\n (onloadeddata)=\"checkVideoRender(file.url)\" class=\"video\" width=\"100%\"\r\n controls=\"false\" preload=\"metadata\" poster=\"{{file.thumb}}\">\r\n <source [src]=\"file.url\" />\r\n </video>\r\n\r\n <ng-container *ngIf=\"file.isYoutube === true\">\r\n <iframe attr.type='youtube' #videoPlayer\r\n [src]=\"file.url | safe:'resourceUrl'\" frameborder=\"0\"\r\n frameborder=\"0\" width=\"100%\" class=\"video\"></iframe>\r\n </ng-container>\r\n\r\n </ng-container> -->\r\n\r\n </ng-container>\r\n\r\n <ng-template #infiniteContainer></ng-template>\r\n </div>\r\n </div>\r\n </swiper>\r\n </div>\r\n\r\n <!-- Fim Carrosel de Imagens e V\u00EDdeos -->\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type == 'announce'\">\r\n <div class=\"ribbon ribbon-top-right\"><span>An\u00FAncio</span></div>\r\n\r\n <div class=\"swiper-stage\">\r\n <swiper [config]=\"global.swiperConfig(false)\">\r\n <div swiperSlide *ngFor=\"let file of item.files; let i = index\">\r\n <div class=\"swiper-carousel-custom\">\r\n <ng-container *ngIf=\"file.type === 'image'\">\r\n <div class=\"img\" [style.backgroundImage]=\"'url('+file.name+')'\" *ngIf=\"file.name\">\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"file.type === 'video'\">\r\n\r\n <ng-container>\r\n\r\n <div class=\"video-overlay\"\r\n [style.background-image]=\"file.url | stream:'styleThumbUrl'\">\r\n </div>\r\n\r\n <video class=\"video\" width=\"100%\" preload=\"metadata\"\r\n poster=\"{{ file.url | stream:'thumb' }}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n </ng-container>\r\n\r\n <!-- Verifica se o V\u00EDdeo \u00E9 a primeira posi\u00E7\u00E3o do Slide -->\r\n <!-- <ng-container *ngIf=\" i === 0\">\r\n\r\n <div class=\"video-overlay\"\r\n [style.background-image]=\"file.url | stream:'styleThumbUrl'\">\r\n </div>\r\n\r\n <video class=\"video\" width=\"100%\" preload=\"metadata\"\r\n poster=\"{{ file.url | stream:'thumb' }}\">\r\n <source [src]=\"file.url | stream:'link'\" />\r\n </video>\r\n\r\n </ng-container> -->\r\n\r\n </ng-container>\r\n </div>\r\n </div>\r\n <ng-template #infiniteContainer></ng-template>\r\n </swiper>\r\n </div>\r\n\r\n <div class=\"pull-right mt-3\" [routerLink]=\"['/market/product/', item.product.id]\">\r\n <button class=\"btn btn-primary\">\r\n <i class=\"fa fa-shopping-cart\"></i>\r\n {{ preConvertNumber(item.product.valorDe) | currency:'BRL':true}} -\r\n {{ preConvertNumber(item.product.valorAte) | currency:'BRL':true}}\r\n </button>\r\n </div>\r\n <p *ngIf=\"item?.product?.data?.descr\" [innerHTML]=\"item.product.descr\"></p>\r\n </ng-container>\r\n\r\n <div class=\"mat-card-content\">\r\n <span class=\"ws-pre-wrap post-text mt-1 mb-4\" [innerHTML]=\"linkify(item.title)\"></span>\r\n <feed-actions [item]=\"item\"></feed-actions>\r\n <feed-comments [feed_id]=\"item.id\" [user]=\"item.user_info\"></feed-comments>\r\n </div>\r\n\r\n </mat-card>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"item && !item.status\">\r\n <ng-container *ngIf=\"global.loggedUser()\">\r\n <ng-container *ngIf=\"item.user_info.id === global.loggedUser().id\">\r\n <ng-container *ngIf=\"item\">\r\n <mat-card #visibleControl class=\"feed-card\" id=\"{{ item.id +'#'+ item.type}}\">\r\n <mat-card-header class=\"feed-header ml-2\">\r\n <div mat-card-avatar>\r\n <img [src]=\"(item.user_info?.picture)? item.user_info.picture : 'assets/img/default-avatar.png' || 'assets/img/default-avatar.png'\"\r\n class=\"feed-avatar\" (error)=\"item.user_info.picture = 'assets/img/default-avatar.png'\"\r\n alt=\"{{ item?.user_info?.name }}\">\r\n </div>\r\n <mat-card-title>\r\n <h4><b>{{ item?.user_info?.name }}</b></h4>\r\n <p> {{ 'SharedPublication' | translate }} <a>{{ item?.updated_at | amTimeAgo }}</a></p>\r\n </mat-card-title>\r\n\r\n <div class=\"feed-buttom-option\" *ngIf=\"false\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"false\">\r\n <mat-icon>create</mat-icon>\r\n <span>{{ 'Edit' | translate }}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"false\">\r\n <mat-icon>delete</mat-icon>\r\n <span>{{ 'Remove' | translate }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n\r\n </mat-card-header>\r\n\r\n <ng-container>\r\n <div class=\"col-sm-12 mx-auto text-center post-processing-section\">\r\n <img src=\"https://image.flaticon.com/icons/svg/2654/2654464.svg\" width=\"30%\">\r\n <h4>Estamos processando os dados do seu Post!</h4>\r\n <p>No momento ele est\u00E1 vis\u00EDvel apenas para voc\u00EA, mas logo estar\u00E1 dispon\u00EDvel para todos!</p>\r\n </div>\r\n </ng-container>\r\n\r\n <span class=\"ws-pre-wrap post-text mt-1 mb-4\" [innerHTML]=\"linkify(item.title)\"></span>\r\n <feed-actions prefix=\"prefix\" [item]=\"item\"></feed-actions>\r\n <feed-comments prefix=\"prefix\" [feed_id]=\"item.id\" [user]=\"item.user_info\"></feed-comments>\r\n </mat-card>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>",
370
370
  providers: [StreamService],
371
371
  styles: ["li,ul{list-style:none!important}a,a:hover{text-decoration:none}.text-primary{color:var(--main-color)}.card{border-radius:6px;box-shadow:1px 1px 10px rgba(201,191,187,.7);-moz-box-shadow:1px 1px 10px rgba(201,191,187,.7);-webkit-box-shadow:1px 1px 10px rgba(201,191,187,.7);border:none;margin-bottom:30px;margin-top:0}.card .card-content{flex:1 1 auto;padding:1.25rem}.comments{margin:30px -15px}.comments h4{font-size:16px;color:#414141;margin-bottom:0;font-weight:600}.comments p{margin:5px 15px 5px 65px;font-size:14px;word-break:break-all}.post-text{white-space:pre-wrap!important;font-size:14px}.form-feed{width:100%;margin:0 0 25px!important;padding:10px 15px!important;border-radius:8px;box-shadow:1px 1px 15px rgba(201,191,187,.7);-moz-box-shadow:1px 1px 15px rgba(201,191,187,.7);-webkit-box-shadow:1px 1px 15px rgba(201,191,187,.7);background-color:var(--bg-card)!important}.form-feed .title{font-size:16px;margin-bottom:10px;border-bottom:1px solid #eee;padding-bottom:10px}.form-feed textarea{float:left;width:calc(100% - 50px);border-bottom:1px solid #eee;border-top:transparent;border-left:transparent;border-right:transparent;box-shadow:none;padding:5px 10px;outline:0!important}.form-input-btn a{float:right;border:none!important;box-shadow:none!important;background:0 0;padding:0;margin-top:12px;position:relative;right:0;left:0;margin-bottom:0;color:#8e8994}.form-input-btn a .material-icons{font-size:18px}.mat-dialog-container{padding:0!important}.form-comment{width:100%;margin:0!important;padding:15px 0 0!important;border-top:1px solid #eee}.form-comment input[type=text]{float:left;width:calc(100% - 50px);border:1px solid #eee;box-shadow:none;border-radius:30px;padding:5px 10px;outline:0}input::-webkit-input-placeholder{color:#ccc}input::-moz-placeholder{color:#ccc}input:-ms-input-placeholder{color:#ccc}input::-ms-input-placeholder{color:#ccc}input::placeholder{color:#ccc}.avatar-30{float:left;width:30px;height:30px;margin-right:10px;border-radius:50%}.avatar-30-null{display:flex;align-items:center;justify-content:center;float:left;width:30px;height:30px;margin-right:10px;border-radius:50%;background:#fafafa;color:#bbb}.comment-time{position:absolute;right:15px}.avatar-45{float:left;width:40px;height:40px;margin-right:10px;border-radius:50%}.avatar-45-null{display:flex;align-items:center;justify-content:center;float:left;width:40px;height:40px;margin-right:10px;border-radius:50%;background:#fafafa;color:#bbb;border:1.3px solid var(--main-color)}.super-post{position:absolute;right:15px;top:10px;font-size:1.8em;color:#888}.icons-comments{margin:10px 0 0;padding:10px 20px;border-top:1px solid #eee;border-bottom:1px solid #eee}.icons-comments li{display:inline-block;margin-right:30px;font-size:14px}.icons-comments li:last-child{margin-right:0;position:absolute;right:20px}.icons-comments li a{color:#4a4a4a;cursor:pointer}.icons-comments li a.active,.icons-comments li a:hover{color:var(--main-color)}.icons-comments .fa{font-size:16px}.card-file{width:100%;margin:0 auto 30px;box-shadow:0 0 30px rgba(204,204,204,.4);border:none;border-radius:12px;transition:.5s}.card-file:hover{box-shadow:0 0 30px rgba(204,204,204,.8)}.card-file .card-cover{display:flex;align-items:center;justify-content:center;padding:15px;position:relative;width:100%;height:160px;border-top-left-radius:16px;border-top-right-radius:12px;-o-object-fit:cover;object-fit:cover;background-size:cover;background-position:center;z-index:1;background:var(--main-color);color:#fff!important}.card-file .card-content{height:auto;padding:0 15px}.card-file .card-content .description{color:#888}.card-file .title{color:#fff;margin-bottom:0;font-size:18px;text-shadow:2px 2px 2px #101010}.btn-feed{width:auto;font-size:12px;padding:2px 5px;border-radius:30px;font-weight:600;text-transform:capitalize}.btn-group-xs>.btn,.btn-xs{padding:2px 15px 3px;font-size:13px;line-height:1;border-radius:30px}.btn-primary,.btn-primary:hover{color:var(--text-btn)!important;background-color:var(--bg-btn);border-color:var(--bg-btn)}.btn-primary.focus,.btn-primary:focus{background-color:var(--bg-btn);border-color:var(--bg-btn);box-shadow:0 0 0 .2rem rgba(0,0,0,.5)}.btn-primary.disabled,.btn-primary:disabled,.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:var(--text-btn)!important;background-color:var(--bg-btn);border-color:var(--bg-btn)}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,0,0,.5)}.btn-secondary{color:#fff;background-color:#111;border-color:#111}.btn-secondary:hover{color:#fff;background-color:#333;border-color:#333}.btn-secondary.focus,.btn-secondary:focus{background-color:#333;border-color:#333;box-shadow:0 0 0 .2rem rgba(0,0,0,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#111;border-color:#111}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#333;border-color:#333}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,0,0,.5)}.ribbon{width:150px;height:150px;overflow:hidden;position:absolute;z-index:1}.ribbon::after,.ribbon::before{position:absolute;z-index:-1;content:\"\";display:block;border:5px solid var(--bg-btn)}.ribbon span{position:absolute;display:block;width:225px;padding:15px 0;background-color:var(--bg-btn);box-shadow:0 5px 10px rgba(0,0,0,.1);color:#fff;font:700 18px/1 Lato,sans-serif;text-shadow:0 1px 1px rgba(0,0,0,.2);text-transform:uppercase;text-align:center}.ribbon-top-left{top:-10px;left:-10px;background:0 0}.ribbon-top-left::after,.ribbon-top-left::before{border-top-color:transparent;border-left-color:transparent}.ribbon-top-left::before{top:0;right:0}.ribbon-top-left::after{bottom:0;left:0}.ribbon-top-left span{right:-25px;top:30px;transform:rotate(-45deg)}.ribbon-top-right{top:-10px;right:-10px;background:0 0!important}.ribbon-top-right::after,.ribbon-top-right::before{border-top-color:transparent;border-right-color:transparent}.ribbon-top-right::before{top:0;left:0}.ribbon-top-right::after{bottom:0;right:0}.ribbon-top-right span{left:-25px;top:30px;transform:rotate(45deg)}.ribbon-bottom-left{bottom:-10px;left:-10px}.ribbon-bottom-left::after,.ribbon-bottom-left::before{border-bottom-color:transparent;border-left-color:transparent}.ribbon-bottom-left::before{bottom:0;right:0}.ribbon-bottom-left::after{top:0;left:0}.ribbon-bottom-left span{right:-25px;bottom:30px;transform:rotate(225deg)}.ribbon-bottom-right{bottom:-10px;right:-10px}.ribbon-bottom-right::after,.ribbon-bottom-right::before{border-bottom-color:transparent;border-right-color:transparent}.ribbon-bottom-right::before{bottom:0;left:0}.ribbon-bottom-right::after{top:0;right:0}.ribbon-bottom-right span{left:-25px;bottom:30px;transform:rotate(-225deg)}.video-container{min-height:200px}.video-container img{width:100%;-o-object-fit:cover;object-fit:cover;-webkit-filter:blur(10px);filter:blur(10px)}.video-player{top:0;left:1px;width:calc(100% - 2px)}.tmp-file-buttons-overlay{opacity:1}.overlayed{opacity:1!important;visibility:visible}.tmp-file-status-overlay{position:absolute;background:rgba(0,0,0,.5);text-align:center;z-index:9999999999;color:#fff;width:156px;height:120px;padding:20px}.tmp-file-status-overlay p{color:#fff}.tmp-file-buttons-overlay{background:rgba(0,0,0,.5);width:156px;height:120px;position:absolute;z-index:99999;visibility:visible;opacity:1;transition:opacity .5s ease-out}.tmp-file-remove-button{position:absolute;right:5px;text-align:right;width:10px;color:#fff;padding:0 1px;border-radius:0}.tmp-file-content{width:156px;height:120px;overflow:hidden}.tmp-upload-video{-o-object-fit:contain;object-fit:contain}.tmp-file-wrapper{position:relative}.tmp-upload{-o-object-fit:cover;object-fit:cover;width:156px;height:120px}.tmp-file-wrapper-container{padding:20px 0 0;margin:20px -15px;border-width:1px 0;border-color:#ccc;border-style:solid}.hide{display:none}.masonry{display:flex;flex-flow:row wrap;margin:20px 0 -2px}.masonry-brick{flex:auto;height:250px;min-width:150px;margin:2px;position:relative;cursor:pointer}.masonry-img{-o-object-fit:cover;object-fit:cover;width:100%;height:100%}.masonry-brick:nth-child(4n+1){width:50%}.masonry-brick:nth-child(4n+2){width:40%}.masonry-brick:nth-child(4n+3){width:20%}.masonry-brick:nth-child(4n+4){width:30%}.masonry-brick-full{width:100%!important;height:291px!important;overflow:hidden;outline:rgba(0,0,0,.2) solid 1px;outline-offset:-1px}.card-body{border-bottom-left-radius:16px;border-bottom-right-radius:16px}.card .circle{float:left;position:relative;display:flex;align-items:center;justify-content:center;width:60px;height:60px;border-radius:50%;margin:-30px 10px 15px 15px;background:#eee;z-index:1;font-size:1.5em;color:#414141!important}.card-team .card-content{width:100%;height:160px;margin-bottom:10px}.card-classroom{padding:15px;box-shadow:1px 1px 5px rgba(201,191,187,.7);-moz-box-shadow:1px 1px 5px rgba(201,191,187,.7);-webkit-box-shadow:1px 1px 5px rgba(201,191,187,.7);margin-bottom:20px}.play-overlay{position:absolute;top:0;left:0;width:100%;text-align:center;height:291px;line-height:291px;background:rgba(0,0,0,.05)}.play-overlay img{width:80px;height:80px}.preview-wrapper{position:relative;margin-top:30px}.preview-image img{outline:rgba(0,0,0,.2) solid 1px;outline-offset:-1px}.preview-button{position:absolute;top:0;right:0;color:#fff}.preview-text{position:relative;background:#f9f9f9;border:1px solid #ccc;padding:11px;margin-top:-7px}.img-with-outline{outline:rgba(0,0,0,.2) solid 1px;outline-offset:-1px}.mt-5{margin-top:2em}.feed-card{width:100%;margin-bottom:30px;box-shadow:1px 1px 15px rgba(201,191,187,.7);-moz-box-shadow:1px 1px 15px rgba(201,191,187,.7);-webkit-box-shadow:1px 1px 15px rgba(201,191,187,.7)}.feed-card .feed-header{margin-bottom:10px}.feed-card .feed-header .feed-avatar{float:left;width:40px;height:40px;margin-right:5px;border-radius:50%;-o-object-fit:cover;object-fit:cover;border:2px solid #e6e5e5}.feed-card .feed-header .feed-buttom-option{position:absolute;top:5px;right:0;z-index:21}.mat-card{padding:15px 0 10px!important}.mat-card .mat-card-header .mat-card-title h4{font-size:16px;margin-bottom:0}.mat-card .mat-card-header .mat-card-title p{font-size:13px;color:#aaa}.container-mat-card{display:flex;align-items:flex-end;justify-content:flex-end;position:relative;overflow:hidden;margin:0 0 10px}.bg-mat-card{display:block;position:absolute;z-index:15;width:100%;height:calc(100% - 30px);-webkit-filter:blur(40px) brightness(80%);filter:blur(40px) brightness(80%);background-size:cover;background-repeat:no-repeat;background-position:center}.mat-card-image{position:relative;z-index:20;margin:0!important;-o-object-fit:contain;object-fit:contain;height:auto;max-height:540px;display:block;width:100%}.feed-comment-option{float:right;margin-top:-10px;margin-left:0}.clickable{cursor:pointer;color:var(--main-color)}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:.2s ease-in-out}.show-scroll{opacity:1;transition:.2s ease-in-out}.feed-actions{color:#ccc;font-size:16px;margin-right:10px;margin-bottom:5px;margin-left:10px}.feed-actions span{margin-left:5px}.feed-actions .btn{background:0 0!important;border:none!important}.feed-likes{font-size:13px;margin-top:10px}a.is-liked{color:var(--main-color)!important}a.disabled-like{color:#ccc!important;cursor:not-allowed;text-decoration:none;pointer-events:none}.carousel{margin-bottom:10px;margin-left:0;margin-right:0}.carousel-item{-o-object-fit:cover!important;object-fit:cover!important;max-height:400px;-o-object-position:center;object-position:center}.video-player{position:initial!important}::ng-deep .ws-pre-wrap h4{font-size:18px!important}::ng-deep .ws-pre-wrap a{color:var(--main-color)}.SeeMore{display:block;color:var(--main-color)!important;text-align:center;cursor:pointer}.carousel-stage{position:relative;z-index:0;min-height:100px}.carousel-stage .progress{height:8px;border-radius:30px}.carousel-stage .progress .progress-bar{background:var(--main-color)}.carousel-stage .courses-image-item{border-radius:5%;-o-object-fit:cover;object-fit:cover}.carousel-stage .courses-item{padding:15px}.carousel-stage .courses-title{text-align:center}.carousel-stage .courses-title a{color:#000!important;font-weight:400!important}.customNavigation a{display:flex;justify-content:center;align-items:center;width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.8);color:var(--main-color)!important;text-align:center}.customNavigation a:hover{background:#fff;color:var(--main-color)}.prev{position:absolute;width:100%;top:50%;left:-15px;margin-top:-15px;z-index:10}.next{position:absolute;width:100%;top:50%;right:-15px;margin-top:-15px;z-index:10}.owl-dots{position:absolute;top:-40px;right:15px;outline:0!important}.owl-dots .owl-dot{background:#ccc!important;border-radius:50%;height:10px;width:10px;padding:0!important;border:none;margin:0 2px;outline:0!important}.owl-dots .owl-dot.active{background:var(--main-color)!important;outline:0!important}::ng-deep .owl-carousel-o-stories .owl-next,::ng-deep .owl-carousel-o-stories .owl-prev{position:absolute!important;top:50%!important;transform:translateY(-50%)!important;display:block!important;border-radius:50%!important;margin-top:-5px!important}::ng-deep .owl-carousel-o-stories .owl-prev{left:5px!important}::ng-deep .owl-carousel-o-stories .owl-next{right:5px!important}::ng-deep .swiper-stage .swiper-container{padding:0}::ng-deep .swiper-stage .swiper-button-next,::ng-deep .swiper-stage .swiper-button-prev{display:flex;align-items:center;justify-content:center;margin-top:0!important;width:25px;height:25px;border-radius:50%;background-color:var(--main-color)!important;opacity:.7!important}::ng-deep .swiper-stage .swiper-button-prev{left:10px;right:auto!important}::ng-deep .swiper-stage .swiper-button-next{right:10px;left:auto!important}::ng-deep .swiper-stage .swiper-button-next:after,::ng-deep .swiper-stage .swiper-button-prev:after{font-size:13px!important;color:#fff}::ng-deep .swiper-stage .swiper-button-disabled{opacity:0!important}.carousel-stories{display:inline-block;width:100%;height:145px;margin:0;border-radius:6px;text-transform:uppercase;font-size:1em;font-weight:500;background-repeat:no-repeat;background-size:cover;cursor:pointer;background-position:center!important}.carousel-stories .item:focus{outline:0}.carousel-stories .stories-body{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;text-align:center;height:100%;padding:0}.carousel-stories .stories-body a{font-size:12px;color:#fff;margin-bottom:10px;text-shadow:0 1px 1px rgba(0,0,0,.6)}.carousel-stories .stories-body a:hover{color:#ccc}.mat-button,.mat-flat-button,.mat-icon-button,.mat-stroked-button{outline:0!important}::ng-deep .mat-menu-panel{border-radius:6px!important;outline:0!important}::ng-deep .mat-menu-panel .mat-menu-content:not(:empty){padding-top:0!important;padding-bottom:0!important}::ng-deep .mat-menu-panel .mat-menu-item{color:#414141;font-size:15px;font-style:normal;font-weight:400;letter-spacing:1px;outline:0!important}.progress-bar-custom span{display:inline-block;height:100%;border-radius:3px;box-shadow:0 1px 0 rgba(37,21,21,.5) inset;transition:width .4s ease-in-out}.green-progress span{background-image:linear-gradient(to bottom,#fff,var(--main-color))}.stripes span{background-size:30px 30px;background-image:linear-gradient(135deg,#ff4e4ef3 25%,transparent 25%,transparent 50%,rgba(236,47,47,.972) 50%,rgba(240,0,0,.15) 75%,transparent 75%,transparent);-webkit-animation:3s linear infinite animate-stripes;animation:3s linear infinite animate-stripes}.container-stipes{width:100%;padding:0 10px;font-weight:700}.keep-logged{position:relative;height:150px;background:var(--main-color);top:0;color:#fff!important;z-index:99;opacity:.9;width:100%;border:0;left:0;right:0}.keep-logged button{background:#fff!important;color:var(--main-color)!important}.scrollable{overflow-y:scroll;height:100vh}.alert-primary{color:#fff;background-color:var(--main-color)!important;background:var(--main-color)!important}.mat-progress-bar{height:17px;border-radius:5px}@-webkit-keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}.p-channel{color:#3c4858;font-weight:500;margin-bottom:0!important}@media (max-width:767px){.form-feed textarea{font-size:12px}.btn-feed{width:auto;font-size:11px;padding:2px 5px;border-radius:30px;font-weight:600;text-transform:capitalize}.carousel-stories{width:120px;height:120px}.keep-logged{height:175px}.keep-logged h3{font-size:1.1rem}.keep-logged button{font-size:1rem}.btn-group-xs>.btn,.btn-xs{padding:2px 5px;font-size:11px;line-height:1;border-radius:30px}}::ng-deep .mat-card-header-text{width:100%!important;margin:0}::ng-deep .popover{background:#fff!important;border:0!important;box-shadow:1px 1px 15px rgba(201,191,187,.7)!important;-moz-box-shadow:1px 1px 15px rgba(201,191,187,.7)!important;-webkit-box-shadow:1px 1px 15px rgba(201,191,187,.7)!important}.minibio{padding:10px;border-radius:10px}.minibio img{width:30%;max-width:100px;display:inline-block;padding-right:10px}.minibio .info{display:inline-block;vertical-align:top}.minibio .info .icon{color:#d4d4d4}.minibio .info ul{list-style:none}.minibio .info li{display:inline-block}", "@charset \"UTF-8\";.pinned-feed{background-color:var(--bg-btn);color:var(--text-btn);padding:5px;height:40px;width:40px;display:flex;align-items:center;justify-content:center;border-radius:50%;position:absolute;margin-top:60px;margin-right:5px;opacity:1}.mat-card-video{-o-object-fit:cover;object-fit:cover;width:calc(100% + 31px);margin:0 0 10px}.mat-card-content{word-break:break-word;padding:0 15px}::ng-deep .tooltip-primary{background:var(--main-color);opacity:.85;font-size:13px}.no-click{pointer-events:none}.modal-feed-publication{border-radius:24px!important}.share-social{max-width:185px}.mat-card-actions{min-height:40px}.post-processing-section{padding:12px;border:3px dotted gray;border-radius:8px;background-color:#f4f4f4}.carousel{color:#fff}.carousel .content{display:flex}.carousel .content .item{width:100%;display:block;transition:opacity 295ms linear .2s}.carousel .content .item.visible{opacity:1}.carousel .content .item .img{width:100%;height:500px;display:block;-o-object-fit:cover;object-fit:cover;background-size:cover;background-position:center}.carousel .content .item .video{width:100%;height:500px!important;display:block;background-size:cover;background-position:center}.carousel .content .item .video-overlay{background:rgba(0,0,0,.5);width:100%;height:500px!important;position:absolute;z-index:-1;transition:opacity .5s ease-out;filter:blur(8px);-webkit-filter:blur(8px)}.carousel .content .wraper-video{background-color:#000}.carousel .ball{width:10px;height:10px;border-radius:50%;background:#000;border:2px solid;opacity:.5}.carousel .ball.visible{opacity:1}.carousel .click-area{width:50px;text-align:center}.carousel .click-area i{font-size:2em;background:rgba(255,255,255,.8);color:#000;border-radius:100%}.custom-carrousel{z-index:1;overflow:hidden}.card-file{box-shadow:0 0 30px rgba(204,204,204,.4);border:none;border-radius:16px;transition:.5s;margin-bottom:30px;cursor:pointer}.card-file .card-cover{display:flex;align-items:center;justify-content:center;text-align:center;padding:0;width:100%;height:250px;border-top-left-radius:10px;border-top-right-radius:10px;background:var(--main-color);color:#fff!important;overflow:hidden}.card-file .card-cover img{position:absolute;z-index:0;top:0;left:0;width:100%;height:inherit;-o-object-fit:cover;object-fit:cover;border-top-left-radius:10px;border-top-right-radius:10px}.card-file .card-cover .title{position:relative;z-index:3;color:#fff;margin-bottom:0;height:60px;padding:0 15px;font-size:18px}.card-file .circle{float:left;position:relative;display:flex;align-items:center;justify-content:center;width:60px;height:60px;border-radius:50%;margin:-30px 10px 15px 15px;background:#eee;z-index:20;font-size:1.5em;color:#3c4858!important}.card-file .card-body{height:125px;border-bottom-left-radius:16px;border-bottom-right-radius:16px}.card-file .card-body .edit-file{float:right!important;margin-top:-60px;margin-right:-15px}.card-file .card-body h5{height:60px}.card-file .card-body .description{color:#888;height:65px;overflow:hidden}::ng-deep owl-carousel-o .owl-theme .owl-next,::ng-deep owl-carousel-o .owl-theme .owl-prev{position:absolute;top:50%;transform:translateY(-50%);display:flex!important;align-items:center!important;justify-content:center!important;width:30px!important;height:30px!important;border-radius:50%!important;margin:20px 0;background:rgba(255,255,255,.8)!important;color:#414141!important;border:none!important;font-size:20px!important;font-weight:600!important}::ng-deep owl-carousel-o .owl-theme .owl-prev{left:5px;transition:.3s!important}::ng-deep owl-carousel-o .owl-theme .owl-prev:hover{transition:.3s!important}::ng-deep owl-carousel-o .owl-theme .owl-next{right:5px;transition:.3s!important}::ng-deep owl-carousel-o .owl-theme .owl-next:hover{transition:.3s}::ng-deep owl-carousel-o .owl-carousel .owl-dot,::ng-deep owl-carousel-o .owl-carousel .owl-nav .owl-next,::ng-deep owl-carousel-o .owl-carousel .owl-nav .owl-prev{font-family:fontAwesome}::ng-deep owl-carousel-o .owl-carousel .owl-nav .owl-prev:before{content:\"\uF104\"}::ng-deep owl-carousel-o .owl-carousel .owl-nav .owl-next:after{content:\"\uF105\"}.swiper-carousel-custom .swiper-container-img{display:flex;align-items:center;justify-content:center;width:100%;height:500px}.swiper-carousel-custom .swiper-bg-blur{position:absolute;z-index:10;width:100%;height:500px;-webkit-filter:blur(30px) brightness(80%);filter:blur(30px) brightness(80%);background-size:cover;background-repeat:no-repeat;background-position:center}.swiper-carousel-custom .img{position:relative;z-index:20;max-width:100%;max-height:500px!important;display:block;-o-object-fit:contain;object-fit:contain;background-size:cover;background-position:center}.swiper-carousel-custom .video{width:100%;height:500px!important;display:block;background-size:cover;background-position:center}.swiper-carousel-custom .video-overlay{background:rgba(0,0,0,.5);width:100%;height:500px!important;position:absolute;z-index:-1;transition:opacity .5s ease-out;filter:blur(8px);-webkit-filter:blur(8px)}"]
372
372
  }] }
@@ -427,4 +427,4 @@ if (false) {
427
427
  /** @type {?} */
428
428
  FeedItemComponent.prototype.service;
429
429
  }
430
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FzYXAtZmVlZC1iZXRhLyIsInNvdXJjZXMiOlsibGliL2ZlZWQtaXRlbS9mZWVkLWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQTRCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDckgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzVELFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUV6QztJQTBCRSwyQkFDUyxhQUE0QixFQUM1QixFQUFvQixFQUNwQixNQUFjLEVBQ2QsTUFBaUIsRUFDakIsT0FBcUI7UUFKckIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsT0FBRSxHQUFGLEVBQUUsQ0FBa0I7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQXBCcEIsY0FBUyxHQUFHLElBQUks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QUM3QixnREFBaUU7O0lBRWpFLHFDQUFnQjs7SUFDaEIseUNBQW9COztJQUNwQixzQ0FBaUI7O0lBR2YsMENBQW1DOztJQUNuQywrQkFBMkI7O0lBQzNCLG1DQUFxQjs7SUFDckIsbUNBQXdCOztJQUN4QixvQ0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdHJlYW1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RyZWFtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbmd1bGFyRmlyZXN0b3JlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICdhc2FwLWNydWQnO1xyXG5pbXBvcnQgeyBGZWVkTW9kYWxJdGVtRWRpdENvbXBvbmVudCB9IGZyb20gJy4uL2ZlZWQtcHVibGljYXRpb24vZmVlZC1tb2RhbC1pdGVtLWVkaXQvZmVlZC1tb2RhbC1pdGVtLWVkaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgcGF0aCB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuXHJcbmltcG9ydCBTd2lwZXJDb3JlLCB7IE5hdmlnYXRpb24sIFBhZ2luYXRpb24gfSBmcm9tICdzd2lwZXInO1xyXG5Td2lwZXJDb3JlLnVzZShbTmF2aWdhdGlvbiwgUGFnaW5hdGlvbl0pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZmVlZC1pdGVtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmVlZC1pdGVtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi4vYXNhcC1mZWVkLmJldGEuY29tcG9uZW50ZS5zY3NzJywgJy4vZmVlZC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbU3RyZWFtU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZlZWRJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBpdGVtO1xyXG4gIEBJbnB1dCgpIG93bmVyO1xyXG5cclxuICBAT3V0cHV0KCkgaXNWaXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCd2aWRlb1BsYXllcicsIHsgc3RhdGljOiB0cnVlIH0pIHZpZGVvcGxheWVyOiBFbGVtZW50UmVmXHJcbiAgQFZpZXdDaGlsZCgndmlzaWJsZUNvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgdmlzaWJsZUNvbnRyb2w7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50SW5kZXg7XHJcbiAgcHVibGljIGltYWdlTG9hZGVkID0gZmFsc2U7XHJcbiAgcHVibGljIGltYWdlRGF0YUxvYWRlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjdXJyZW50Q2Fycm91c2VsSW5kZXg7XHJcbiAgcHVibGljIGJsdXJCYWNrZ3JvdW5kSW5kZXggPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogNSkgKyAxKTtcclxuXHJcbiAgcHVibGljIG9ic2VydmVyO1xyXG4gIHB1YmxpYyB2aXNpYmxlVGltZXI7XHJcbiAgcHVibGljIHNob3RUaW1lcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc3RyZWFtU2VydmljZTogU3RyZWFtU2VydmljZSxcclxuICAgIHB1YmxpYyBkYjogQW5ndWxhckZpcmVzdG9yZSxcclxuICAgIHB1YmxpYyBnbG9iYWw6IEdsb2JhbCxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBzZXJ2aWNlOiBVdGlsc1NlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZFZpc2liaWxpdHlDb250cm9scygpO1xyXG5cclxuICAgIGlmICh0aGlzLml0ZW0uZmlsZXMgJiYgdGhpcy5pdGVtLmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5pdGVtLmZpbGVzLm1hcChmZWVkID0+IHtcclxuICAgICAgICBpZiAoZmVlZC51cmwgJiYgZmVlZC51cmwuaW5jbHVkZXMoJ3lvdXR1YmUnKSkge1xyXG4gICAgICAgICAgZmVlZC5pc1lvdXR1YmUgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IHlvdXR1YmVJRCA9IHRoaXMuZ2V0WW91dHViZUlEKGZlZWQudXJsKTtcclxuICAgICAgICAgIGZlZWQudXJsID0gYGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7eW91dHViZUlEfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKCdJVEVNIC0+JywgdGhpcy5pdGVtKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnZpc2libGVDb250cm9sLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy52aXNpYmxlVGltZXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRWaXNpYmlsaXR5Q29udHJvbHMoKSB7XHJcbiAgICB0aGlzLnZpc2libGVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgdGhpcy5zaG90VGltZXItLTtcclxuICAgICAgaWYgKHRoaXMuc2hvdFRpbWVyID09IDApIHtcclxuICAgICAgICB0aGlzLmlzVmlzaWJsZS5lbWl0KHRoaXMuaXRlbSk7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnZpc2libGVUaW1lcik7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxyXG4gICAgICB0aHJlc2hvbGQ6IFswLCAwLjEsIDAuMiwgMC4zLCAwLjQsIDAuNSwgMC42LCAwLjcsIDAuOCwgMC45LCAxLjBdXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMsIG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG90VGltZXIgPSAtMTtcclxuICAgICAgICB0aGlzLml0ZW0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGVudHJ5LmludGVyc2VjdGlvblJhdGlvID09IDEpIHtcclxuICAgICAgICAgIHRoaXMuc2hvdFRpbWVyID0gNTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25sb2FkSW1hZ2UoZXZlbnQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdFdmVudCBvbmxvYWRJbWFnZSAtPicsIGV2ZW50KTtcclxuICAgIHRoaXMuaW1hZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5pbWFnZURhdGFMb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRXJyb3JJbWFnZShldmVudCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0V2ZW50IG9uRXJyb3JJbWFnZSAtPicsIGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwbGF5VmlkZW8oZXZlbnQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdFdmVudCAtPicsIGV2ZW50KTtcclxuICAgIGlmICh0aGlzLnZpZGVvcGxheWVyKSB7XHJcbiAgICAgIHRoaXMudmlkZW9wbGF5ZXIubmF0aXZlRWxlbWVudC5wbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGlua2lmeShzdHIpIHtcclxuICAgIHZhciByZTogYW55O1xyXG4gICAgcmUgPSBbXHJcbiAgICAgIFwiXFxcXGIoKD86aHR0cHM/fGZ0cCk6Ly9bXlxcXFxzXFxcIic8Pl0rKVxcXFxiXCIsXHJcbiAgICAgIFwiXFxcXGIod3d3XFxcXC5bXlxcXFxzXFxcIic8Pl0rKVxcXFxiXCIsXHJcbiAgICAgIFwiXFxcXGIoXFxcXHdbXFxcXHcuKy1dKkBbXFxcXHcuLV0rXFxcXC5bYS16XXsyLDZ9KVxcXFxiXCIsXHJcbiAgICAgIFwiIyhbYS16MC05XSspXCJdO1xyXG4gICAgcmUgPSBuZXcgUmVnRXhwKHJlLmpvaW4oJ3wnKSwgXCJnaVwiKTtcclxuXHJcbiAgICBpZiAoc3RyKSB7XHJcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZShyZSwgZnVuY3Rpb24gKG1hdGNoLCB1cmwsIHd3dywgbWFpbCwgdHdpdGxlcikge1xyXG4gICAgICAgIGlmICh1cmwpXHJcbiAgICAgICAgICByZXR1cm4gXCI8YSBjbGFzcz0ndGV4dC1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgKGNsaWNrKT0ncmVkaXJlY3ROZXdMaW5rKHVybCknIGhyZWY9XFxcIlwiICsgdXJsICsgXCJcXFwiPlwiICsgdXJsICsgXCI8L2E+XCI7XHJcbiAgICAgICAgaWYgKHd3dylcclxuICAgICAgICAgIHJldHVybiBcIjxhIGNsYXNzPSd0ZXh0LXByaW1hcnknIGhyZWY9XFxcImh0dHA6Ly9cIiArIHd3dyArIFwiXFxcIj5cIiArIHd3dyArIFwiPC9hPlwiO1xyXG4gICAgICAgIGlmIChtYWlsKVxyXG4gICAgICAgICAgcmV0dXJuIFwiPGEgY2xhc3M9J3RleHQtcHJpbWFyeScgaHJlZj1cXFwiIzwvYT5cIjtcclxuICAgICAgICBpZiAodHdpdGxlcilcclxuICAgICAgICAgIHJldHVybiBcIjxhIGNsYXNzPSd0ZXh0LXByaW1hcnknIGhyZWY9XFxcInBvcnRhbC9zZWFyY2gvXCIgKyBlbmNvZGVVUklDb21wb25lbnQoJyMnICsgdHdpdGxlcikgKyBcIlxcXCI+I1wiICsgdHdpdGxlciArIFwiPC9hPlwiO1xyXG4gICAgICAgIC8vIHJldHVybiBcIjxhIGNsYXNzPSd0ZXh0LXByaW1hcnknIGhyZWY9XFxcIiNcXFwiPiNcIiArIHR3aXRsZXIgKyBcIjwvYT5cIjtcclxuXHJcbiAgICAgICAgLy8gc2hvdWxkbnQgZ2V0IGhlcmUsIGJ1dCBqdXN0IGluIGNhc2VcclxuICAgICAgICByZXR1cm4gbWF0Y2g7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrVmlkZW9SZW5kZXIoaXRlbSkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCd2aWRlb1JlbmRlciAtPicsIGl0ZW0pO1xyXG4gICAgdGhpcy5zdHJlYW1TZXJ2aWNlLnN0YXR1cyhpdGVtKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjaGVja1ZpZGVvUmVuZGVyJywgcmVzKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FZGl0SXRlbSgpIHtcclxuICAgIC8vICBQcmVwYXJhciBmZWVkIHBhcmEgZWRpdGFyXHJcbiAgICBsZXQgZmVlZDtcclxuICAgIGZlZWQgPSB0aGlzLml0ZW07XHJcbiAgICBkZWxldGUgZmVlZC5jb21tZW50cztcclxuICAgIGRlbGV0ZSBmZWVkLmxpa2VzO1xyXG5cclxuICAgIGZlZWQuZmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICBmaWxlLm5ldyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kaWFsb2cub3BlbihGZWVkTW9kYWxJdGVtRWRpdENvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzYwMHB4JyxcclxuICAgICAgZGF0YTogZmVlZCxcclxuICAgICAgcGFuZWxDbGFzczogJ21vZGFsLWZlZWQtcHVibGljYXRpb24nXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJlQ29udmVydE51bWJlcih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVtb3ZlSXRlbShpdGVtKSB7XHJcbiAgICB0aGlzLmdsb2JhbC5zd2FsKHtcclxuICAgICAgdGl0bGU6ICdWb2PDqiByZWFsbWVudGUgZGVzZWphIHJlbW92ZXIgZXN0ZSBQb3N0PycsXHJcbiAgICAgIHRleHQ6ICdWb2PDqiBuw6NvIHBvZGVyw6EgcmV2ZXJ0ZXIgZXNzYSBhw6fDo28gZGVwb2lzIGRlIGNvbmZpcm1hZG8nLFxyXG4gICAgICB0eXBlOiBcIndhcm5pbmdcIixcclxuICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiU2ltXCIsXHJcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiTsOjb1wiXHJcbiAgICB9KS50aGVuKGFzeW5jIGNvbmZpcm0gPT4ge1xyXG4gICAgICBpZiAoY29uZmlybS52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpLmRvYyhpdGVtLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0uZmlsZXMgJiYgaXRlbS5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgaXRlbS5maWxlcykge1xyXG4gICAgICAgICAgICBpZiAoZmlsZS50eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbGUubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmRlbGV0ZUZpcmVTdG9yYWdlKGAke3BhdGgoKS5pbWFnZXN9LyR7ZmlsZS5uYW1lfWApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZW5kbyB1bSBwb3N0IGNvbSBpbWFnZW0gbsOjbyByZWZlcmVuY2lhZGEnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2xsZWN0aW9uLmRlbGV0ZSgpO1xyXG4gICAgICAgIGl0ZW0uZGVsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5nbG9iYWwudG9hc3QoJ1Bvc3QgcmVtb3ZpZG8gY29tIFN1Y2Vzc28nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGVja0ZpbGVPcmlnaW4oZmlsZSkge1xyXG5cclxuICB9XHJcblxyXG4gIGlzWW91dHViZShmaWxlKSB7XHJcbiAgICBjb25zb2xlLmxvZygnSXNZb3V0dWJlIC0+JywgZmlsZSk7XHJcbiAgICBpZiAoZmlsZS5pbmNsdWRlcygneW91dHViZScpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0WW91dHViZUlEKHVybCkge1xyXG4gICAgdmFyIHJlZ0V4cCA9IC9eLiooKHlvdXR1LmJlXFwvKXwodlxcLyl8KFxcL3VcXC9cXHdcXC8pfChlbWJlZFxcLyl8KHdhdGNoXFw/KSlcXD8/dj89PyhbXiMmP10qKS4qLztcclxuICAgIHZhciBtYXRjaCA9IHVybC5tYXRjaChyZWdFeHApO1xyXG4gICAgcmV0dXJuIChtYXRjaCAmJiBtYXRjaFs3XS5sZW5ndGggPT0gMTEpID8gbWF0Y2hbN10gOiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FzYXAtZmVlZC1iZXRhLyIsInNvdXJjZXMiOlsibGliL2ZlZWQtaXRlbS9mZWVkLWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQTRCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkMsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDckgsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzVELFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUV6QztJQTBCRSwyQkFDUyxhQUE0QixFQUM1QixFQUFvQixFQUNwQixNQUFjLEVBQ2QsTUFBaUIsRUFDakIsT0FBcUI7UUFKckIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsT0FBRSxHQUFGLEVBQUUsQ0FBa0I7UUFDcEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBYztRQXBCcEIsY0FBUyxHQUFHLElBQUks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QUM3QixnREFBaUU7O0lBRWpFLHFDQUFnQjs7SUFDaEIseUNBQW9COztJQUNwQixzQ0FBaUI7O0lBR2YsMENBQW1DOztJQUNuQywrQkFBMkI7O0lBQzNCLG1DQUFxQjs7SUFDckIsbUNBQXdCOztJQUN4QixvQ0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdHJlYW1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RyZWFtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbmd1bGFyRmlyZXN0b3JlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICdhc2FwLWNydWQnO1xyXG5pbXBvcnQgeyBGZWVkTW9kYWxJdGVtRWRpdENvbXBvbmVudCB9IGZyb20gJy4uL2ZlZWQtcHVibGljYXRpb24vZmVlZC1tb2RhbC1pdGVtLWVkaXQvZmVlZC1tb2RhbC1pdGVtLWVkaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgcGF0aCB9IGZyb20gJy4uL2NvbnN0YW50cy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuXHJcbmltcG9ydCBTd2lwZXJDb3JlLCB7IE5hdmlnYXRpb24sIFBhZ2luYXRpb24gfSBmcm9tICdzd2lwZXInO1xyXG5Td2lwZXJDb3JlLnVzZShbTmF2aWdhdGlvbiwgUGFnaW5hdGlvbl0pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZmVlZC1pdGVtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmVlZC1pdGVtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi4vYXNhcC1mZWVkLmJldGEuY29tcG9uZW50ZS5zY3NzJywgJy4vZmVlZC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbU3RyZWFtU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZlZWRJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSBpdGVtO1xyXG4gIEBJbnB1dCgpIG93bmVyO1xyXG5cclxuICBAT3V0cHV0KCkgaXNWaXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCd2aWRlb1BsYXllcicsIHsgc3RhdGljOiB0cnVlIH0pIHZpZGVvcGxheWVyOiBFbGVtZW50UmVmXHJcbiAgQFZpZXdDaGlsZCgndmlzaWJsZUNvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgdmlzaWJsZUNvbnRyb2w7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50SW5kZXg7XHJcbiAgcHVibGljIGltYWdlTG9hZGVkID0gZmFsc2U7XHJcbiAgcHVibGljIGltYWdlRGF0YUxvYWRlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjdXJyZW50Q2Fycm91c2VsSW5kZXg7XHJcbiAgcHVibGljIGJsdXJCYWNrZ3JvdW5kSW5kZXggPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogNSkgKyAxKTtcclxuXHJcbiAgcHVibGljIG9ic2VydmVyO1xyXG4gIHB1YmxpYyB2aXNpYmxlVGltZXI7XHJcbiAgcHVibGljIHNob3RUaW1lcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc3RyZWFtU2VydmljZTogU3RyZWFtU2VydmljZSxcclxuICAgIHB1YmxpYyBkYjogQW5ndWxhckZpcmVzdG9yZSxcclxuICAgIHB1YmxpYyBnbG9iYWw6IEdsb2JhbCxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyBzZXJ2aWNlOiBVdGlsc1NlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZFZpc2liaWxpdHlDb250cm9scygpO1xyXG5cclxuICAgIGlmICh0aGlzLml0ZW0uZmlsZXMgJiYgdGhpcy5pdGVtLmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5pdGVtLmZpbGVzLm1hcChmZWVkID0+IHtcclxuICAgICAgICBpZiAoZmVlZC51cmwgJiYgZmVlZC51cmwuaW5jbHVkZXMoJ3lvdXR1YmUnKSkge1xyXG4gICAgICAgICAgZmVlZC5pc1lvdXR1YmUgPSB0cnVlO1xyXG4gICAgICAgICAgbGV0IHlvdXR1YmVJRCA9IHRoaXMuZ2V0WW91dHViZUlEKGZlZWQudXJsKTtcclxuICAgICAgICAgIGZlZWQudXJsID0gYGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7eW91dHViZUlEfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKCdJVEVNIC0+JywgdGhpcy5pdGVtKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnZpc2libGVDb250cm9sLm5hdGl2ZUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy52aXNpYmxlVGltZXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRWaXNpYmlsaXR5Q29udHJvbHMoKSB7XHJcbiAgICB0aGlzLnZpc2libGVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgdGhpcy5zaG90VGltZXItLTtcclxuICAgICAgaWYgKHRoaXMuc2hvdFRpbWVyID09IDApIHtcclxuICAgICAgICB0aGlzLmlzVmlzaWJsZS5lbWl0KHRoaXMuaXRlbSk7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnZpc2libGVUaW1lcik7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG5cclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxyXG4gICAgICB0aHJlc2hvbGQ6IFswLCAwLjEsIDAuMiwgMC4zLCAwLjQsIDAuNSwgMC42LCAwLjcsIDAuOCwgMC45LCAxLjBdXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMsIG9ic2VydmVyKSA9PiB7XHJcbiAgICAgIGVudHJpZXMuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG90VGltZXIgPSAtMTtcclxuICAgICAgICB0aGlzLml0ZW0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKGVudHJ5LmludGVyc2VjdGlvblJhdGlvID09IDEpIHtcclxuICAgICAgICAgIHRoaXMuc2hvdFRpbWVyID0gNTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25sb2FkSW1hZ2UoZXZlbnQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdFdmVudCBvbmxvYWRJbWFnZSAtPicsIGV2ZW50KTtcclxuICAgIHRoaXMuaW1hZ2VMb2FkZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5pbWFnZURhdGFMb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRXJyb3JJbWFnZShldmVudCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coJ0V2ZW50IG9uRXJyb3JJbWFnZSAtPicsIGV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwbGF5VmlkZW8oZXZlbnQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdFdmVudCAtPicsIGV2ZW50KTtcclxuICAgIGlmICh0aGlzLnZpZGVvcGxheWVyKSB7XHJcbiAgICAgIHRoaXMudmlkZW9wbGF5ZXIubmF0aXZlRWxlbWVudC5wbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGlua2lmeShzdHIpIHtcclxuICAgIHZhciByZTogYW55O1xyXG4gICAgcmUgPSBbXHJcbiAgICAgIFwiXFxcXGIoKD86aHR0cHM/fGZ0cCk6Ly9bXlxcXFxzXFxcIic8Pl0rKVxcXFxiXCIsXHJcbiAgICAgIFwiXFxcXGIod3d3XFxcXC5bXlxcXFxzXFxcIic8Pl0rKVxcXFxiXCIsXHJcbiAgICAgIFwiXFxcXGIoXFxcXHdbXFxcXHcuKy1dKkBbXFxcXHcuLV0rXFxcXC5bYS16XXsyLDZ9KVxcXFxiXCIsXHJcbiAgICAgIFwiIyhbYS16MC05XSspXCJdO1xyXG4gICAgcmUgPSBuZXcgUmVnRXhwKHJlLmpvaW4oJ3wnKSwgXCJnaVwiKTtcclxuXHJcbiAgICBpZiAoc3RyKSB7XHJcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZShyZSwgZnVuY3Rpb24gKG1hdGNoLCB1cmwsIHd3dywgbWFpbCwgdHdpdGxlcikge1xyXG4gICAgICAgIGlmICh1cmwpXHJcbiAgICAgICAgICByZXR1cm4gXCI8YSBjbGFzcz0ndGV4dC1wcmltYXJ5JyB0YXJnZXQ9J19ibGFuaycgKGNsaWNrKT0ncmVkaXJlY3ROZXdMaW5rKHVybCknIGhyZWY9XFxcIlwiICsgdXJsICsgXCJcXFwiPlwiICsgdXJsICsgXCI8L2E+XCI7XHJcbiAgICAgICAgaWYgKHd3dylcclxuICAgICAgICAgIHJldHVybiBcIjxhIGNsYXNzPSd0ZXh0LXByaW1hcnknIGhyZWY9XFxcImh0dHA6Ly9cIiArIHd3dyArIFwiXFxcIj5cIiArIHd3dyArIFwiPC9hPlwiO1xyXG4gICAgICAgIGlmIChtYWlsKVxyXG4gICAgICAgICAgcmV0dXJuIFwiPGEgY2xhc3M9J3RleHQtcHJpbWFyeScgaHJlZj1cXFwiIzwvYT5cIjtcclxuICAgICAgICBpZiAodHdpdGxlcilcclxuICAgICAgICAgIHJldHVybiBcIjxhIGNsYXNzPSd0ZXh0LXByaW1hcnknIGhyZWY9XFxcInBvcnRhbC9zZWFyY2gvXCIgKyBlbmNvZGVVUklDb21wb25lbnQoJyMnICsgdHdpdGxlcikgKyBcIlxcXCI+I1wiICsgdHdpdGxlciArIFwiPC9hPlwiO1xyXG4gICAgICAgIC8vIHJldHVybiBcIjxhIGNsYXNzPSd0ZXh0LXByaW1hcnknIGhyZWY9XFxcIiNcXFwiPiNcIiArIHR3aXRsZXIgKyBcIjwvYT5cIjtcclxuXHJcbiAgICAgICAgLy8gc2hvdWxkbnQgZ2V0IGhlcmUsIGJ1dCBqdXN0IGluIGNhc2VcclxuICAgICAgICByZXR1cm4gbWF0Y2g7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrVmlkZW9SZW5kZXIoaXRlbSkge1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCd2aWRlb1JlbmRlciAtPicsIGl0ZW0pO1xyXG4gICAgdGhpcy5zdHJlYW1TZXJ2aWNlLnN0YXR1cyhpdGVtKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjaGVja1ZpZGVvUmVuZGVyJywgcmVzKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FZGl0SXRlbSgpIHtcclxuICAgIC8vICBQcmVwYXJhciBmZWVkIHBhcmEgZWRpdGFyXHJcbiAgICBsZXQgZmVlZDtcclxuICAgIGZlZWQgPSB0aGlzLml0ZW07XHJcbiAgICBkZWxldGUgZmVlZC5jb21tZW50cztcclxuICAgIGRlbGV0ZSBmZWVkLmxpa2VzO1xyXG5cclxuICAgIGZlZWQuZmlsZXMubWFwKGZpbGUgPT4ge1xyXG4gICAgICBmaWxlLm5ldyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kaWFsb2cub3BlbihGZWVkTW9kYWxJdGVtRWRpdENvbXBvbmVudCwge1xyXG4gICAgICB3aWR0aDogJzYwMHB4JyxcclxuICAgICAgZGF0YTogZmVlZCxcclxuICAgICAgcGFuZWxDbGFzczogJ21vZGFsLWZlZWQtcHVibGljYXRpb24nXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJlQ29udmVydE51bWJlcih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uUmVtb3ZlSXRlbShpdGVtKSB7XHJcbiAgICB0aGlzLmdsb2JhbC5zd2FsKHtcclxuICAgICAgdGl0bGU6ICdWb2PDqiByZWFsbWVudGUgZGVzZWphIHJlbW92ZXIgZXN0ZSBQb3N0PycsXHJcbiAgICAgIHRleHQ6ICdWb2PDqiBuw6NvIHBvZGVyw6EgcmV2ZXJ0ZXIgZXNzYSBhw6fDo28gZGVwb2lzIGRlIGNvbmZpcm1hZG8nLFxyXG4gICAgICB0eXBlOiBcIndhcm5pbmdcIixcclxuICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiU2ltXCIsXHJcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwiTsOjb1wiXHJcbiAgICB9KS50aGVuKGFzeW5jIGNvbmZpcm0gPT4ge1xyXG4gICAgICBpZiAoY29uZmlybS52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmRiLmNvbGxlY3Rpb24ocGF0aCgpLmZlZWQpLmRvYyhpdGVtLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0uZmlsZXMgJiYgaXRlbS5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgaXRlbS5maWxlcykge1xyXG4gICAgICAgICAgICBpZiAoZmlsZS50eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbGUubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmRlbGV0ZUZpcmVTdG9yYWdlKGAke3BhdGgoKS5pbWFnZXN9LyR7ZmlsZS5uYW1lfWApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZW5kbyB1bSBwb3N0IGNvbSBpbWFnZW0gbsOjbyByZWZlcmVuY2lhZGEnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2xsZWN0aW9uLmRlbGV0ZSgpO1xyXG4gICAgICAgIGl0ZW0uZGVsZXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5nbG9iYWwudG9hc3QoJ1Bvc3QgcmVtb3ZpZG8gY29tIFN1Y2Vzc28nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGVja0ZpbGVPcmlnaW4oZmlsZSkge1xyXG5cclxuICB9XHJcblxyXG4gIGlzWW91dHViZShmaWxlKSB7XHJcbiAgICBjb25zb2xlLmxvZygnSXNZb3V0dWJlIC0+JywgZmlsZSk7XHJcbiAgICBpZiAoZmlsZS5pbmNsdWRlcygneW91dHViZScpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0WW91dHViZUlEKHVybCkge1xyXG4gICAgdmFyIHJlZ0V4cCA9IC9eLiooKHlvdXR1LmJlXFwvKXwodlxcLyl8KFxcL3VcXC9cXHdcXC8pfChlbWJlZFxcLyl8KHdhdGNoXFw/KSlcXD8/dj89PyhbXiMmP10qKS4qLztcclxuICAgIHZhciBtYXRjaCA9IHVybC5tYXRjaChyZWdFeHApO1xyXG4gICAgcmV0dXJuIChtYXRjaCAmJiBtYXRjaFs3XS5sZW5ndGggPT0gMTEpID8gbWF0Y2hbN10gOiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=