Fração

In this example below you will see how to do a Fração with some HTML / CSS and Javascript

Thumbnail
This awesome code was written by diegodev3, you can see more from this user in the personal repository.
You can find the original code on Codepen.io
Copyright diegodev3 ©

Technologies

  • HTML
  • CSS
  • JavaScript
<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  <title>Fração</title>
  
  
  <link rel='stylesheet prefetch' href='https://dl.dropboxusercontent.com/u/3330376/uikit/prototype.css'>

      <link rel="stylesheet" href="css/style.css">

  
</head>

<body>

  <html lang="pt-br">
  <head>
    <title>Rateio</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  </head>
  <body class="sc-system sc-text-sm" ng-app="myapp" ng-controller="Contabilidade::Fracoes">

    <div class="top-bar sc-p-md">
      <div class="sc-btn sc-btn-awesomeness sc-btn-blue sc-btn-md sc-m-r-md" ng-click="cadastrarFracao = !cadastrarFracao">
        <div class="sc-btn-icon"><i class="sc-icon sc-icon-engrenagem"></i></div>
        <div class="sc-btn-text">Configurar Frações</div>
      </div>
      
      <div class="sc-input-group sc-m-r-md" style="width:12em">
        <input type="text" class="sc-input-default sc-text-lg">
        <i class="sc-icon sc-icon-lupa-1 sc-btn sc-btn-blue"></i>
      </div>

      <div>
        <button class="sc-btn" ng-class="{'sc-btn-blue': filtro}" ng-click="filtro = !filtro">
          <i class="sc-icon sc-icon-fw sc-icon-filtro-2"></i>
        </button>
      </div>

      <div class="clear"></div>
    </div> <!-- .top-bar -->

    <div id="filter-bar" class="sc-text-sm ng-animation-slider sc-p-md sc-m-b-lg" ng-show="filtro">
      <div>
        <div class="sc-form-group sc-align-bottom">
        </div>
        
        <div class="sc-align-bottom sc-p-b-xxl">
          <label class="sc-p-r-md">
            <div class="sc-label">Descrição</div>
            <input type="text" class="sc-input-default">
          </label>
        </div>

        <div class="sc-m-l-md sc-align-bottom sc-p-b-xxl">
          <label>
            <div class="sc-label">Programação</div>
            <span sc-dropdown-menu="" class="sc-dropdown ng-scope">
              <button type="button" class="sc-btn sc-btn-blue sc-dropdown-toggle" ng-click="menu.toggle()">
                Selecione <i class="sc-icon sc-icon-fw sc-icon-seta-5-baixo"></i>
              </button>
              <ul class="sc-dropdown-menu sc-dropdown-menu-right ng-animation-fader ng-hide" ng-show="menu.isOn">
                <li ng-repeat="link in filter" ng-click="link.active = !link.active">
                  <div class="vertical-align">
                    <i ng-class="link.active ? 'sc-icon-visto-4' : 'sc-icon-quadrado-1'" class="sc-icon sc-icon-fw divider sc-icon-quadrado-1"></i>
                    <span>{{link.item}}</span>
                  </div>
                </li>
              </ul>
            </span>
        </div>

        <div class="sc-m-l-md sc-align-bottom">
          <label>
            <div class="sc-label">Início</div>
            <input type="text" ng-model="valor" sc-currency-input class="sc-input-default">
          </label>
        </div>

        <div class="sc-m-l-md sc-align-bottom sc-p-b-xxl">
          <label>
            <div class="sc-label">Situação</div>
            <div class="sc-btn-group">
              <button class="sc-btn" ng-class="{'sc-active':showGerado}" ng-click="showGerado=!showGerado">Gerado</button>
              <button class="sc-btn" ng-class="{'sc-active':showAguardando}" ng-click="showAguardando=!showAguardando">Aguardando</button>
            </div>
          </label>
        </div>
          
      </div>

      <hr>

      <button class="sc-btn sc-btn-awesomeness sc-btn-blue" ng-click="novaBusca()">
        <div class="sc-btn-icon"><i class="sc-icon sc-icon-fw sc-icon-lupa-2"></i></div>
        <div class="sc-btn-text">Pesquisar</div>
      </button>

      <button class="sc-btn sc-btn-awesomeness sc-btn-red" ng-click="filtro.avancado.toggle()">
        <div class="sc-btn-icon"><i class="sc-icon sc-icon-fw sc-icon-fechar-1"></i></div>
        <div class="sc-btn-text">Cancelar</div>
      </button>

    </div> <!-- #filter-bar -->
    
    <div id="cadastrar-fracao" class="sc-m-b-xxl">
      <div class="sc-text-sm ng-animation-slider sc-p-md sc-bg-gray-lighter sc-m-b-xxl" style="position:relative;" ng-show="cadastrarFracao">
        <form class="grid-container sc-m-b-xxl">
          <div class="sc-align-bottom sc-p-b-lg sc-p-t-lg">
            <label class="sc-p-r-md">
              <div class="sc-label">Nome da Fração</div>
              <input type="text" ng-model="nome" class="sc-input-default">
            </label>
          </div>
          <div class="sc-align-bottom sc-p-b-lg sc-p-t-lg">
            <label class="sc-p-r-md">
              <div class="sc-label">Calcular Fração em</div>
              <span class="sc-toggle" >
                <input type="checkbox" ng-model="tipoDeCalculo" ng-true-value="'Valor informado'" ng-false-value="'Média'" />
                <span label-true="Valor informado" label-false="Proporção"></span>
              </span>
            </label>
          </div>
          <div class="sc-align-bottom sc-p-b-lg sc-p-t-lg">
            <!-- Tagbox -->
            <span sc-dropdown-menu class="sc-dropdown pull-left">
              <div style="width: 16em;">
                <div class="sc-label">Digite a Residência</div>
                <div class="tags">
                  <span ng-repeat="item in itensSelecionadosVisiveis(listagemDevedoresFiltro)" class="sc-tag sc-tag-blue">
                    <span>{{item.nome}}</span>
                    <i class="sc-icon sc-icon-fechar-1 sc-tag-remove" ng-click="item.ativo = false"></i>
                  </span>
                  <span ng-if="itensSelecionados(listagemDevedoresFiltro).length > limiteItensVisiveis" ng-click="alteraVerTodos()" class="sc-tag sc-tag-yellow sc-cursor-pointer">
                    <span>{{!verTodos ? 'Ver mais (' + qtdItensEscondidos(listagemDevedoresFiltro) + ')' : 'Ver menos'}}</span>
                  </span>
                  <div class="clear"></div>
                </div>
                <input type="text" class="sc-input-default" placeholder="Ex: 101" ng-model="searchText" ng-click="menu.open()" style="width: 100%;">
              </div>
              <ul class="sc-dropdown-menu ng-animation-slider" ng-show="menu.isOn">
                <li>
                  <div class="vertical-align marcar-todos" ng-show="ocultarSePesquisando" ng-click="marcarTodos(listagemDevedoresFiltro)">
                    <span>{{!todosMarcados ? 'Marcar Todos' : 'Desmarcar Todos'}}</span>
                  </div>
                </li>
                <li ng-repeat="item in listagemDevedoresFiltro">
                  <div class="vertical-align" ng-show="ocultarSePesquisando" ng-click="marcarTodosFilhos(item)">
                    <span>{{item.nome}}</span>
                  </div>
                  <ul>
                    <li ng-repeat="subitem in subitens(item, searchText)" ng-click="todosMarcados = false">
                      <div class="vertical-align" ng-click="marcarItem(subitem)">
                        <i ng-class="subitem.ativo ? 'sc-icon-visto-4' : 'sc-icon-quadrado-1'" class="sc-icon sc-icon-fw"></i>
                        <span>{{subitem.nome}}</span>
                     </div>
                    </li>
                  </ul>
                </li>
              </ul>
            </span>
            <!-- Tagbox -->
          </div>
          <div class="sc-align-bottom sc-p-b-lg sc-p-t-lg">
            <label class="sc-p-r-md">
              <button class="sc-btn sc-btn-{{ seEditando() ? 'blue' : 'green'}}" ng-click="criarSalvarFracao()">{{ seEditando() ? "Salvar" : "Adicionar"}}</button>
            </label>
          </div>
          <div class="sc-align-bottom sc-p-b-lg sc-p-t-lg" ng-if="seEditando()">
            <label class="sc-p-r-md">
              <button class="sc-btn sc-btn-red" ng-click="fracaoDefaultValues()">Cancelar</button>
            </label>
          </div>
          <div style="position:absolute;top:1em;right:1em;">
            <div>
              <i class="sc-icon sc-icon-fechar-2 sc-text-red sc-text-xl" ng-click="cadastrarFracao = false"></i>
            </div>
          </div>
        </form>
        <div id="fracoes-cadastradas" class="sc-m-xxl sc-text-blue sc-text-md sc-border-t-gray-light-solid-md">
          <div ng-repeat="fracao in listagemFracao track by $index" class="sc-p-lg sc-text-blue sc-text-lg sc-text-bold sc-border-b-gray-light-solid-md sc-border-t-white-solid-md">
            <div ng-click="editarFracao($index)" class="sc-bagde-icon sc-bg-hover-yellow sc-text-hover-white sc-text-yellow sc-border-radius-full sc-cursor-pointer"><i class="sc-icon sc-icon-lapis"></i></div>
            <div ng-click="removerFracao($index)" class="sc-bagde-icon sc-bg-hover-red sc-text-hover-white sc-text-red sc-border-radius-full sc-cursor-pointer"><i class="sc-icon sc-icon-lixeira-1"></i></div>
            {{fracao.nome}}
          </div>
        </div> <!-- #fracoes-cadastradas -->
      </div>

      <div ng-show="!cadastrarFracao" id="total-fracoes" class="floating" style="width:100%">
        <div class="sc-p-lg sc-bg-white">
          <div  ng-repeat="fracao in listagemFracao" class="sc-border-radius sc-text-lg sc-two-lines sc-bg-{{$even ? 'blue' : 'green'}}-lighter sc-text-{{$even ? 'blue' : 'green'}}-darker">
            <span>Total {{fracao.nome}}<b>{{valorTotalFracao(fracao)}}</b></span>
            <div>
              <div ng-hide="fracao.editando" ng-click="editarValorFracao(fracao)" class="sc-bagde-icon sc-bg-hover-yellow sc-text-hover-white sc-text-yellow sc-border-radius-full sc-cursor-pointer"><i class="sc-icon sc-icon-lapis"></i></div>
              <button ng-hide="!fracao.editando" class="sc-btn sc-btn-green sc-text-sm" ng-click="salvarValorFracao(fracao)"><i class="sc-icon sc-icon-visto-1"></i> Salvar</button>
            </div>
          </div>
          <div class="clear"></div>
        </div>
      </div> <!-- #total-fracoes -->

    </div> <!-- #cadastrar-fracao -->

    <div ng-show="!cadastrarFracao" id="registros-fracao" >
      <ul class="sc-accordion">
        <li ng-repeat="devedor in listagemDevedores">
          <div ng-click="devedor.acc.opened = !devedor.acc.opened" class="sc-accordion-head">
            <div class="sc-accordion-icon-col sc-divider align-xs-center">
              <i class="sc-icon sc-icon-seta-11-direita sc-transition" ng-class="{'sc-rotate-90': devedor.acc.opened}"></i>
            </div>
            <div class="sc-accordion-elastic-col title sc-p-t-md sc-p-b-md">
              {{devedor.nome}}
            </div>
          </div> <!-- .sc-accordion-head -->
          <div ng-show="devedor.acc.opened" class="sc-accordion-body ng-animation-slider">
            <div ng-controller="Contabilidade::FracaoDevedor" ng-init="init(fracaoListagem, devedor)" ng-repeat="fracaoListagem in listagemFracao" ng-hide="algumEditando() && !fracaoListagem.editando" class="item-fracaoListagem sc-border-t-gray-light-solid-md">
              <form class="grid-container sc-text-sm">
                <div class="sc-align-bottom sc-p-b-lg">
                  <label class="sc-p-r-xxl align-right" style="min-width:16em">
                    <div class="sc-label sc-text-xl sc-m-b-md">{{fracaoListagem.nome}}</div>
                  </label>
                </div>
                <div class="sc-align-bottom sc-p-b-lg sc-p-t-lg">
                  <label class="sc-p-r-md" style="min-width:9em">
                    <div class="sc-label">Valor</div>
                    <input ng-show="fracaoListagem.editando" type="number" class="sc-input-default" ng-model="fracaoDevedor.valor" >
                    <div ng-show="!fracaoListagem.editando" class="sc-p-sm sc-m-t-sm sc-m-r-xl">{{fracaoDevedor.valor}}</div>
                  </label>
                </div>
                <div class="sc-align-bottom sc-p-b-lg sc-p-t-lg">
                  <label class="sc-p-r-md">
                    <div class="sc-label">Proporção</div>
                    <div class="sc-p-sm sc-m-t-sm">{{valorProporcao(fracaoDevedor, fracaoListagem)}}</div>
                  </label>
                </div>
              </form>
            </div>
          </div> <!-- .sc-accordion-body -->
        </li>
      </ul>
    </div> <!-- #registros-fracao -->

  </body>
</html>
  <script src='https://dl.dropboxusercontent.com/u/3330376/uikit/prototype.js'></script>
<script src='https://dl.dropboxusercontent.com/u/2946154/assets/bignumber/bignumber.js'></script>

  

    <script  src="js/index.js"></script>




</body>

</html>

/*Downloaded from https://www.codeseek.co/diegodev3/fraandxe7andxe3o-KwqaBG */
@font-face {
  font-family: 'sc-icons';
  font-weight: normal;
  src: font-url("https://dl.dropboxusercontent.com/u/3330376/uikit/sc-icons.woff") format("woff");
}
body {
  font-size: 16px;
}

.top-bar {
  background: #fff;
}
.top-bar > div {
  display: inline-block;
}

.floating.active > div {
  box-shadow: 0 -5px 15px #000;
  border-radius: 0 0 0.5em 0.5em;
  overflow: hidden;
}

.sc-two-lines {
  padding: .5em .7em;
  margin: 0 .5em;
  display: inline-block;
}
.sc-two-lines > span {
  float: left;
  font-size: 0.7em;
  text-align: center;
  font-weight: bold;
}
.sc-two-lines > span b {
  display: block;
  font-size: 1.4em;
}
.sc-two-lines > div {
  float: right;
  padding-left: 0.7em;
}

.sc-align-bottom {
  display: inline-table;
}
.sc-align-bottom > * {
  display: table-cell;
  vertical-align: bottom;
}

#filter-bar {
  border-top: 1px solid #ddd;
  background: #fff;
}
#filter-bar > .row > div {
  display: inline-block;
  float: left;
}

.sc-system .sc-dropdown-menu {
  width: 100%;
  left: 0;
  top: auto;
  max-height: 300px;
  overflow-y: auto;
  overflow-x: hidden;
}
.sc-system .sc-dropdown-menu > li:hover {
  background: #fff;
}
.sc-system .sc-dropdown-menu > li > div {
  padding-left: .5em;
}
.sc-system .sc-dropdown-menu > li > div:hover {
  background: #86A1BB;
  color: #fff;
}
.sc-system .sc-dropdown-menu > li > div.marcar-todos {
  background: #86A1BB;
  color: #fff;
}
.sc-system .sc-dropdown-menu > li > div.marcar-todos:hover {
  background: #708498;
  color: #fff;
}
.sc-system .sc-dropdown-menu > li .vertical-align > * {
  display: inline-block;
}
.sc-system .sc-dropdown-menu ul li {
  border-top: 1px solid #ddd;
  background: #eee;
  padding-left: 1em;
}
.sc-system .sc-dropdown-menu ul li:hover {
  background: #fff;
}


/*Downloaded from https://www.codeseek.co/diegodev3/fraandxe7andxe3o-KwqaBG */
(function() {
  var myapp;

  this.somar = function(x1, x2, x3 = 2) {
    x1 = dinheiro_bd(x1);
    x2 = dinheiro_bd(x2);
    return parseFloat((x1 + x2).toFixed(x3), 10);
  };

  this.dividir = function(x1, x2, x3 = 2) {
    x1 = dinheiro_bd(x1);
    x2 = dinheiro_bd(x2);
    return parseFloat((x1 / x2).toFixed(x3), 10);
  };

  myapp = angular.module("myapp", ["sc.app.helpers"]).controller("Contabilidade::FracaoDevedor", [
    "$scope",
    "$filter",
    function($scope,
    $filter) {
      return $scope.init = function(fracaoListagem,
    devedor) {
        return $scope.fracaoDevedor = $filter('filter')(devedor.fracoes,
    {
          'id': fracaoListagem.id
        })[0];
      };
    }
  ]).controller("Contabilidade::Fracoes", [
    "$scope",
    "$filter",
    function($scope,
    $filter) {
      var tiposDeCalculo;
      $scope.valorFracao = function(fracoes,
    fracaoId) {
        return $filter('filter')(fracoes,
    {
          'id': fracaoId
        })[0].valor;
      };
      $scope.filter = [
        {
          item: "Próximo Rateio",
          active: false
        },
        {
          item: "Próxima Cobrança",
          active: false
        },
        {
          item: "Pausado",
          active: false
        }
      ];
      tiposDeCalculo = ["Valor informado",
    "Média"];
      $scope.fracaoDefaultValues = function() {
        $scope.index = null;
        $scope.nome = "";
        $scope.tipoDeCalculo = tiposDeCalculo[0];
        return $scope.garagem = true;
      };
      $scope.fracaoDefaultValues();
      $scope.init = function(fracoes) {
        return $scope.fracoes = fracoes;
      };
      $scope.seEditando = function() {
        return $scope.index || $scope.index === 0;
      };
      // CRIAR OU SALVAR ITEM DE FRACAO
      $scope.criarSalvarFracao = function() {
        var devedor,
    i,
    len,
    novoId,
    ref;
        if ($scope.seEditando()) {
          $scope.listagemFracao[$scope.index].nome = $scope.nome;
          $scope.listagemFracao[$scope.index].tipoDeCalculo = $scope.tipoDeCalculo;
          $scope.listagemFracao[$scope.index].garagem = $scope.garagem;
          $scope.index = null;
        } else {
          novoId = idUnico();
          $scope.listagemFracao.push({
            id: novoId,
            nome: $scope.nome,
            tipoDeCalculo: $scope.tipoDeCalculo,
            garagem: $scope.garagem
          });
          ref = $scope.listagemDevedores;
          for (i = 0, len = ref.length; i < len; i++) {
            devedor = ref[i];
            devedor.fracoes.push({
              id: novoId,
              valor: 0
            });
          }
        }
        return $scope.fracaoDefaultValues();
      };
      // REMOVER ITEM DE FRACAO
      $scope.removerFracao = function(index) {
        $scope.listagemFracao.splice(index,
    1);
        return $scope.fracaoDefaultValues();
      };
      // EDITAR ITEM DE FRACAO
      $scope.editarFracao = function(index) {
        $scope.index = index;
        $scope.nome = $scope.listagemFracao[index].nome;
        $scope.tipoDeCalculo = $scope.listagemFracao[index].tipoDeCalculo;
        return $scope.garagem = $scope.listagemFracao[index].garagem;
      };
      // EDITAR VALORES DAS FRACOES
      $scope.editarValorFracao = function(fracao) {
        var dev,
    i,
    len,
    ref;
        fracao.editando = true;
        ref = $scope.listagemDevedores;
        for (i = 0, len = ref.length; i < len; i++) {
          dev = ref[i];
          dev.acc || (dev.acc = {});
          dev.acc.opened = true;
        }
      };
      $scope.algumEditando = function() {
        var editando,
    fracao,
    i,
    len,
    ref;
        editando = false;
        ref = $scope.listagemFracao;
        for (i = 0, len = ref.length; i < len; i++) {
          fracao = ref[i];
          if (fracao.editando) {
            editando = true;
          }
        }
        return editando;
      };
      // SALVAR VALORES DAS FRACOES
      $scope.salvarValorFracao = function(fracaoDaListagem) {
        var dev,
    i,
    len,
    ref,
    results;
        fracaoDaListagem.editando = false;
        if (!$scope.algumEditando()) {
          ref = $scope.listagemDevedores;
          results = [];
          for (i = 0, len = ref.length; i < len; i++) {
            dev = ref[i];
            results.push(dev.acc.opened = false);
          }
          return results;
        }
      };
      $scope.valorTotalFracao = function(fracaoListagem) {
        var devedor,
    fracao,
    i,
    len,
    ref,
    sum;
        sum = 0;
        ref = $scope.listagemDevedores;
        for (i = 0, len = ref.length; i < len; i++) {
          devedor = ref[i];
          fracao = $filter('filter')(devedor.fracoes,
    {
            'id': fracaoListagem.id
          })[0].valor;
          if (fracao) {
            sum = somar(sum,
    fracao,
    10);
          }
        }
        return sum;
      };
      $scope.valorProporcao = function(devedor,
    fracao) {
        var totalFracao;
        totalFracao = $scope.valorTotalFracao(fracao);
        return dividir(devedor.valor,
    totalFracao,
    10);
      };
      $scope.listagemFracao = [
        {
          id: idUnico(),
          editando: false,
          nome: "Fração Ideal",
          tipoDeCalculo: tiposDeCalculo[1]
        },
        {
          id: idUnico(),
          editando: false,
          nome: "Fração Igual",
          tipoDeCalculo: tiposDeCalculo[0]
        },
        {
          id: idUnico(),
          editando: false,
          nome: "Área (m²)",
          tipoDeCalculo: tiposDeCalculo[1]
        },
        {
          id: idUnico(),
          editando: false,
          nome: "Percentual",
          tipoDeCalculo: tiposDeCalculo[0]
        },
        {
          id: idUnico(),
          editando: false,
          nome: "Valor Fixo",
          tipoDeCalculo: tiposDeCalculo[0]
        },
        {
          id: idUnico(),
          editando: false,
          nome: "Multiplicado por:",
          tipoDeCalculo: tiposDeCalculo[0]
        }
      ];
      $scope.listagemDevedores = [
        {
          nome: "Torre 1 - 101",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.200000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.300000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.199999
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.150000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Torre 1 - 102",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Torre 1 - 103",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Torre 1 - 104",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Torre 2 - 101",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.200000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.300000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.199999
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.150000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Torre 2 - 102",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Torre 2 - 103",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Torre 2 - 104",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Quadra 1 - 101",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.200000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.300000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.199999
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.150000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Quadra 1 - 102",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Quadra 1 - 103",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.155001
            }
          ]
        },
        {
          nome: "Quadra 1 - 104",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Garagem 10-A",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Garagem 10-B",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Garagem 10-C",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        },
        {
          nome: "Garagem 10-D",
          fracoes: [
            {
              id: $scope.listagemFracao[0].id,
              valor: 0.125000
            },
            {
              id: $scope.listagemFracao[1].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[2].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[3].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[4].id,
              valor: 0.100000
            },
            {
              id: $scope.listagemFracao[5].id,
              valor: 0.125000
            }
          ]
        }
      ];
      $scope.listagemDevedoresFiltro = [
        {
          nome: 'Torre 1',
          itens: [
            {
              nome: 'Torre 1 - 101'
            },
            {
              nome: 'Torre 1 - 102'
            },
            {
              nome: 'Torre 1 - 103'
            },
            {
              nome: 'Torre 1 - 104'
            }
          ]
        },
        {
          nome: 'Torre 2',
          itens: [
            {
              nome: 'Torre 2 - 101'
            },
            {
              nome: 'Torre 2 - 102'
            },
            {
              nome: 'Torre 2 - 103'
            },
            {
              nome: 'Torre 2 - 104'
            }
          ]
        },
        {
          nome: 'Quadra 1',
          itens: [
            {
              nome: 'Quadra 1 - 101'
            },
            {
              nome: 'Quadra 1 - 102'
            },
            {
              nome: 'Quadra 1 - 103'
            },
            {
              nome: 'Quadra 1 - 104'
            }
          ]
        },
        {
          nome: 'Garagens',
          itens: [
            {
              nome: 'Garagem 10-A'
            },
            {
              nome: 'Garagem 10-B'
            },
            {
              nome: 'Garagem 10-C'
            },
            {
              nome: 'Garagem 10-D'
            }
          ]
        }
      ];
      // filtro
      $scope.limiteItensVisiveis = 1;
      $scope.verTodos = false;
      $scope.ocultarSePesquisando = true;
      $scope.alteraVerTodos = function() {
        return $scope.verTodos = !$scope.verTodos;
      };
      $scope.marcarTodos = function(listagem) {
        var elem,
    elemFilho,
    i,
    j,
    len,
    len1,
    ref;
        $scope.todosMarcados = !$scope.todosMarcados;
        for (i = 0, len = listagem.length; i < len; i++) {
          elem = listagem[i];
          if (elem.itens) {
            ref = elem.itens;
            for (j = 0, len1 = ref.length; j < len1; j++) {
              elemFilho = ref[j];
              elemFilho.ativo = $scope.todosMarcados;
            }
          }
        }
        return $scope.todosMarcados;
      };
      $scope.marcarTodosFilhos = function(elem) {
        var elemFilho,
    i,
    len,
    ref,
    results;
        elem.ativo = !elem.ativo;
        if (elem.itens) {
          ref = elem.itens;
          results = [];
          for (i = 0, len = ref.length; i < len; i++) {
            elemFilho = ref[i];
            results.push(elemFilho.ativo = elem.ativo);
          }
          return results;
        }
      };
      $scope.marcarItem = function(elem) {
        elem.ativo = !elem.ativo;
        return $scope.todosMarcados = false;
      };
      $scope.subitens = function(elem,
    search) {
        var pesquisa;
        pesquisa = $filter('scFilter')(elem.itens,
    search);
        if (search && search !== '') {
          $scope.ocultarSePesquisando = false;
        } else {
          $scope.ocultarSePesquisando = true;
        }
        return pesquisa;
      };
      $scope.foo = function(lista) {
        var i,
    item,
    j,
    len,
    len1,
    out,
    pai,
    ref;
        out = [];
        for (i = 0, len = lista.length; i < len; i++) {
          pai = lista[i];
          ref = pai.itens;
          for (j = 0, len1 = ref.length; j < len1; j++) {
            item = ref[j];
            out.push(item);
          }
        }
        return out;
      };
      $scope.itensSelecionados = function(lista) {
        return $filter('filter')($scope.foo(lista),
    {
          'ativo': true
        });
      };
      $scope.itensSelecionadosVisiveis = function(lista) {
        var itens;
        itens = $scope.itensSelecionados(lista);
        if (!$scope.verTodos) {
          return itens.slice(0,
    $scope.limiteItensVisiveis);
        } else {
          return itens;
        }
      };
      return $scope.qtdItensEscondidos = function(lista) {
        return $scope.itensSelecionados(lista).length - $scope.limiteItensVisiveis;
      };
    }
  // filtro
  ]).filter("scFilter", function() {
    return function(collection, search) {
      var doesMatch, regexp;
      if (search) {
        regexp = createAccentRegexp(search);
        doesMatch = function(txt) {
          return ('' + txt).match(regexp);
        };
        return collection.filter(function(el) {
          var att, value;
          if (typeof el !== 'object') {
            doesMatch(el);
          } else {
            for (att in el) {
              value = el[att];
              if ((typeof value === 'string') && doesMatch(value)) {
                return true;
              }
            }
          }
          return false;
        });
      } else {
        return collection;
      }
    };
  }).directive("floating", function() {
    return {
      restrict: "C",
      link: function(scope, $element, attrs) {
        var $w, elem, elemBox, elemHeight, elemTop, firstScroll, isFixed;
        elem = $element;
        elemBox = $('.to-floating');
        elemTop = 0;
        elemHeight = 0;
        isFixed = false;
        firstScroll = true;
        $w = $(window);
        $w.scroll(function() {
          var scrollTop, shouldBeFixed;
          if (firstScroll) {
            elemTop = elem.offset().top;
            elemHeight = elem[0].offsetHeight;
            firstScroll = false;
          }
          elem.css({
            minHeight: elemHeight
          });
          scrollTop = $w.scrollTop();
          console.log(scrollTop);
          shouldBeFixed = scrollTop > elemTop;
          if (shouldBeFixed && !isFixed) {
            elem.addClass('active');
            elemBox.css({
              position: 'fixed',
              top: 0,
              zIndex: 300,
              width: '100%'
            });
            isFixed = true;
          } else if (!shouldBeFixed && isFixed) {
            elem.removeClass('active');
            elemBox.css({
              position: 'static'
            });
            isFixed = false;
          }
        });
      },
      transclude: true,
      replace: true,
      template: "<div><div class='to-floating' ng-transclude></div></div>"
    };
  });

}).call(this);

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiPGFub255bW91cz4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQSxNQUFBOztFQUFBLElBQUMsQ0FBQSxLQUFELEdBQVMsUUFBQSxDQUFDLEVBQUQsRUFBSyxFQUFMLEVBQVMsS0FBSyxDQUFkLENBQUE7SUFDUCxFQUFBLEdBQUssV0FBQSxDQUFZLEVBQVo7SUFDTCxFQUFBLEdBQUssV0FBQSxDQUFZLEVBQVo7V0FDTCxVQUFBLENBQVcsQ0FBQyxFQUFBLEdBQUssRUFBTixDQUFTLENBQUMsT0FBVixDQUFrQixFQUFsQixDQUFYLEVBQWtDLEVBQWxDO0VBSE87O0VBS1QsSUFBQyxDQUFBLE9BQUQsR0FBVyxRQUFBLENBQUMsRUFBRCxFQUFLLEVBQUwsRUFBUyxLQUFLLENBQWQsQ0FBQTtJQUNULEVBQUEsR0FBSyxXQUFBLENBQVksRUFBWjtJQUNMLEVBQUEsR0FBSyxXQUFBLENBQVksRUFBWjtXQUNMLFVBQUEsQ0FBVyxDQUFDLEVBQUEsR0FBSyxFQUFOLENBQVMsQ0FBQyxPQUFWLENBQWtCLEVBQWxCLENBQVgsRUFBa0MsRUFBbEM7RUFIUzs7RUFNWCxLQUFBLEdBQVEsT0FBTyxDQUFDLE1BQVIsQ0FBZSxPQUFmLEVBQXdCLENBQzlCLGdCQUQ4QixDQUF4QixDQUdSLENBQUMsVUFITyxDQUdJLDhCQUhKLEVBR29DO0lBQzFDLFFBRDBDO0lBRTFDLFNBRjBDO0lBRzFDLFFBQUEsQ0FBQyxNQUFEO0lBQVMsT0FBVCxDQUFBO2FBQ0UsTUFBTSxDQUFDLElBQVAsR0FBYyxRQUFBLENBQUMsY0FBRDtJQUFpQixPQUFqQixDQUFBO2VBQ1osTUFBTSxDQUFDLGFBQVAsR0FBdUIsT0FBQSxDQUFRLFFBQVIsQ0FBQSxDQUFrQixPQUFPLENBQUMsT0FBMUI7SUFBbUM7VUFBQyxJQUFBLEVBQU0sY0FBYyxDQUFDO1FBQXRCLENBQW5DLENBQThELENBQUEsQ0FBQTtNQUR6RTtJQURoQixDQUgwQztHQUhwQyxD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QyxHQUFSLENBQVksU0FBWjtVQUNBLGFBQUEsR0FBZ0IsU0FBQSxHQUFZO1VBQzVCLElBQUcsYUFBQSxJQUFrQixDQUFJLE9BQXpCO1lBQ0UsSUFBSSxDQUFDLFFBQUwsQ0FBYyxRQUFkO1lBQ0EsT0FBTyxDQUFDLEdBQVIsQ0FDRTtjQUFBLFFBQUEsRUFBVSxPQUFWO2NBQ0EsR0FBQSxFQUFLLENBREw7Y0FFQSxNQUFBLEVBQVEsR0FGUjtjQUdBLEtBQUEsRUFBTztZQUhQLENBREY7WUFLQSxPQUFBLEdBQVUsS0FQWjtXQUFBLE1BUUssSUFBRyxDQUFJLGFBQUosSUFBc0IsT0FBekI7WUFDSCxJQUFJLENBQUMsV0FBTCxDQUFpQixRQUFqQjtZQUNBLE9BQU8sQ0FBQyxHQUFSLENBQVk7Y0FBQSxRQUFBLEVBQVU7WUFBVixDQUFaO1lBQ0EsT0FBQSxHQUFVLE1BSFA7O1FBcEJHLENBQVY7TUFUSSxDQUROO01Bb0NBLFVBQUEsRUFBWSxJQXBDWjtNQXFDQSxPQUFBLEVBQVMsSUFyQ1Q7TUFzQ0EsUUFBQSxFQUFVO0lBdENWO0VBRHFCLENBN2FmO0FBWFIiLCJzb3VyY2VzQ29udGVudCI6WyJAc29tYXIgPSAoeDEsIHgyLCB4MyA9IDIpIC0+XG4gIHgxID0gZGluaGVpcm9fYmQoeDEpXG4gIHgyID0gZGluaGVpcm9fYmQoeDIpXG4gIHBhcnNlRmxvYXQgKHgxICsgeDIpLnRvRml4ZWQoeDMpLCAxMFxuICBcbkBkaXZpZGlyID0gKHgxLCB4MiwgeDMgPSAyKSAtPlxuICB4MSA9IGRpbmhlaXJvX2JkKHgxKVxuICB4MiA9IGRpbmhlaXJvX2JkKHgyKVxuICBwYXJzZUZsb2F0ICh4MSAvIHgyKS50b0ZpeGVkKHgzKSwgMTBcblxuXG5teWFwcCA9IGFuZ3VsYXIubW9kdWxlIFwibXlhcHBcIiwgW1xuICBcInNjLmFwcC5oZWxwZXJzXCJcbl1cbi5jb250cm9sbGVyIFwiQ29udGFiaWxpZGFkZTo6RnJhY2FvRGV2ZWRvclwiLCBbXG4gIFwiJHNjb3BlXCJcbiAgXCIkZmlsdGVyXCJcbiAgKCRzY29wZSwgJGZpbHRlcikgLT5cbiAgICAkc2NvcGUuaW5pdCA9IChmcmFjYW9MaXN0YWdlbSwgZGV2ZWRvcikgLT5cbiAgICAgICRzY29wZS5mcmFjYW9EZXZlZG9yID0gJGZpbHRlcignZmlsdGVyJykoZGV2ZWRvci5mcmFjb2VzLCB7J2lkJzogZnJhY2FvTGlzdGFnZW0uaWR9KVswXVxuXVxuXG4uY29udHJvbGxlciBcIkNvbnRhYmlsaWRhZGU6OkZyYWNvZXNcIiwgW1xuICBcIiRzY29wZVwiXG4gIFwiJGZpbHRlclwiXG4gICgkc2NvcGUsICRmaWx0ZXIpIC0+XG5cbiAgICAkc2NvcGUudmFsb3JGcmFjYW8gPSAoZnJhY29lcywgZnJhY2FvSWQpIC0+XG4gICAgICByZXR1cm4gJGZpbHRlcignZmlsdGVyJykoZnJhY29lcywgeydpZCc6IGZyYWNhb0lkfSlbMF0udmFsb3JcbiAgXG4gICAgJHNjb3BlLmZpbHRlciA9IFtcbiAgICAgIHtpdGVtOiBcIlByw7N4aW1vIFJhdGVpb1wiLCBhY3RpdmU6IGZhbHNlfVxuICAgICAge2l0ZW06IFwiUHLDs3hpbWEgQ29icmFuw6dhXCIsIGFjdGl2ZTogZmFsc2V9XG4gICAgICB7aXRlbTogXCJQYXVzYWRvXCIsIGFjdGl2ZTogZmFsc2V9XG4gICAgXVxuXG4gICAgdGlwb3NEZUNhbGN1bG8gPSBbXCJWYWxvciBpbmZvcm1hZG9cIiwgXCJNw6lkaWFcIl1cbiAgICAkc2NvcGUuZnJhY2FvRGVmYXVsdFZhbHVlcyA9IC0+XG4gICAgICAkc2NvcGUuaW5kZXggPSBudWxsXG4gICAgICAkc2NvcGUubm9tZSA9IFwiXCJcbiAgICAgICRzY29wZS50aXBvRGVDYWxjdWxvID0gdGlwb3NEZUNhbGN1bG9bMF1cbiAgICAgICRzY29wZS5nYXJhZ2VtID0gdHJ1ZVxuICAgICRzY29wZS5mcmFjYW9EZWZhdWx0VmFsdWVzKClcblxuICAgICRzY29wZS5pbml0ID0gKGZyYWNvZXMpIC0+XG4gICAgICAkc2NvcGUuZnJhY29lcyA9IGZyYWNvZXNcblxuICAgICRzY29wZS5zZUVkaXRhbmRvID0gLT5cbiAgICAgICRzY29wZS5pbmRleCB8fCAkc2NvcGUuaW5kZXggPT0gMFxuXG4gICAgIyBDUklBUiBPVSBTQUxWQVIgSVRFTSBERSBGUkFDQU9cbiAgICAkc2NvcGUuY3JpYXJTYWx2YXJGcmFjYW8gPSAtPlxuICAgICAgaWYgJHNjb3BlLnNlRWRpdGFuZG8oKVxuICAgICAgICAkc2NvcGUubGlzdGFnZW1GcmFjYW9bJHNjb3BlLmluZGV4XS5ub21lID0gJHNjb3BlLm5vbWVcbiAgICAgICAgJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWyRzY29wZS5pbmRleF0udGlwb0RlQ2FsY3VsbyA9ICRzY29wZS50aXBvRGVDYWxjdWxvXG4gICAgICAgICRzY29wZS5saXN0YWdlbUZyYWNhb1skc2NvcGUuaW5kZXhdLmdhcmFnZW0gPSAkc2NvcGUuZ2FyYWdlbVxuICAgICAgICAkc2NvcGUuaW5kZXggPSBudWxsXG4gICAgICBlbHNlXG4gICAgICAgIG5vdm9JZCA9ICBpZFVuaWNvKClcbiAgICAgICAgJHNjb3BlLmxpc3RhZ2VtRnJhY2FvLnB1c2goXG4gICAgICAgICAgaWQ6IG5vdm9JZFxuICAgICAgICAgIG5vbWU6ICRzY29wZS5ub21lXG4gICAgICAgICAgdGlwb0RlQ2FsY3VsbzogJHNjb3BlLnRpcG9EZUNhbGN1bG9cbiAgICAgICAgICBnYXJhZ2VtOiAkc2NvcGUuZ2FyYWdlbVxuICAgICAgICApXG4gICAgICAgIGZvciBkZXZlZG9yIGluICRzY29wZS5saXN0YWdlbURldmVkb3Jlc1xuICAgICAgICAgIGRldmVkb3IuZnJhY29lcy5wdXNoKFxuICAgICAgICAgICAgaWQ6IG5vdm9JZFxuICAgICAgICAgICAgdmFsb3I6IDBcbiAgICAgICAgICApXG4gICAgICBcbiAgICAgICRzY29wZS5mcmFjYW9EZWZhdWx0VmFsdWVzKClcblxuICAgICMgUkVNT1ZFUiBJVEVNIERFIEZSQUNBT1xuICAgICRzY29wZS5yZW1vdmVyRnJhY2FvID0gKGluZGV4KSAtPlxuICAgICAgJHNjb3BlLmxpc3RhZ2VtRnJhY2FvLnNwbGljZShpbmRleCwgMSlcbiAgICAgICRzY29wZS5mcmFjYW9EZWZhdWx0VmFsdWVzKClcblxuICAgICMgRURJVEFSIElURU0gREUgRlJBQ0FPXG4gICAgJHNjb3BlLmVkaXRhckZyYWNhbyA9IChpbmRleCkgLT5cbiAgICAgICRzY29wZS5pbmRleCA9IGluZGV4XG4gICAgICAkc2NvcGUubm9tZSA9ICRzY29wZS5saXN0YWdlbUZyYWNhb1tpbmRleF0ubm9tZVxuICAgICAgJHNjb3BlLnRpcG9EZUNhbGN1bG8gPSAkc2NvcGUubGlzdGFnZW1GcmFjYW9baW5kZXhdLnRpcG9EZUNhbGN1bG9cbiAgICAgICRzY29wZS5nYXJhZ2VtID0gJHNjb3BlLmxpc3RhZ2VtRnJhY2FvW2luZGV4XS5nYXJhZ2VtXG5cbiAgICAjIEVESVRBUiBWQUxPUkVTIERBUyBGUkFDT0VTXG4gICAgJHNjb3BlLmVkaXRhclZhbG9yRnJhY2FvID0gKGZyYWNhbykgLT5cbiAgICAgIGZyYWNhby5lZGl0YW5kbyA9IHRydWVcbiAgICAgIGZvciBkZXYgaW4gJHNjb3BlLmxpc3RhZ2VtRGV2ZWRvcmVzXG4gICAgICAgIGRldi5hY2MgfHw9IHt9XG4gICAgICAgIGRldi5hY2Mub3BlbmVkID0gdHJ1ZVxuICAgICAgcmV0dXJuXG5cbiAgICAkc2NvcGUuYWxndW1FZGl0YW5kbyA9IC0+XG4gICAgICBlZGl0YW5kbyA9IGZhbHNlXG4gICAgICBmb3IgZnJhY2FvIGluICRzY29wZS5saXN0YWdlbUZyYWNhb1xuICAgICAgICBpZiBmcmFjYW8uZWRpdGFuZG9cbiAgICAgICAgICBlZGl0YW5kbyA9IHRydWVcbiAgICAgIHJldHVybiBlZGl0YW5kb1xuXG4gICAgIyBTQUxWQVIgVkFMT1JFUyBEQVMgRlJBQ09FU1xuICAgICRzY29wZS5zYWx2YXJWYWxvckZyYWNhbyA9IChmcmFjYW9EYUxpc3RhZ2VtKSAtPlxuICAgICAgZnJhY2FvRGFMaXN0YWdlbS5lZGl0YW5kbyA9IGZhbHNlXG4gICAgICBpZiAhJHNjb3BlLmFsZ3VtRWRpdGFuZG8oKVxuICAgICAgICBmb3IgZGV2IGluICRzY29wZS5saXN0YWdlbURldmVkb3Jlc1xuICAgICAgICAgIGRldi5hY2Mub3BlbmVkID0gZmFsc2VcbiAgICBcbiAgICAkc2NvcGUudmFsb3JUb3RhbEZyYWNhbyA9IChmcmFjYW9MaXN0YWdlbSkgLT5cbiAgICAgIHN1bSA9IDBcbiAgICAgIGZvciBkZXZlZG9yIGluICRzY29wZS5saXN0YWdlbURldmVkb3Jlc1xuICAgICAgICBmcmFjYW8gPSAkZmlsdGVyKCdmaWx0ZXInKShkZXZlZG9yLmZyYWNvZXMsIHsnaWQnOiBmcmFjYW9MaXN0YWdlbS5pZH0pWzBdLnZhbG9yXG4gICAgICAgIGlmIGZyYWNhb1xuICAgICAgICAgIHN1bSA9IHNvbWFyKHN1bSwgZnJhY2FvLCAxMClcbiAgICAgIHJldHVybiBzdW1cbiAgICBcbiAgICAkc2NvcGUudmFsb3JQcm9wb3JjYW8gPSAoZGV2ZWRvciwgZnJhY2FvKSAtPlxuICAgICAgdG90YWxGcmFjYW8gPSAkc2NvcGUudmFsb3JUb3RhbEZyYWNhbyhmcmFjYW8pXG4gICAgICByZXR1cm4gZGl2aWRpcihkZXZlZG9yLnZhbG9yLCB0b3RhbEZyYWNhbywgMTApXG4gICAgXG4gICAgJHNjb3BlLmxpc3RhZ2VtRnJhY2FvID0gW1xuICAgICAge1xuICAgICAgICBpZDogaWRVbmljbygpXG4gICAgICAgIGVkaXRhbmRvOiBmYWxzZVxuICAgICAgICBub21lOiBcIkZyYcOnw6NvIElkZWFsXCJcbiAgICAgICAgdGlwb0RlQ2FsY3VsbzogdGlwb3NEZUNhbGN1bG9bMV1cbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgaWQ6IGlkVW5pY28oKVxuICAgICAgICBlZGl0YW5kbzogZmFsc2VcbiAgICAgICAgbm9tZTogXCJGcmHDp8OjbyBJZ3VhbFwiXG4gICAgICAgIHRpcG9EZUNhbGN1bG86IHRpcG9zRGVDYWxjdWxvWzBdXG4gICAgICB9XG4gICAgICB7XG4gICAgICAgIGlkOiBpZFVuaWNvKClcbiAgICAgICAgZWRpdGFuZG86IGZhbHNlXG4gICAgICAgIG5vbWU6IFwiw4FyZWEgKG3CsilcIlxuICAgICAgICB0aXBvRGVDYWxjdWxvOiB0aXBvc0RlQ2FsY3Vsb1sxXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBpZDogaWRVbmljbygpXG4gICAgICAgIGVkaXRhbmRvOiBmYWxzZVxuICAgICAgICBub21lOiBcIlBlcmNlbnR1YWxcIlxuICAgICAgICB0aXBvRGVDYWxjdWxvOiB0aXBvc0RlQ2FsY3Vsb1swXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBpZDogaWRVbmljbygpXG4gICAgICAgIGVkaXRhbmRvOiBmYWxzZVxuICAgICAgICBub21lOiBcIlZhbG9yIEZpeG9cIlxuICAgICAgICB0aXBvRGVDYWxjdWxvOiB0aXBvc0RlQ2FsY3Vsb1swXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBpZDogaWRVbmljbygpXG4gICAgICAgIGVkaXRhbmRvOiBmYWxzZVxuICAgICAgICBub21lOiBcIk11bHRpcGxpY2FkbyBwb3I6XCJcbiAgICAgICAgdGlwb0RlQ2FsY3VsbzogdGlwb3NEZUNhbGN1bG9bMF1cbiAgICAgIH1cbiAgICBdXG5cbiAgICAkc2NvcGUubGlzdGFnZW1EZXZlZG9yZXMgPSBbXG4gICAgICB7XG4gICAgICAgIG5vbWU6IFwiVG9ycmUgMSAtIDEwMVwiXG4gICAgICAgIGZyYWNvZXM6IFtcbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1swXS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzFdLmlkLCB2YWxvcjogMC4yMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMl0uaWQsIHZhbG9yOiAwLjMwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1szXS5pZCwgdmFsb3I6IDAuMTk5OTk5fVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzRdLmlkLCB2YWxvcjogMC4xNTAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNV0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBub21lOiBcIlRvcnJlIDEgLSAxMDJcIlxuICAgICAgICBmcmFjb2VzOiBbXG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMF0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1sxXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzJdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bM10uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1s0XS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzVdLmlkLCB2YWxvcjogMC4xMjUwMDB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgbm9tZTogXCJUb3JyZSAxIC0gMTAzXCJcbiAgICAgICAgZnJhY29lczogW1xuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzBdLmlkLCB2YWxvcjogMC4xMjUwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMV0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1syXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzNdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNF0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1s1XS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICB7XG4gICAgICAgIG5vbWU6IFwiVG9ycmUgMSAtIDEwNFwiXG4gICAgICAgIGZyYWNvZXM6IFtcbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1swXS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzFdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMl0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1szXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzRdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNV0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBub21lOiBcIlRvcnJlIDIgLSAxMDFcIlxuICAgICAgICBmcmFjb2VzOiBbXG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMF0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1sxXS5pZCwgdmFsb3I6IDAuMjAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzJdLmlkLCB2YWxvcjogMC4zMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bM10uaWQsIHZhbG9yOiAwLjE5OTk5OX1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1s0XS5pZCwgdmFsb3I6IDAuMTUwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzVdLmlkLCB2YWxvcjogMC4xMjUwMDB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgbm9tZTogXCJUb3JyZSAyIC0gMTAyXCJcbiAgICAgICAgZnJhY29lczogW1xuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzBdLmlkLCB2YWxvcjogMC4xMjUwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMV0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1syXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzNdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNF0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1s1XS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICB7XG4gICAgICAgIG5vbWU6IFwiVG9ycmUgMiAtIDEwM1wiXG4gICAgICAgIGZyYWNvZXM6IFtcbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1swXS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzFdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMl0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1szXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzRdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNV0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBub21lOiBcIlRvcnJlIDIgLSAxMDRcIlxuICAgICAgICBmcmFjb2VzOiBbXG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMF0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1sxXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzJdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bM10uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1s0XS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzVdLmlkLCB2YWxvcjogMC4xMjUwMDB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgbm9tZTogXCJRdWFkcmEgMSAtIDEwMVwiXG4gICAgICAgIGZyYWNvZXM6IFtcbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1swXS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzFdLmlkLCB2YWxvcjogMC4yMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMl0uaWQsIHZhbG9yOiAwLjMwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1szXS5pZCwgdmFsb3I6IDAuMTk5OTk5fVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzRdLmlkLCB2YWxvcjogMC4xNTAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNV0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBub21lOiBcIlF1YWRyYSAxIC0gMTAyXCJcbiAgICAgICAgZnJhY29lczogW1xuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzBdLmlkLCB2YWxvcjogMC4xMjUwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMV0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1syXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzNdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNF0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1s1XS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICB7XG4gICAgICAgIG5vbWU6IFwiUXVhZHJhIDEgLSAxMDNcIlxuICAgICAgICBmcmFjb2VzOiBbXG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMF0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1sxXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzJdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bM10uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1s0XS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzVdLmlkLCB2YWxvcjogMC4xNTUwMDF9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgbm9tZTogXCJRdWFkcmEgMSAtIDEwNFwiXG4gICAgICAgIGZyYWNvZXM6IFtcbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1swXS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzFdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMl0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1szXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzRdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNV0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBub21lOiBcIkdhcmFnZW0gMTAtQVwiXG4gICAgICAgIGZyYWNvZXM6IFtcbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1swXS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzFdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMl0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1szXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzRdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNV0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBub21lOiBcIkdhcmFnZW0gMTAtQlwiXG4gICAgICAgIGZyYWNvZXM6IFtcbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1swXS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzFdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMl0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1szXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzRdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNV0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBub21lOiBcIkdhcmFnZW0gMTAtQ1wiXG4gICAgICAgIGZyYWNvZXM6IFtcbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1swXS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzFdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMl0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1szXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzRdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNV0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBub21lOiBcIkdhcmFnZW0gMTAtRFwiXG4gICAgICAgIGZyYWNvZXM6IFtcbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1swXS5pZCwgdmFsb3I6IDAuMTI1MDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzFdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bMl0uaWQsIHZhbG9yOiAwLjEwMDAwMH1cbiAgICAgICAgICB7aWQ6ICRzY29wZS5saXN0YWdlbUZyYWNhb1szXS5pZCwgdmFsb3I6IDAuMTAwMDAwfVxuICAgICAgICAgIHtpZDogJHNjb3BlLmxpc3RhZ2VtRnJhY2FvWzRdLmlkLCB2YWxvcjogMC4xMDAwMDB9XG4gICAgICAgICAge2lkOiAkc2NvcGUubGlzdGFnZW1GcmFjYW9bNV0uaWQsIHZhbG9yOiAwLjEyNTAwMH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cbiAgXG5cbiAgICAkc2NvcGUubGlzdGFnZW1EZXZlZG9yZXNGaWx0cm8gPSBbXG4gICAgICB7XG4gICAgICAgIG5vbWU6ICdUb3JyZSAxJ1xuICAgICAgICBpdGVuczogW1xuICAgICAgICAgIHtub21lOiAnVG9ycmUgMSAtIDEwMSd9XG4gICAgICAgICAge25vbWU6ICdUb3JyZSAxIC0gMTAyJ31cbiAgICAgICAgICB7bm9tZTogJ1RvcnJlIDEgLSAxMDMnfVxuICAgICAgICAgIHtub21lOiAnVG9ycmUgMSAtIDEwNCd9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgbm9tZTogJ1RvcnJlIDInXG4gICAgICAgIGl0ZW5zOiBbXG4gICAgICAgICAge25vbWU6ICdUb3JyZSAyIC0gMTAxJ31cbiAgICAgICAgICB7bm9tZTogJ1RvcnJlIDIgLSAxMDInfVxuICAgICAgICAgIHtub21lOiAnVG9ycmUgMiAtIDEwMyd9XG4gICAgICAgICAge25vbWU6ICdUb3JyZSAyIC0gMTA0J31cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBub21lOiAnUXVhZHJhIDEnXG4gICAgICAgIGl0ZW5zOiBbXG4gICAgICAgICAge25vbWU6ICdRdWFkcmEgMSAtIDEwMSd9XG4gICAgICAgICAge25vbWU6ICdRdWFkcmEgMSAtIDEwMid9XG4gICAgICAgICAge25vbWU6ICdRdWFkcmEgMSAtIDEwMyd9XG4gICAgICAgICAge25vbWU6ICdRdWFkcmEgMSAtIDEwNCd9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIHtcbiAgICAgICAgbm9tZTogJ0dhcmFnZW5zJ1xuICAgICAgICBpdGVuczogW1xuICAgICAgICAgIHtub21lOiAnR2FyYWdlbSAxMC1BJ31cbiAgICAgICAgICB7bm9tZTogJ0dhcmFnZW0gMTAtQid9XG4gICAgICAgICAge25vbWU6ICdHYXJhZ2VtIDEwLUMnfVxuICAgICAgICAgIHtub21lOiAnR2FyYWdlbSAxMC1EJ31cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF1cblxuICAgICMgZmlsdHJvXG4gICAgJHNjb3BlLmxpbWl0ZUl0ZW5zVmlzaXZlaXMgPSAxXG4gICAgJHNjb3BlLnZlclRvZG9zID0gZmFsc2VcbiAgICAkc2NvcGUub2N1bHRhclNlUGVzcXVpc2FuZG8gPSB0cnVlXG4gICAgJHNjb3BlLmFsdGVyYVZlclRvZG9zID0gLT5cbiAgICAgICRzY29wZS52ZXJUb2RvcyA9ICEkc2NvcGUudmVyVG9kb3NcbiAgICAkc2NvcGUubWFyY2FyVG9kb3MgPSAobGlzdGFnZW0pIC0+XG4gICAgICAkc2NvcGUudG9kb3NNYXJjYWRvcyA9ICEkc2NvcGUudG9kb3NNYXJjYWRvc1xuICAgICAgZm9yIGVsZW0gaW4gbGlzdGFnZW1cbiAgICAgICAgaWYgZWxlbS5pdGVuc1xuICAgICAgICAgIGZvciBlbGVtRmlsaG8gaW4gZWxlbS5pdGVuc1xuICAgICAgICAgICAgZWxlbUZpbGhvLmF0aXZvID0gJHNjb3BlLnRvZG9zTWFyY2Fkb3NcbiAgICAgIHJldHVybiAkc2NvcGUudG9kb3NNYXJjYWRvc1xuICAgICRzY29wZS5tYXJjYXJUb2Rvc0ZpbGhvcyA9IChlbGVtKSAtPlxuICAgICAgZWxlbS5hdGl2byA9ICFlbGVtLmF0aXZvXG4gICAgICBpZiBlbGVtLml0ZW5zXG4gICAgICAgIGZvciBlbGVtRmlsaG8gaW4gZWxlbS5pdGVuc1xuICAgICAgICAgIGVsZW1GaWxoby5hdGl2byA9IGVsZW0uYXRpdm9cbiAgICAkc2NvcGUubWFyY2FySXRlbSA9IChlbGVtKSAtPlxuICAgICAgZWxlbS5hdGl2byA9ICFlbGVtLmF0aXZvXG4gICAgICAkc2NvcGUudG9kb3NNYXJjYWRvcyA9IGZhbHNlXG4gICAgJHNjb3BlLnN1Yml0ZW5zID0gKGVsZW0sIHNlYXJjaCkgLT5cbiAgICAgIHBlc3F1aXNhID0gJGZpbHRlcignc2NGaWx0ZXInKShlbGVtLml0ZW5zLCBzZWFyY2gpXG4gICAgICBpZiBzZWFyY2ggJiYgc2VhcmNoICE9ICcnXG4gICAgICAgICRzY29wZS5vY3VsdGFyU2VQZXNxdWlzYW5kbyA9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgICRzY29wZS5vY3VsdGFyU2VQZXNxdWlzYW5kbyA9IHRydWVcbiAgICAgIHJldHVybiBwZXNxdWlzYVxuICAgICRzY29wZS5mb28gPSAobGlzdGEpIC0+XG4gICAgICBvdXQgPSBbXVxuICAgICAgZm9yIHBhaSBpbiBsaXN0YVxuICAgICAgICBmb3IgaXRlbSBpbiBwYWkuaXRlbnNcbiAgICAgICAgICBvdXQucHVzaChpdGVtKVxuICAgICAgcmV0dXJuIG91dFxuICAgICRzY29wZS5pdGVuc1NlbGVjaW9uYWRvcyA9IChsaXN0YSkgLT5cbiAgICAgICRmaWx0ZXIoJ2ZpbHRlcicpKCRzY29wZS5mb28obGlzdGEpLCB7J2F0aXZvJzogdHJ1ZX0pXG4gICAgJHNjb3BlLml0ZW5zU2VsZWNpb25hZG9zVmlzaXZlaXMgPSAobGlzdGEpIC0+XG4gICAgICBpdGVucyA9ICRzY29wZS5pdGVuc1NlbGVjaW9uYWRvcyhsaXN0YSlcbiAgICAgIGlmICEkc2NvcGUudmVyVG9kb3NcbiAgICAgICAgcmV0dXJuIGl0ZW5zLnNsaWNlKDAsICRzY29wZS5saW1pdGVJdGVuc1Zpc2l2ZWlzKVxuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gaXRlbnNcbiAgICAkc2NvcGUucXRkSXRlbnNFc2NvbmRpZG9zID0gKGxpc3RhKSAtPlxuICAgICAgJHNjb3BlLml0ZW5zU2VsZWNpb25hZG9zKGxpc3RhKS5sZW5ndGggLSAkc2NvcGUubGltaXRlSXRlbnNWaXNpdmVpc1xuICAgICMgZmlsdHJvXG5dXG5cbi5maWx0ZXIgXCJzY0ZpbHRlclwiLCAoKS0+XG4gIChjb2xsZWN0aW9uLCBzZWFyY2gpLT5cbiAgICBpZiBzZWFyY2hcbiAgICAgIHJlZ2V4cCA9IGNyZWF0ZUFjY2VudFJlZ2V4cChzZWFyY2gpXG4gICAgICBkb2VzTWF0Y2ggPSAodHh0KS0+XG4gICAgICAgICgnJyt0eHQpLm1hdGNoKHJlZ2V4cClcbiAgICAgIGNvbGxlY3Rpb24uZmlsdGVyIChlbCktPlxuICAgICAgICBpZiB0eXBlb2YgZWwgIT0gJ29iamVjdCdcbiAgICAgICAgICBkb2VzTWF0Y2goZWwpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBmb3IgYXR0LCB2YWx1ZSBvZiBlbFxuICAgICAgICAgICAgcmV0dXJuIHRydWUgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgJiYgZG9lc01hdGNoKHZhbHVlKVxuICAgICAgICBmYWxzZVxuICAgIGVsc2VcbiAgICAgIGNvbGxlY3Rpb25cblxuLmRpcmVjdGl2ZSBcImZsb2F0aW5nXCIsIC0+XG4gIHJlc3RyaWN0OiBcIkNcIlxuICBsaW5rOiAoc2NvcGUsICRlbGVtZW50LCBhdHRycykgLT5cbiAgICBlbGVtICAgICAgICA9ICRlbGVtZW50XG4gICAgZWxlbUJveCAgICAgPSAkKCcudG8tZmxvYXRpbmcnKVxuICAgIGVsZW1Ub3AgICAgID0gMFxuICAgIGVsZW1IZWlnaHQgID0gMFxuICAgIGlzRml4ZWQgICAgID0gZmFsc2VcbiAgICBmaXJzdFNjcm9sbCA9IHRydWVcbiAgICAkdyAgICAgICAgICA9ICQod2luZG93KVxuXG4gICAgJHcuc2Nyb2xsIC0+XG4gICAgICBpZihmaXJzdFNjcm9sbClcbiAgICAgICAgZWxlbVRvcCA9IGVsZW0ub2Zmc2V0KCkudG9wXG4gICAgICAgIGVsZW1IZWlnaHQgPSBlbGVtWzBdLm9mZnNldEhlaWdodFxuICAgICAgICBmaXJzdFNjcm9sbCA9IGZhbHNlXG5cbiAgICAgIGVsZW0uY3NzXG4gICAgICAgIG1pbkhlaWdodDogZWxlbUhlaWdodFxuXG4gICAgICBzY3JvbGxUb3AgPSAkdy5zY3JvbGxUb3AoKVxuICAgICAgY29uc29sZS5sb2cgc2Nyb2xsVG9wXG4gICAgICBzaG91bGRCZUZpeGVkID0gc2Nyb2xsVG9wID4gZWxlbVRvcFxuICAgICAgaWYgc2hvdWxkQmVGaXhlZCBhbmQgbm90IGlzRml4ZWRcbiAgICAgICAgZWxlbS5hZGRDbGFzcygnYWN0aXZlJylcbiAgICAgICAgZWxlbUJveC5jc3NcbiAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJ1xuICAgICAgICAgIHRvcDogMFxuICAgICAgICAgIHpJbmRleDogMzAwXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJ1xuICAgICAgICBpc0ZpeGVkID0gdHJ1ZVxuICAgICAgZWxzZSBpZiBub3Qgc2hvdWxkQmVGaXhlZCBhbmQgaXNGaXhlZFxuICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgICAgICBlbGVtQm94LmNzcyBwb3NpdGlvbjogJ3N0YXRpYydcbiAgICAgICAgaXNGaXhlZCA9IGZhbHNlXG4gICAgICByZXR1cm5cbiAgICByZXR1cm5cbiAgdHJhbnNjbHVkZTogdHJ1ZVxuICByZXBsYWNlOiB0cnVlXG4gIHRlbXBsYXRlOiBcIjxkaXY+PGRpdiBjbGFzcz0ndG8tZmxvYXRpbmcnIG5nLXRyYW5zY2x1ZGU+PC9kaXY+PC9kaXY+XCJcbiAgIl19
//# sourceURL=coffeescript

Comments